From 9501480c8d028aa4bc163a9a7e9655229112bbd4 Mon Sep 17 00:00:00 2001 From: Ryan Williams Date: Tue, 24 Mar 2026 05:37:54 -0700 Subject: [PATCH] Gear assembly widget * Update trackstop.lua - Add GearOverlay; fix RollerOverlay using TrackStopOverlay render * Update trackstop.rst * Update changelog.txt --- changelog.txt | 1 + docs/trackstop.rst | 7 ++++++- trackstop.lua | 32 +++++++++++++++++++++++++++++++- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/changelog.txt b/changelog.txt index 9ca3d5e44..07f12c74c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -29,6 +29,7 @@ Template for new versions: ## New Tools ## New Features +- `trackstop`: can now toggle gear assemblies ## Fixes diff --git a/docs/trackstop.rst b/docs/trackstop.rst index 34a6bdbf4..86217540c 100644 --- a/docs/trackstop.rst +++ b/docs/trackstop.rst @@ -5,7 +5,7 @@ trackstop :summary: Overlay to allow changing track stop and related building settings after construction. :tags: fort buildings interface -This script provides 3 overlays that are managed by the `overlay` framework. +This script provides 4 overlays that are managed by the `overlay` framework. The script does nothing when executed. The ``trackstop`` overlay allows the player to change the friction and dump @@ -19,3 +19,8 @@ of a selected pressure plate after it has been constructed. Manual value entry of ranges for minecart and creature triggers is provided, allowing greater precision than the game interface normally permits. Incrementing or decrementing values always restricts them to the usual intervals. + +The ``gearassembly`` overlay allows the player to toggle the state of a selected +gear assembly without linking it to a lever first. This is useful for dwarfputing +and other applications where it may be desirable to default to the disengaged +state until triggered. diff --git a/trackstop.lua b/trackstop.lua index 3c548eb5e..dca5bb0f4 100644 --- a/trackstop.lua +++ b/trackstop.lua @@ -196,7 +196,7 @@ function RollerOverlay:render(dc) self.subviews.direction:setOption(DIRECTION_MAP_REVERSE[b.direction]) self.subviews.speed:setOption(SPEED_MAP_REVERSE[b.speed]) - TrackStopOverlay.super.render(self, dc) + RollerOverlay.super.render(self, dc) end function RollerOverlay:init() @@ -539,8 +539,38 @@ function PlateOverlay:init() } end +GearOverlay = defclass(GearOverlay, overlay.OverlayWidget) +GearOverlay.ATTRS{ + desc='Adds widget for toggling gear assemblies.', + default_pos={x=-83, y=32}, + version=2, + default_enabled=true, + viewscreens='dwarfmode/ViewSheets/BUILDING/GearAssembly', + frame={w=15, h=3}, + frame_style=gui.MEDIUM_FRAME, + frame_background=gui.CLEAR_PEN, +} + +function GearOverlay:render(dc) + self.subviews.gear_toggle:setOption(not getBuild().gear_flags.disengaged) + GearOverlay.super.render(self, dc) +end + +function GearOverlay:init() + self:addviews{ + widgets.ToggleHotkeyLabel{ + view_id='gear_toggle', + frame={t=0, l=0}, + label='State:', + key='CUSTOM_SHIFT_X', + on_change=function() getBuild():setTriggerState(0) end, + }, + } +end + OVERLAY_WIDGETS = { trackstop=TrackStopOverlay, rollers=RollerOverlay, pressureplate=PlateOverlay, + gearassembly=GearOverlay, }