diff options
| author | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-09-05 09:30:42 +0200 |
|---|---|---|
| committer | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-09-23 10:05:57 +0200 |
| commit | 42778e8be409b97059fa519b53c303cdba502e01 (patch) | |
| tree | 23d03a1f8a9f8d137bf723c72086a6d79406874f /src/components/map/layers/HoverLayerComponent.js | |
| parent | 6f3afd0317a8e549f77ad6764f6dbe4d4953b67c (diff) | |
Implement rack creation
Diffstat (limited to 'src/components/map/layers/HoverLayerComponent.js')
| -rw-r--r-- | src/components/map/layers/HoverLayerComponent.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/components/map/layers/HoverLayerComponent.js b/src/components/map/layers/HoverLayerComponent.js new file mode 100644 index 00000000..861d2b9a --- /dev/null +++ b/src/components/map/layers/HoverLayerComponent.js @@ -0,0 +1,59 @@ +import PropTypes from "prop-types"; +import React from 'react'; +import {Layer} from "react-konva"; +import HoverTile from "../elements/HoverTile"; +import {TILE_SIZE_IN_PIXELS} from "../MapConstants"; + +class HoverLayerComponent extends React.Component { + static propTypes = { + mouseX: PropTypes.number.isRequired, + mouseY: PropTypes.number.isRequired, + mainGroupX: PropTypes.number.isRequired, + mainGroupY: PropTypes.number.isRequired, + isEnabled: PropTypes.func.isRequired, + onClick: PropTypes.func.isRequired, + }; + + state = { + positionX: -1, + positionY: -1, + validity: false, + }; + + componentDidUpdate() { + if (!this.props.isEnabled()) { + return; + } + + const positionX = Math.floor((this.props.mouseX - this.props.mainGroupX) / TILE_SIZE_IN_PIXELS); + const positionY = Math.floor((this.props.mouseY - this.props.mainGroupY) / TILE_SIZE_IN_PIXELS); + + if (positionX !== this.state.positionX || positionY !== this.state.positionY) { + this.setState({positionX, positionY, validity: this.props.isValid(positionX, positionY)}); + } + } + + render() { + if (!this.props.isEnabled()) { + return <Layer/>; + } + + const positionX = Math.floor((this.props.mouseX - this.props.mainGroupX) / TILE_SIZE_IN_PIXELS); + const positionY = Math.floor((this.props.mouseY - this.props.mainGroupY) / TILE_SIZE_IN_PIXELS); + const pixelX = positionX * TILE_SIZE_IN_PIXELS + this.props.mainGroupX; + const pixelY = positionY * TILE_SIZE_IN_PIXELS + this.props.mainGroupY; + + return ( + <Layer opacity={0.6}> + <HoverTile + pixelX={pixelX} pixelY={pixelY} + isValid={this.state.validity} + onClick={() => this.state.validity ? this.props.onClick(positionX, positionY) : undefined} + /> + {this.props.children ? React.cloneElement(this.props.children, {pixelX, pixelY}) : undefined} + </Layer> + ); + } +} + +export default HoverLayerComponent; |
