From e7981d485ec6503a557fcc3c61b848706e9dfcb0 Mon Sep 17 00:00:00 2001 From: Lukas Dolezal Date: Sun, 27 Dec 2020 21:01:40 +0100 Subject: [PATCH] Allow continual building placement To improve placing belts Wired onto the existing mouse down/up events, just simulating with the gamepad keybindings --- src/js/core/input_distributor.js | 3 +- .../game/hud/parts/building_placer_logic.js | 47 ++++++++++++------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/js/core/input_distributor.js b/src/js/core/input_distributor.js index 3c97c686..59d64932 100644 --- a/src/js/core/input_distributor.js +++ b/src/js/core/input_distributor.js @@ -196,7 +196,8 @@ export class InputDistributor { const keyCode = 300 + index; const isInitial = !this.keysDown.has(keyCode); - if (button.pressed) { + // Limit to initial presses only, otherwise it generates event every frame + if (button.pressed && isInitial) { logger.debug(`gamepad button [${index}]: ${button.pressed ? "pressed" : ""}`); this.keysDown.add(keyCode); diff --git a/src/js/game/hud/parts/building_placer_logic.js b/src/js/game/hud/parts/building_placer_logic.js index 4f62f774..1453e6aa 100644 --- a/src/js/game/hud/parts/building_placer_logic.js +++ b/src/js/game/hud/parts/building_placer_logic.js @@ -117,10 +117,8 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.startPipette, this); this.root.gameState.inputReciever.keyup.add(this.checkForDirectionLockSwitch, this); - keyActionMapper - .getBinding(KEYMAPPINGS.placement.placeBuilding) - .add(this.tryPlaceCurrentBuildingAtCursor, this); - keyActionMapper.getBinding(KEYMAPPINGS.placement.delete).add(this.tryDeleteBelowCursor, this); + this.root.gameState.inputReciever.keydown.add(this.onKeyDown, this); + this.root.gameState.inputReciever.keyup.add(this.onKeyUp, this); // BINDINGS TO GAME EVENTS this.root.hud.signals.buildingsSelectedForCopy.add(this.abortPlacement, this); @@ -136,29 +134,44 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { this.root.camera.upPostHandler.add(this.onMouseUp, this); } - tryPlaceCurrentBuildingAtCursor() { - if (!this.currentMetaBuilding.get()) { + onKeyDown({ keyCode }) { + if (keyCode === this.root.keyMapper.getBinding(KEYMAPPINGS.placement.placeBuilding).keyCode) { + const mousePosition = this.root.app.mousePosition; + if (!mousePosition) { + // Not on screen + return; + } + + this.onMouseDown(mousePosition, enumMouseButton.left); return; } - const mousePosition = this.root.app.mousePosition; - if (!mousePosition) { - // Not on screen + if (keyCode === this.root.keyMapper.getBinding(KEYMAPPINGS.placement.delete).keyCode) { + const mousePosition = this.root.app.mousePosition; + if (!mousePosition) { + // Not on screen + return; + } + + if (this.currentMetaBuilding.get()) { + return; + } + + this.onMouseDown(mousePosition, enumMouseButton.right); return; } - - const worldPos = this.root.camera.screenToWorld(mousePosition); - const mouseTile = worldPos.toTileSpace(); - - this.tryPlaceCurrentBuildingAt(mouseTile); } - tryDeleteBelowCursor() { - if (this.currentMetaBuilding.get()) { + onKeyUp({ keyCode }) { + if (keyCode === this.root.keyMapper.getBinding(KEYMAPPINGS.placement.placeBuilding).keyCode) { + this.onMouseUp(); return; } - this.deleteBelowCursor(); + if (keyCode === this.root.keyMapper.getBinding(KEYMAPPINGS.placement.delete).keyCode) { + this.onMouseUp(); + return; + } } /**