diff options
Diffstat (limited to 'advtrains/trainhud_presets.lua')
-rw-r--r-- | advtrains/trainhud_presets.lua | 72 |
1 files changed, 49 insertions, 23 deletions
diff --git a/advtrains/trainhud_presets.lua b/advtrains/trainhud_presets.lua index 19ff4b7..81226f0 100644 --- a/advtrains/trainhud_presets.lua +++ b/advtrains/trainhud_presets.lua @@ -1,5 +1,7 @@ advtrains.hud.presets = {} +local sformat = string.format + local default_renderers = {} for _, width in pairs {30,45,82} do for _, color in pairs {"cyan", "darkslategray", "orange", "red"} do @@ -7,20 +9,23 @@ for _, width in pairs {30,45,82} do end end local default_indicators = { - ars = {"ARS", [true] = "darkslategray30", [false] = "cyan30"}, - atc = {"ATC", [true] = "cyan30", [false] = "darkslategray30"}, - lzb = {"LZB", [true] = "red30", [false] = "darkslategray30"}, - shunt = {"Shunt", [true] = "orange45", [false] = "darkslategray45"}, - autocouple = {"Autocouple", [true] = "orange82", [false] = "darkslategray82"} + ars = {"ARS", 10, 10, [true] = "darkslategray30", [false] = "cyan30"}, + atc = {"ATC", 100, 45, [true] = "cyan30", [false] = "darkslategray30"}, + lzb = {"LZB", 50, 10, [true] = "red30", [false] = "darkslategray30"}, + shunt = {"Shunt", 90, 10, [true] = "orange45", [false] = "darkslategray45"}, + autocouple = {"Autocouple", 145, 10, [true] = "orange82", [false] = "darkslategray82"} } -for _, t in pairs(default_indicators) do - local text = t[1] - t[1] = nil - for k, v in pairs(t) do - t[k] = advtrains.hud.texture_escape(default_renderers[v](text)) +local function make_indicators(renderers, indicators) + for _, t in pairs(indicators) do + local text, x, y = unpack(t) + t[1], t[2], t[3] = nil + for k, v in pairs(t) do + t[k] = sformat("%d,%d=%s", x, y, advtrains.hud.texture_escape(renderers[v](text))) + end end + return indicators end -advtrains.hud.default_indicators = default_indicators +default_indicators = make_indicators(default_renderers, default_indicators) function advtrains.hud.presets.default(train, flip) if not train then return "" end local sformat = string.format -- this appears to be faster than (...):format @@ -40,10 +45,10 @@ function advtrains.hud.presets.default(train, flip) ht[#ht+1] = "250,35=(advtrains_hud_bg.png^[colorize\\:darkslategray^[resize\\:5x50)" ht[#ht+1] = sformat("240,%s=(advtrains_hud_bg.png^[resize\\:25x15^[colorize\\:gray)", flip and 75 or 30) -- first row - ht[#ht+1] = sformat("10,10=%s", default_indicators.ars[advtrains.interlocking and ars_disable or false]) - ht[#ht+1] = sformat("50,10=%s", default_indicators.lzb[train.hud_lzb_effect_tmr or false]) - ht[#ht+1] = sformat("90,10=%s", default_indicators.shunt[train.is_shunt or false]) - ht[#ht+1] = sformat("145,10=%s", default_indicators.autocouple[train.autocouple or false]) + ht[#ht+1] = default_indicators.ars[advtrains.interlocking and ars_disable or false] + ht[#ht+1] = default_indicators.lzb[train.hud_lzb_effect_tmr and true or false] + ht[#ht+1] = default_indicators.shunt[train.is_shunt or false] + ht[#ht+1] = default_indicators.autocouple[train.autocouple or false] -- second row local asp, dist = advtrains.hud.getlzb(train) if dist then @@ -63,7 +68,7 @@ function advtrains.hud.presets.default(train, flip) ht[#ht+1] = "10,67=(advtrains_hud_ms.png^[multiply\\:darkslategray)" ht[#ht+1] = advtrains.hud.number(888, 3, 35, 45, 9, 4, 2, "darkslategray") end - ht[#ht+1] = sformat("100,45=%s", default_indicators.atc[(train.tarvelocity or train.atc_command) and true or false]) + ht[#ht+1] = default_indicators.atc[(train.tarvelocity or train.atc_command) and true or false] if tar and tar >= 0 then local tc = math.min(max, tar) ht[#ht+1] = advtrains.hud.number(tar, 2, 135, 45, 5, 2, 2, "cyan", "darkslategray") @@ -80,6 +85,25 @@ function advtrains.hud.presets.default(train, flip) return table.concat(ht,":"), 120 end +local japan_renderers = {} +for _, color in pairs{"orange", "darkslategray"} do + for _, length in pairs{52, 100} do + japan_renderers[color .. length] = advtrains.font.renderer{width = length, height = 20, minwidth = length-4, textcolor = color} + end + for name, align in pairs{["37l"] = 0, ["37r"] = 1} do + japan_renderers[color .. name] = advtrains.font.renderer{x = 2, width = 33, height = 20, halign = align, textcolor = color} + end +end +local japan_indicators = { + atc = {"自動", 235, 5, [true] = "orange52", [false] = "darkslategray52"}, + ars = {"自動路線設定", 235, 30, [true] = "darkslategray100", [false] = "orange100"}, + lzb = {"LZB制限", 235, 55, [true] = "orange100", [false] = "darkslategray100"}, + shunt = {"入換", 235, 80, [true] = "orange100", [false] = "darkslategray100"}, + autocouple = {"自動連結", 235, 105, [true] = "orange100", [false] = "darkslategray100"}, + forward = {"前", 151, 5, [true] = "darkslategray37l", [false] = "orange37l"}, + reverse = {"後", 188, 5, [true] = "orange37r", [false] = "darkslategray37r"}, +} +japan_indicators = make_indicators(japan_renderers, japan_indicators) function advtrains.hud.presets.japan(train, flip) if not train then return "" end local sformat = string.format -- this appears to be faster than (...):format @@ -95,8 +119,8 @@ function advtrains.hud.presets.japan(train, flip) ht[#ht+1] = advtrains.hud.speed_horizontal(train, 5, 100, 217, 25, 3) ht[#ht+1] = advtrains.hud.lever(advtrains.hud.leverof(train), 122, 5, 3, 20, 90) - ht[#ht+1] = sformat("151,5=(advtrains_hud_jp_forward.png^[multiply\\:%s)", flip and "darkslategray" or "orange") - ht[#ht+1] = sformat("188,5=(advtrains_hud_jp_reverse.png^[multiply\\:%s)", flip and "orange" or "darkslategray") + ht[#ht+1] = japan_indicators.forward[flip or false] + ht[#ht+1] = japan_indicators.reverse[flip or false] ht[#ht+1] = advtrains.hud.door(train.door_open, 151, 30, 72, 39, 2) @@ -119,11 +143,11 @@ function advtrains.hud.presets.japan(train, flip) ht[#ht+1] = advtrains.hud.number(888, 3, 177, 74, 10, 2, 2, "darkslategray") end - ht[#ht+1] = sformat("235,5=(advtrains_hud_jp_atc.png^[multiply\\:%s)", (train.tarvelocity or train.atc_command) and "orange" or "darkslategray") - ht[#ht+1] = sformat("235,30=(advtrains_hud_jp_ars.png^[multiply\\:%s)", (not (advtrains.interlocking and train.ars_disable)) and "orange" or "darkslategray") - ht[#ht+1] = sformat("235,55=(advtrains_hud_jp_lzb.png^[multiply\\:%s)", train.hud_lzb_effect_tmr and "orange" or "darkslategray") - ht[#ht+1] = sformat("235,80=(advtrains_hud_jp_shunt.png^[multiply\\:%s)", train.is_shunt and "orange" or "darkslategray") - ht[#ht+1] = sformat("235,105=(advtrains_hud_jp_autocouple.png^[multiply\\:%s)", train.autocouple and "orange" or "darkslategray") + ht[#ht+1] = japan_indicators.atc[(train.tarvelocity or train.atc_command) and true or false] + ht[#ht+1] = japan_indicators.ars[advtrains.interlocking and train.ars_disable or false] + ht[#ht+1] = japan_indicators.lzb[train.hud_lzb_effect_tmr and true or false] + ht[#ht+1] = japan_indicators.shunt[train.is_shunt or false] + ht[#ht+1] = japan_indicators.autocouple[train.autocouple or false] if tar and tar >= 0 then local tc = math.min(max, tar) @@ -136,3 +160,5 @@ function advtrains.hud.presets.japan(train, flip) return table.concat(ht,":"), 130 end + +--advtrains.hud.presets.default = advtrains.hud.presets.japan |