From ca1af5a5051428f3228f4aafae5c781adde78e51 Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 13:04:58 +0100 Subject: [PATCH] Allow cycling backwards, closes #790 --- src/js/changelog.js | 1 + src/js/game/hud/parts/base_toolbar.js | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index b13ccf31..76498a7c 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -5,6 +5,7 @@ export const CHANGELOG = [ entries: [ "Added the ability to edit constant signals by left clicking them", "You can now add markers in the wire layer (partially by daanbreur)", + "Allow to cycle backwards in the toolbar with SHIFT + Tab (idea by emeraldblock)", ], }, { diff --git a/src/js/game/hud/parts/base_toolbar.js b/src/js/game/hud/parts/base_toolbar.js index a0e2a49f..b3f5abfc 100644 --- a/src/js/game/hud/parts/base_toolbar.js +++ b/src/js/game/hud/parts/base_toolbar.js @@ -1,6 +1,6 @@ import { gMetaBuildingRegistry } from "../../../core/global_registries"; -import { Signal, STOP_PROPAGATION } from "../../../core/signal"; -import { makeDiv } from "../../../core/utils"; +import { STOP_PROPAGATION } from "../../../core/signal"; +import { makeDiv, safeModulo } from "../../../core/utils"; import { KEYMAPPINGS } from "../../key_action_mapper"; import { MetaBuilding } from "../../meta_building"; import { GameRoot } from "../../root"; @@ -161,8 +161,12 @@ export class HUDBaseToolbar extends BaseHUDPart { let newBuildingFound = false; let newIndex = this.lastSelectedIndex; - for (let i = 0; i < this.primaryBuildings.length; ++i, ++newIndex) { - newIndex %= this.primaryBuildings.length; + const direction = this.root.keyMapper.getBinding(KEYMAPPINGS.placement.rotateInverseModifier).pressed + ? -1 + : 1; + + for (let i = 0; i <= this.primaryBuildings.length; ++i) { + newIndex = safeModulo(newIndex + direction, this.primaryBuildings.length); const metaBuilding = gMetaBuildingRegistry.findByClass(this.primaryBuildings[newIndex]); const handle = this.buildingHandles[metaBuilding.id]; if (!handle.selected && handle.unlocked) {