aboutsummaryrefslogtreecommitdiff
path: root/advtrains/trainhud_presets.lua
blob: 81226f0465b3ba83c76842650c63192e1e565241 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
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
		default_renderers[color .. width] = advtrains.font.renderer{width = width, height = 30, bgcolor = color}
	end
end
local default_indicators = {
	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"}
}
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
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
	
	local max = train.max_speed or 10
	local vel = advtrains.abs_ceil(train.velocity)
	local res = train.speed_restriction
	local tar = train.tarvelocity
	
	local ht = {"[combine:450x120:0,0=(advtrains_hud_bg.png^[resize\\:450x120)"}
	if train.debug then st = {train.debug} end
	
	ht[#ht+1] = advtrains.hud.lever(advtrains.hud.leverof(train), 275, 10, 5, 30, 100)
	-- reverser
	ht[#ht+1] = sformat("245,10=(advtrains_hud_arrow.png^[transformFY%s)", flip and "" or "^[multiply\\:cyan")
	ht[#ht+1] = sformat("245,95=(advtrains_hud_arrow.png%s)", flip and "^[multiply\\:orange" or "")
	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] = 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
		local color
		if asp >= 0 then
			color = (asp > 0) and "orange" or "red"
			ht[#ht+1] = advtrains.hud.number(asp, 2, 10, 45, 5, 2, 2, color, "darkslategray")
			ht[#ht+1] = sformat("10,67=(advtrains_hud_ms.png^[multiply\\:%s)", color)
		else
			color = "lime"
			ht[#ht+1] = advtrains.hud.number(88, 2, 10, 45, 5, 2, 2, "darkslategray")
			ht[#ht+1] = "10,67=(advtrains_hud_ms.png^[multiply\\:darkslategray)"
		end
		ht[#ht+1] = advtrains.hud.number(dist, 3, 35, 45, 9, 4, 2, color, "darkslategray")
	else
		ht[#ht+1] = advtrains.hud.number(88, 2, 10, 45, 5, 2, 2, "darkslategray")
		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] = 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")
		ht[#ht+1] = "135,67=(advtrains_hud_ms.png^[multiply\\:cyan)"
	else
		ht[#ht+1] = advtrains.hud.number(88, 2, 135, 45, 5, 2, 2, "darkslategray")
		ht[#ht+1] = "135,67=(advtrains_hud_ms.png^[multiply\\:darkslategray)"
	end
	ht[#ht+1] = advtrains.hud.door(train.door_open, 167, 45, 60, 30, 2)
	-- speed indications
	ht[#ht+1] = advtrains.hud.number(vel, 2, 320, 10, 35, 10, 10, "red")
	ht[#ht+1] = advtrains.hud.speed_horizontal(train, 10, 80, 217, 30, 3)
	
	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
	
	local max = train.max_speed or 10
	local vel = advtrains.abs_ceil(train.velocity)
	local res = train.speed_restriction
	local tar = train.tarvelocity
	
	local ht = {"[combine:340x130:0,0=(advtrains_hud_bg.png^[resize\\:340x130)"}

	ht[#ht+1] = advtrains.hud.number(vel, 2, 5, 5, 30, 10, 10, "red")
	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] = 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)

	local asp, dist = advtrains.hud.getlzb(train)
	if dist then
		local color
		if asp >= 0 then
			color = (asp > 0) and "orange" or "red"
			ht[#ht+1] = advtrains.hud.number(asp, 2, 151, 74, 5, 2, 2, color, "darkslategray")
			ht[#ht+1] = sformat("151,92=(advtrains_hud_ms.png^[multiply\\:%s)", color)
		else
			color = "lime"
			ht[#ht+1] = advtrains.hud.number(88, 2, 151, 74, 5, 2, 2, "darkslategray")
			ht[#ht+1] = "151,92=(advtrains_hud_ms.png^[multiply\\:darkslategray)"
		end
		ht[#ht+1] = advtrains.hud.number(dist, 3, 177, 74, 10, 2, 2, color, "darkslategray")
	else
		ht[#ht+1] = advtrains.hud.number(88, 2, 151, 74, 5, 2, 2, "darkslategray")
		ht[#ht+1] = "151,92=(advtrains_hud_ms.png^[multiply\\:darkslategray)"
		ht[#ht+1] = advtrains.hud.number(888, 3, 177, 74, 10, 2, 2, "darkslategray")
	end

	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)
		ht[#ht+1] = advtrains.hud.number(tar, 2, 288, 7, 5, 2, 2, "orange", "darkslategray")
		ht[#ht+1] = "310,15=(advtrains_hud_ms.png^[multiply\\:orange)"
	else
		ht[#ht+1] = advtrains.hud.number(88, 2, 288, 7, 5, 2, 2, "darkslategray")
		ht[#ht+1] = "310,15=(advtrains_hud_ms.png^[multiply\\:darkslategray)"
	end
	
	return table.concat(ht,":"), 130
end

--advtrains.hud.presets.default = advtrains.hud.presets.japan