aboutsummaryrefslogtreecommitdiff
path: root/advtrains_signals_japan/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'advtrains_signals_japan/init.lua')
-rw-r--r--advtrains_signals_japan/init.lua58
1 files changed, 38 insertions, 20 deletions
diff --git a/advtrains_signals_japan/init.lua b/advtrains_signals_japan/init.lua
index 7d8dc1e..84373a9 100644
--- a/advtrains_signals_japan/init.lua
+++ b/advtrains_signals_japan/init.lua
@@ -275,6 +275,34 @@ minetest.register_node("advtrains_signals_japan:pole_0", {
drop = "advtrains_signals_japan:pole_0",
})
+advtrains.interlocking.aspect.register_group {
+ name = "advtrains_signals_japan:5a",
+ label = S("Japanese signal"),
+ aspects = {
+ danger = {
+ label = S"Danger (halt)",
+ main = 0,
+ },
+ restrictedspeed = {
+ label = S"Restricted speed",
+ },
+ caution = {
+ label = S"Caution",
+ },
+ reducedspeed = {
+ label = S"Reduced speed",
+ },
+ clear = {
+ label = S"Clear (proceed)",
+ },
+ "clear",
+ "reducedspeed",
+ "caution",
+ "restrictedspeed",
+ "danger",
+ }
+}
+
local sigdefs = {}
local lightcolors = {
red = "red",
@@ -282,22 +310,9 @@ local lightcolors = {
yellow = "orange",
distant = "purple",
}
-local aspnames = {
- danger = "Danger (halt)",
- restrictedspeed = "Restricted speed",
- caution = "Caution",
- reducedspeed = "Reduced speed",
- clear = "Clear (proceed)",
-}
local function process_signal(name, sigdata, isrpt)
- local typename = "advtrains_signals_japan:" .. name
- local groupdef = {}
- groupdef.name = typename
- groupdef.aspects = {}
- groupdef.label = S(string.format("Japanese signal (type %s)", string.upper(name)))
local def = {}
local tx = {}
- def.typename = typename
def.textures = tx
def.desc = sigdata.desc
def.isdst = isrpt
@@ -307,6 +322,7 @@ local function process_signal(name, sigdata, isrpt)
lightcount = lightcount+1
end
def.lightcount = lightcount
+ def.suppasp_names = {}
for idx, asp in ipairs(sigdata.aspects) do
local aspname = asp.name
local tt = {
@@ -322,8 +338,7 @@ local function process_signal(name, sigdata, isrpt)
tt[#tt+1] = string.format("0,%d=(advtrains_hud_bg.png\\^[colorize\\:%s)", lightcount-1, color)
end
tx[aspname] = table.concat(tt, ":")
- groupdef.aspects[idx] = {asp.name}
- groupdef.aspects[asp.name] = {label = S(aspnames[asp.name]), main = asp.main, proceed_as_main = true}
+ def.suppasp_names[idx] = aspname
end
local invimg = {
string.format("[combine:%dx%d", lightcount*4+1, lightcount*4+1),
@@ -337,9 +352,6 @@ local function process_signal(name, sigdata, isrpt)
invimg[lightcount+2] = string.format("%d,%d=(advtrains_hud_bg.png\\^[resize\\:3x3\\^[colorize\\:%s)", 2*lightcount-1, 4*lightcount-3, lightcolors.distant)
end
def.inventory_image = table.concat(invimg, ":")
- if not isrpt then
- advtrains.interlocking.aspect.register_group(groupdef)
- end
return def
end
for sigtype, sigdata in pairs {
@@ -401,11 +413,17 @@ for _, rtab in ipairs {
drop = "advtrains_signals_japan:"..sigtype.."_danger_0",
advtrains = {
supported_aspects = {
- group = siginfo.typename,
+ group = "advtrains_signals_japan:5a",
+ name = siginfo.suppasp_names,
dst_shift = siginfo.isdst and 0,
+ main = (not siginfo.isdst) and {} or false
},
get_aspect = function()
- return {group = siginfo.typename, name = asp}
+ local main
+ if siginfo.isdst then
+ main = false
+ end
+ return {group = "advtrains_signals_japan:5a", name = asp, main = main}
end,
set_aspect = function(pos, node, asp)
advtrains.ndb.swap_node(pos, {name = "advtrains_signals_japan:"..sigtype.."_"..(asp.name).."_"..rot, param2 = node.param2})
ster_group`. Signal group definitions include the following fields: * `name`: The internal name of the signal group. It is recommended to use the mod name as a prefix to avoid name collisions. * `label`: The description of the signal group. * `aspects`: A table of signal aspects. Entries with string indices define the signal aspect with the name. Entries with numeric indices (starting from 1, counting upward) contain a list of corresponding aspect names (the first entry is preferred) and are mainly used for routing, where larger indices indicate that the signal with the aspect is closer to the signal with the "danger" (or similar) aspect. Each aspect in the signal group definition table should contain the following fields: * `label`: The description of the signal aspect. * `main`, `shunt`, `proceed_as_main`: The default values for the aspect. Note that the `dst` field has no default value as it is automatically adjusted. ## Notes It is allowed to provide other methods of setting the signal aspect. However: * These changes are ignored by the routesetting system. * Please call `advtrains.interlocking.signal_readjust_aspect` after the signal aspect has changed. ## Examples An example of speed signals can be found in `advtrains_signals_ks`, which provides a subset of German signals. An example of route signals can be found in `advtrains_signals_japan`, which provides a subset of Japanese signals. The mods mentioned above are also used for demonstation purposes and can also be used for testing.