From f22037e54016cd0a1d5636ece395c97dfa9f5e66 Mon Sep 17 00:00:00 2001 From: Georgios Andreadis Date: Thu, 31 Aug 2017 22:03:58 +0200 Subject: Determine hover tile validity --- src/containers/map/layers/HoverTileLayer.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/containers/map/layers/HoverTileLayer.js') 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; + }, }; }; -- cgit v1.2.3