77local flib = require (' __flib__.data-util' )
88
99local icon_encoded_position = { { icon = " __LogisticTrainNetwork__/graphics/icons/encoded-position.png" , icon_size = 64 , tint = {r = 1 , g = 1 , b = 1 , a = 1 } } }
10+ local icon_empty = { { icon = " __core__/graphics/empty.png" , icon_size = 1 , tint = {r = 1 , g = 1 , b = 1 , a = 1 } } }
11+ local proto_empty = { icons = icon_empty }
12+
13+ local function is_hidden (proto )
14+ if proto .flags then
15+ for _ ,flag in pairs (proto .flags ) do
16+ if (flag == " hidden" ) then
17+ return true
18+ end
19+ end
20+ end
21+ return false
22+ end
23+
24+ local function scaled_icon (icon , second )
25+ local size = icon .icon_size or 32
26+ local shift = icon .shift or {x = 0 , y = 0 }
27+ -- empty icon scales things up 32 times bigger and we want half size
28+ local scale = (icon .scale or 32 / size ) / 64
29+ local dx
30+ if second then
31+ dx = 0.25
32+ else
33+ dx = - 0.25
34+ end
35+ return {
36+ icon = icon .icon ,
37+ icon_size = size ,
38+ icon_mipmaps = icon .icon_mipmaps or 0 ,
39+ tint = icon .tint ,
40+ scale = scale ,
41+ -- empty icon scales things up 32 times bigger and we want half size
42+ shift = {
43+ x = shift .x / 64 + dx ,
44+ y = shift .y / 64 ,
45+ },
46+ }
47+ end
48+
49+ local function scale_icons (icons , proto , second )
50+ if proto .icon then
51+ local icon = {
52+ icon = proto .icon ,
53+ icon_size = proto .icon_size ,
54+ icon_mipmaps = proto .icon_mipmaps ,
55+ tint = {r = 1 , g = 1 , b = 1 , a = 1 }
56+ }
57+ icons [# icons + 1 ] = scaled_icon (icon , second )
58+ elseif proto .icons then
59+ for _ , v in pairs (proto .icons ) do
60+ icons [# icons + 1 ] = scaled_icon (v , second )
61+ end
62+ end
63+ end
64+
65+ local function train_signal (loco , wagon , order , suffix )
66+ local wagoncount = 0
67+ if not is_hidden (wagon ) then
68+ wagoncount = wagoncount + 1
69+ -- scale icons
70+ local icons = {}
71+ scale_icons (icons , loco , false )
72+ scale_icons (icons , wagon , true )
73+ -- create signal
74+ local localised_name
75+ local loco_name = loco .localized_name or loco .name
76+ local wagon_name = wagon .localized_name or wagon .name
77+
78+ if loco .type == " virtual-signal" then
79+ if wagon .type == " virtual-signal" then
80+ localised_name = {" virtual-signal-name.ltn-train-any-any" , suffix }
81+ else
82+ localised_name = {" virtual-signal-name.ltn-train-any" , wagon_name }
83+ end
84+ else
85+ if wagon .type == " virtual-signal" then
86+ localised_name = {" virtual-signal-name.ltn-train-any" , loco_name }
87+ else
88+ localised_name = {" virtual-signal-name.ltn-train" , loco_name , wagon_name }
89+ end
90+ end
91+
92+ local signal = {
93+ type = " virtual-signal" ,
94+ name = " ltn-train-" .. suffix .. " -" .. loco .name .. " -" .. wagon .name ,
95+ icons = flib .create_icons (proto_empty , icons ) or empty_icon ,
96+ icon_size = nil ,
97+ subgroup = " ltn-train-signal-" .. suffix ,
98+ order = order ,
99+ localised_name = localised_name ,
100+ }
101+ data :extend ({signal })
102+ end
103+ end
104+
105+ local function train_signals (loco , lococount )
106+ if not is_hidden (loco ) then
107+ -- add cargo wagons to train
108+ local wagoncount = 0
109+ for _ , wagon in pairs (data .raw [" cargo-wagon" ]) do
110+ wagoncount = wagoncount + 1
111+ local order = " a-cargo-" .. string.format (" %02d" , lococount ).. string.format (" %02d" , wagoncount )
112+ train_signal (loco , wagon , order , " cargo" )
113+ end
114+ if wagoncount > 1 then
115+ local order = " a-cargo-" .. string.format (" %02d" , lococount ).. " 00"
116+ train_signal (loco , data .raw [" virtual-signal" ][" ltn-position-any-cargo-wagon" ], oder , " cargo" )
117+ end
118+ -- add fluid wagons to train
119+ wagoncount = 0
120+ for _ , wagon in pairs (data .raw [" fluid-wagon" ]) do
121+ wagoncount = wagoncount + 1
122+ local order = " a-fluid-" .. string.format (" %02d" , lococount ).. string.format (" %02d" , wagoncount )
123+ train_signal (loco , wagon , order , " fluid" )
124+ end
125+ if wagoncount > 1 then
126+ local order = " a-cargo-" .. string.format (" %02d" , lococount ).. " 00"
127+ train_signal (loco , data .raw [" virtual-signal" ][" ltn-position-any-fluid-wagon" ], order , " fluid" )
128+ end
129+ -- add fluid wagons to train
130+ wagoncount = 0
131+ for _ , wagon in pairs (data .raw [" artillery-wagon" ]) do
132+ wagoncount = wagoncount + 1
133+ local order = " a-artillery-" .. string.format (" %02d" , lococount ).. string.format (" %02d" , wagoncount )
134+ train_signal (loco , wagon , order , " artillery" )
135+ end
136+ if wagoncount > 1 then
137+ local order = " a-artillery-" .. string.format (" %02d" , lococount ).. " 00"
138+ train_signal (loco , data .raw [" virtual-signal" ][" ltn-position-any-artillery-wagon" ], order , " artillery" )
139+ end
140+ end
141+ end
10142
11143local lococount = 0
12144for _ , loco in pairs (data .raw [" locomotive" ]) do
@@ -21,6 +153,10 @@ for _, loco in pairs(data.raw["locomotive"]) do
21153 localised_name = {" virtual-signal-name.ltn-position" , loco .localised_name or {" entity-name." .. loco .name }}
22154 }
23155 data :extend ({signal })
156+ train_signals (loco , lococount )
157+ end
158+ if lococount > 1 then
159+ train_signals (data .raw [" virtual-signal" ][" ltn-position-any-locomotive" ], 0 )
24160end
25161
26162local wagoncount = 0
87223data .raw [" constant-combinator" ][" logistic-train-stop-output" ].item_slot_count = 4 + lococount + wagoncount + wagoncount_fluid + wagoncount_artillery + itemcount + fluidcount
88224log (" [LTN] found " .. tostring (itemcount ).. " items, " .. tostring (fluidcount ).. " fluids, " .. tostring (lococount ).. " locomotives, " .. tostring (wagoncount + wagoncount_fluid + wagoncount_artillery ).. " wagons" )
89225
226+ for _ , loco in pairs (data .raw [" locomotive" ]) do
227+ end
0 commit comments