1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-06-13 13:04:03 +00:00

Place building keybinding

Allow to set keybinding for place building action

This allows to set gamepad button

TODO: Allow dragging for belt placement
This commit is contained in:
Lukáš Doležal 2020-12-26 21:06:44 +00:00
parent 45ecc0ad4e
commit 4e6017698a
5 changed files with 1088 additions and 1042 deletions

View File

@ -185,7 +185,7 @@ export class InputDistributor {
const gamepad = navigator.getGamepads()[this.connectedGamepadIndex];
for (const [index, button] of gamepad.buttons.entries()) {
const keyCode = 200 + index
const keyCode = 300 + index;
const isInitial = !this.keysDown.has(keyCode);
if (button.pressed) {

View File

@ -117,6 +117,7 @@ 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)
// BINDINGS TO GAME EVENTS
this.root.hud.signals.buildingsSelectedForCopy.add(this.abortPlacement, this);
@ -132,6 +133,23 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
this.root.camera.upPostHandler.add(this.onMouseUp, this);
}
tryPlaceCurrentBuildingAtCursor() {
if (!this.currentMetaBuilding.get()) {
return;
}
const mousePosition = this.root.app.mousePosition;
if (!mousePosition) {
// Not on screen
return;
}
const worldPos = this.root.camera.screenToWorld(mousePosition);
const mouseTile = worldPos.toTileSpace();
this.tryPlaceCurrentBuildingAt(mouseTile);
}
/**
* Called when the edit mode got changed
* @param {Layer} layer

View File

@ -195,7 +195,7 @@ export class HUDKeybindingOverlay extends BaseHUDPart {
{
// Place building
label: T.ingame.keybindingsOverlay.placeBuilding,
keys: [KEYCODE_LMB],
keys: [k.placement.placeBuilding],
condition: () => this.anyPlacementActive,
},

View File

@ -11,6 +11,10 @@ function key(str) {
return str.toUpperCase().charCodeAt(0);
}
export const KEYCODE_LMB = 1;
export const KEYCODE_MMB = 2;
export const KEYCODE_RMB = 3;
export const KEYMAPPINGS = {
general: {
confirm: { keyCode: 13 }, // enter
@ -78,6 +82,7 @@ export const KEYMAPPINGS = {
},
placement: {
placeBuilding: { keyCode: KEYCODE_LMB },
pipette: { keyCode: key("Q") },
rotateWhilePlacing: { keyCode: key("R") },
rotateInverseModifier: { keyCode: 16 }, // SHIFT
@ -112,10 +117,6 @@ for (const categoryId in KEYMAPPINGS) {
}
}
export const KEYCODE_LMB = 1;
export const KEYCODE_MMB = 2;
export const KEYCODE_RMB = 3;
/**
* Returns a keycode -> string
* @param {number} code
@ -261,6 +262,32 @@ export function getStringForKeyCode(code) {
return "]";
case 222:
return "'";
// Xbox Gamepad
case 300:
return "🎮 A";
case 301:
return "🎮 B";
case 302:
return "🎮 X";
case 303:
return "🎮 Y";
case 304:
return "🎮 LB";
case 305:
return "🎮 RB";
case 306:
return "🎮 LT";
case 307:
return "🎮 RT";
case 312:
return "🎮 ⬆";
case 313:
return "🎮 ⬇";
case 314:
return "🎮 ⬅";
case 315:
return "🎮 ➡";
}
return (48 <= code && code <= 57) || (65 <= code && code <= 90)

File diff suppressed because it is too large Load Diff