summaryrefslogtreecommitdiff
path: root/src/containers/map/layers
diff options
context:
space:
mode:
Diffstat (limited to 'src/containers/map/layers')
-rw-r--r--src/containers/map/layers/HoverTileLayer.js22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/containers/map/layers/HoverTileLayer.js b/src/containers/map/layers/HoverTileLayer.js
index b8868233..d8a1d983 100644
--- a/src/containers/map/layers/HoverTileLayer.js
+++ b/src/containers/map/layers/HoverTileLayer.js
@@ -1,11 +1,31 @@
import {connect} from "react-redux";
import {toggleTileAtLocation} from "../../../actions/topology";
import HoverTileLayerComponent from "../../../components/map/layers/HoverTileLayerComponent";
+import {
+ deriveValidNextTilePositions,
+ findPositionInPositions,
+ findPositionInRooms
+} from "../../../util/tile-calculations";
const mapStateToProps = state => {
return {
currentRoomInConstruction: state.currentRoomInConstruction,
- isValid: (x, y) => true, // TODO implement proper validation
+ isValid: (x, y) => {
+ const newRoom = Object.assign({}, state.objects.room[state.currentRoomInConstruction]);
+ const oldRooms = Object.keys(state.objects.room)
+ .map(id => Object.assign({}, state.objects.room[id]))
+ .filter(room => room.id !== state.currentRoomInConstruction);
+
+ [...oldRooms, newRoom].forEach(room => {
+ room.tiles = room.tileIds.map(tileId => state.objects.tile[tileId]);
+ });
+ if (newRoom.tileIds.length === 0) {
+ return findPositionInRooms(oldRooms, x, y) === -1;
+ }
+
+ const validNextPositions = deriveValidNextTilePositions(oldRooms, newRoom.tiles);
+ return findPositionInPositions(validNextPositions, x, y) !== -1;
+ },
};
};