1
1
-- Overlay to allow changing track stop friction and dump direction after construction
2
2
-- @ module = true
3
+
4
+ if not dfhack_flags .module then
5
+ qerror (' trackstop cannot be called directly' )
6
+ end
7
+
3
8
local gui = require (' gui' )
4
9
local widgets = require (' gui.widgets' )
5
10
local overlay = require (' plugins.overlay' )
11
+ local utils = require (' utils' )
6
12
7
- local NORTH = ' North'
8
- local EAST = ' East'
9
- local SOUTH = ' South'
10
- local WEST = ' West'
13
+ local NORTH = ' North ^ '
14
+ local EAST = ' East > '
15
+ local SOUTH = ' South v '
16
+ local WEST = ' West < '
11
17
12
18
local LOW = ' Low'
13
19
local MEDIUM = ' Medium'
@@ -25,10 +31,7 @@ local FRICTION_MAP = {
25
31
[MAX ] = 50000 ,
26
32
}
27
33
28
- local FRICTION_MAP_REVERSE = {}
29
- for k , v in pairs (FRICTION_MAP ) do
30
- FRICTION_MAP_REVERSE [v ] = k
31
- end
34
+ local FRICTION_MAP_REVERSE = utils .invert (FRICTION_MAP )
32
35
33
36
local SPEED_MAP = {
34
37
[LOW ] = 10000 ,
@@ -38,10 +41,7 @@ local SPEED_MAP = {
38
41
[MAX ] = 50000 ,
39
42
}
40
43
41
- local SPEED_MAP_REVERSE = {}
42
- for k , v in pairs (SPEED_MAP ) do
43
- SPEED_MAP_REVERSE [v ] = k
44
- end
44
+ local SPEED_MAP_REVERSE = utils .invert (SPEED_MAP )
45
45
46
46
local DIRECTION_MAP = {
47
47
[NORTH ] = df .screw_pump_direction .FromSouth ,
@@ -50,17 +50,14 @@ local DIRECTION_MAP = {
50
50
[WEST ] = df .screw_pump_direction .FromEast ,
51
51
}
52
52
53
- local DIRECTION_MAP_REVERSE = {}
54
- for k , v in pairs (DIRECTION_MAP ) do
55
- DIRECTION_MAP_REVERSE [v ] = k
56
- end
53
+ local DIRECTION_MAP_REVERSE = utils .invert (DIRECTION_MAP )
57
54
58
55
TrackStopOverlay = defclass (TrackStopOverlay , overlay .OverlayWidget )
59
56
TrackStopOverlay .ATTRS {
60
- default_pos = {x =- 71 , y = 29 },
57
+ default_pos = {x =- 73 , y = 29 },
61
58
default_enabled = true ,
62
59
viewscreens = ' dwarfmode/ViewSheets/BUILDING/Trap' ,
63
- frame = {w = 27 , h = 4 },
60
+ frame = {w = 25 , h = 4 },
64
61
frame_style = gui .MEDIUM_FRAME ,
65
62
frame_background = gui .CLEAR_PEN ,
66
63
}
@@ -152,25 +149,31 @@ end
152
149
153
150
function TrackStopOverlay :init ()
154
151
self :addviews {
155
- widgets .Label {
156
- frame = {t = 0 , l = 0 },
157
- text = ' Dump' ,
158
- },
159
152
widgets .CycleHotkeyLabel {
160
- frame = {t = 0 , l = 9 },
153
+ frame = {t = 0 , l = 0 },
154
+ label = ' Dump' ,
161
155
key = ' CUSTOM_CTRL_X' ,
162
- options = {NONE , NORTH , EAST , SOUTH , WEST },
156
+ options = {
157
+ {label = NONE , value = NONE , pen = COLOR_BLUE },
158
+ NORTH ,
159
+ EAST ,
160
+ SOUTH ,
161
+ WEST ,
162
+ },
163
163
view_id = ' dump_direction' ,
164
164
on_change = function (val ) self :setDumpDirection (val ) end ,
165
165
},
166
- widgets .Label {
167
- frame = {t = 1 , l = 0 },
168
- text = ' Friction' ,
169
- },
170
166
widgets .CycleHotkeyLabel {
171
- frame = {t = 1 , l = 9 },
167
+ label = ' Friction' ,
168
+ frame = {t = 1 , l = 0 },
172
169
key = ' CUSTOM_CTRL_F' ,
173
- options = {NONE , LOW , MEDIUM , HIGH , MAX },
170
+ options = {
171
+ {label = NONE , value = NONE , pen = COLOR_BLUE },
172
+ {label = LOW , value = LOW , pen = COLOR_GREEN },
173
+ {label = MEDIUM , value = MEDIUM , pen = COLOR_YELLOW },
174
+ {label = HIGH , value = HIGH , pen = COLOR_LIGHTRED },
175
+ {label = MAX , value = MAX , pen = COLOR_RED },
176
+ },
174
177
view_id = ' friction' ,
175
178
on_change = function (val ) self :setFriction (val ) end ,
176
179
},
@@ -224,25 +227,25 @@ end
224
227
225
228
function RollerOverlay :init ()
226
229
self :addviews {
227
- widgets .Label {
228
- frame = {t = 0 , l = 0 },
229
- text = ' Direction' ,
230
- },
231
230
widgets .CycleHotkeyLabel {
232
- frame = {t = 0 , l = 10 },
231
+ label = ' Direction' ,
232
+ frame = {t = 0 , l = 0 },
233
233
key = ' CUSTOM_CTRL_X' ,
234
234
options = {NORTH , EAST , SOUTH , WEST },
235
235
view_id = ' direction' ,
236
236
on_change = function (val ) self :setDirection (val ) end ,
237
237
},
238
- widgets .Label {
239
- frame = {t = 1 , l = 0 },
240
- text = ' Speed' ,
241
- },
242
238
widgets .CycleHotkeyLabel {
243
- frame = {t = 1 , l = 10 },
239
+ label = ' Speed' ,
240
+ frame = {t = 1 , l = 0 },
244
241
key = ' CUSTOM_CTRL_F' ,
245
- options = {LOW , MEDIUM , HIGH , HIGHER , MAX },
242
+ options = {
243
+ {label = LOW , value = LOW , pen = COLOR_BLUE },
244
+ {label = MEDIUM , value = MEDIUM , pen = COLOR_GREEN },
245
+ {label = HIGH , value = HIGH , pen = COLOR_YELLOW },
246
+ {label = HIGHER , value = HIGHER , pen = COLOR_LIGHTRED },
247
+ {label = MAX , value = MAX , pen = COLOR_RED },
248
+ },
246
249
view_id = ' speed' ,
247
250
on_change = function (val ) self :setSpeed (val ) end ,
248
251
},
@@ -253,7 +256,3 @@ OVERLAY_WIDGETS = {
253
256
trackstop = TrackStopOverlay ,
254
257
rollers = RollerOverlay ,
255
258
}
256
-
257
- if not dfhack_flags .module then
258
- main {... }
259
- end
0 commit comments