You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.3 KiB
71 lines
2.3 KiB
const Immutable = require('immutable');
|
|
|
|
import * as TroggleActions from '../../actions/board/troggle.actions';
|
|
import { SETTINGS } from '../../App';
|
|
const initial = [];
|
|
|
|
const reducer = (state = initial, action) => {
|
|
if (action.type !== TroggleActions.TROGGLE_ACTION) {
|
|
return state;
|
|
}
|
|
|
|
switch (action.action) {
|
|
case TroggleActions.MOVE:
|
|
// Randomize movement with boolean flags.
|
|
const moveToAttack = Boolean(Math.round(Math.random()));
|
|
const moveAlongXAxis = Boolean(Math.round(Math.random()));
|
|
const moveInPositiveDirection = Boolean(Math.round(Math.random()));
|
|
|
|
const x = state[action.index].x;
|
|
const y = state[action.index].y;
|
|
let newX = x;
|
|
let newY = y;
|
|
|
|
// DO NOT CONSOLIDATE. Attack first, ask questions later.
|
|
if (moveAlongXAxis === true) {
|
|
if (x === SETTINGS.GRID_WIDTH - 1 ||
|
|
(moveToAttack && x >= action.muncherX)) {
|
|
newX = x - 1;
|
|
}
|
|
else if (x === 0 ||
|
|
(moveToAttack && x < action.muncherX)) {
|
|
newX = x + 1;
|
|
}
|
|
else if (moveInPositiveDirection) {
|
|
newX = x + 1;
|
|
}
|
|
else if (!moveInPositiveDirection) {
|
|
newX = x - 1;
|
|
}
|
|
}
|
|
else {
|
|
if (y === SETTINGS.GRID_HEIGHT - 1 ||
|
|
(moveToAttack && y >= action.muncherY)) {
|
|
newY = y - 1;
|
|
}
|
|
else if (y === 0 ||
|
|
(moveToAttack && y < action.muncherY)) {
|
|
newY = y + 1;
|
|
}
|
|
else if (moveInPositiveDirection) {
|
|
newY = y + 1;
|
|
}
|
|
else if (!moveInPositiveDirection) {
|
|
newY = y - 1;
|
|
}
|
|
}
|
|
|
|
return Immutable.fromJS(state)
|
|
.setIn([action.index, 'x'], newX)
|
|
.setIn([action.index, 'y'], newY)
|
|
.toJS();
|
|
|
|
case TroggleActions.CREATE:
|
|
return Immutable.List(state).push({ x: 0, y: 0 }).toArray();
|
|
break;
|
|
}
|
|
|
|
return state;
|
|
};
|
|
|
|
export default reducer;
|
|
|