export const SET_CURRENT_DATACENTER = "SET_CURRENT_DATACENTER"; export const RESET_CURRENT_DATACENTER = "RESET_CURRENT_DATACENTER"; export const START_NEW_ROOM_CONSTRUCTION = "START_NEW_ROOM_CONSTRUCTION"; export const START_NEW_ROOM_CONSTRUCTION_SUCCEEDED = "START_NEW_ROOM_CONSTRUCTION_SUCCEEDED"; export const FINISH_NEW_ROOM_CONSTRUCTION = "FINISH_NEW_ROOM_CONSTRUCTION"; export const CANCEL_NEW_ROOM_CONSTRUCTION = "CANCEL_NEW_ROOM_CONSTRUCTION"; export const CANCEL_NEW_ROOM_CONSTRUCTION_SUCCEEDED = "CANCEL_NEW_ROOM_CONSTRUCTION_SUCCEEDED"; export const START_ROOM_EDIT = "START_ROOM_EDIT"; export const FINISH_ROOM_EDIT = "FINISH_ROOM_EDIT"; export const ADD_TILE = "ADD_TILE"; export const DELETE_TILE = "DELETE_TILE"; export function setCurrentDatacenter(datacenterId) { return { type: SET_CURRENT_DATACENTER, datacenterId }; } export function resetCurrentDatacenter() { return { type: RESET_CURRENT_DATACENTER }; } export function startNewRoomConstruction() { return { type: START_NEW_ROOM_CONSTRUCTION }; } export function startNewRoomConstructionSucceeded(roomId) { return { type: START_NEW_ROOM_CONSTRUCTION_SUCCEEDED, roomId }; } export function finishNewRoomConstruction() { return (dispatch, getState) => { const { objects, construction } = getState(); if ( objects.room[construction.currentRoomInConstruction].tileIds.length === 0 ) { dispatch(cancelNewRoomConstruction()); return; } dispatch({ type: FINISH_NEW_ROOM_CONSTRUCTION }); }; } export function cancelNewRoomConstruction() { return { type: CANCEL_NEW_ROOM_CONSTRUCTION }; } export function cancelNewRoomConstructionSucceeded() { return { type: CANCEL_NEW_ROOM_CONSTRUCTION_SUCCEEDED }; } export function startRoomEdit() { return (dispatch, getState) => { const { interactionLevel } = getState(); dispatch({ type: START_ROOM_EDIT, roomId: interactionLevel.roomId }); }; } export function finishRoomEdit() { return { type: FINISH_ROOM_EDIT }; } export function toggleTileAtLocation(positionX, positionY) { return (dispatch, getState) => { const { objects, construction } = getState(); const tileIds = objects.room[construction.currentRoomInConstruction].tileIds; for (let index in tileIds) { if ( objects.tile[tileIds[index]].positionX === positionX && objects.tile[tileIds[index]].positionY === positionY ) { dispatch(deleteTile(tileIds[index])); return; } } dispatch(addTile(positionX, positionY)); }; } export function addTile(positionX, positionY) { return { type: ADD_TILE, positionX, positionY }; } export function deleteTile(tileId) { return { type: DELETE_TILE, tileId }; }