| | |
| | | break; |
| | | } |
| | | Utils.getMapContainer().addChild(copiedSprite); |
| | | Utils.beSettings(copiedSprite, props.setSpriteBySettings, props.setDidClickSprite); |
| | | Utils.beSettings(copiedSprite, props.setSpriteBySettings); |
| | | |
| | | setLastCopiedSprites(prevArr => [...prevArr, copiedSprite]); |
| | | } |
| | |
| | | refCurr={props.refCurr} |
| | | curSprite={props.curSprite} |
| | | setSpriteBySettings={props.setSpriteBySettings} |
| | | setDidClickSprite={props.setDidClickSprite} |
| | | onSubmit={finishSettings} |
| | | mapForm={mapForm} |
| | | /> |
| | |
| | | refCurr={props.refCurr} |
| | | curSprite={props.curSprite} |
| | | setSpriteBySettings={props.setSpriteBySettings} |
| | | setDidClickSprite={props.setDidClickSprite} |
| | | onSubmit={finishSettings} |
| | | configForm={configForm} |
| | | /> |
| | |
| | | }); |
| | | const [app, setApp] = React.useState(null); |
| | | const [mapContainer, setMapContainer] = React.useState(null); |
| | | const [didClickSprite, setDidClickSprite] = React.useState(false); |
| | | const [spriteBySettings, setSpriteBySettings] = React.useState(null); |
| | | const prevSpriteBySettingsRef = React.useRef(); |
| | | const [drawerVisible, setDrawerVisible] = React.useState(false); |
| | |
| | | // init func |
| | | React.useEffect(() => { |
| | | const initialize = async () => { |
| | | player = new Player(mapRef.current, styles.dark, didClickSprite); |
| | | player = new Player(mapRef.current, styles.dark); |
| | | setApp(player.app); |
| | | setMapContainer(player.mapContainer); |
| | | Utils.syncApp(player.app); |
| | |
| | | }); |
| | | |
| | | mapContainer.children.forEach(child => { |
| | | Utils.beMovable(child, setDidClickSprite); |
| | | Utils.beMovable(child); |
| | | }) |
| | | break |
| | | case MapModel.SETTINGS_MODEL: |
| | |
| | | |
| | | Utils.initSprite(sprite, type); |
| | | mapContainer.addChild(sprite); |
| | | Utils.beMovable(sprite, setDidClickSprite); |
| | | Utils.beMovable(sprite); |
| | | }; |
| | | |
| | | // watch curSprite |
| | |
| | | } |
| | | switchFloor(curFloor); |
| | | }, [curFloor]); |
| | | |
| | | // didClickSprite, stop triggers both sprite click and play's selection boxs |
| | | React.useEffect(() => { |
| | | player.updateDidClickSprite(didClickSprite); |
| | | }, [didClickSprite]) |
| | | |
| | | // watch spriteBySettings |
| | | React.useEffect(() => { |
| | |
| | | setSpriteBySettings(null); |
| | | }} |
| | | setSpriteBySettings={setSpriteBySettings} |
| | | setDidClickSprite={setDidClickSprite} |
| | | refCurr={mapRef.current} |
| | | /> |
| | | </> |
| | |
| | | |
| | | export default class Player { |
| | | |
| | | constructor(dom, dark, didClickSprite) { |
| | | constructor(dom, dark) { |
| | | // not dynamic |
| | | this.darkModel = dark; |
| | | this.didClickSprite = didClickSprite; |
| | | // init |
| | | this.app = generatePixiApp(dark); |
| | | dom.appendChild(this.app.view); |
| | |
| | | } |
| | | |
| | | const handleMouseMove = (event) => { |
| | | if (isSelecting && !this.didClickSprite) { |
| | | if (isSelecting) { |
| | | // select end pos |
| | | const endPoint = new PIXI.Point(); |
| | | this.app.renderer.events.mapPositionToPoint(endPoint, event.clientX, event.clientY); |
| | |
| | | x: this.app.renderer.width / 2 - centerPoint.x * this.scale, |
| | | y: this.app.renderer.height / 2 - centerPoint.y * this.scale |
| | | }, 200).start(); |
| | | } |
| | | |
| | | updateDidClickSprite = (value) => { |
| | | this.didClickSprite = value; |
| | | } |
| | | |
| | | getStartedTicker = () => { |
| | |
| | | } |
| | | |
| | | // sprite be movable from sprite click event |
| | | export const beMovable = (sprite, setDidClickSprite) => { |
| | | export const beMovable = (sprite) => { |
| | | sprite.off('pointerup'); |
| | | sprite.off('pointermove'); |
| | | sprite.off('pointerdown'); |
| | |
| | | let dragTarget; |
| | | function onDragStart(event) { |
| | | if (event.button === 0) { |
| | | setDidClickSprite(true); |
| | | dragTarget = event.currentTarget; |
| | | mapContainer.parent.off('pointermove'); |
| | | mapContainer.parent.on('pointermove', onDragMove, dragTarget); |
| | |
| | | |
| | | function onDragEnd() { |
| | | if (dragTarget) { |
| | | setDidClickSprite(false); |
| | | this.parent.off('pointermove'); |
| | | this.parent.off('pointerup'); |
| | | dragTarget.alpha = 1; |