From 0b4cdbb455b5ba43b3c8d3fd7af5112021144eaa Mon Sep 17 00:00:00 2001 From: "Y. Wang" Date: Thu, 6 Jan 2022 00:29:56 +0100 Subject: Add Ne 3 and Ne 4 --- advtrains_signals_ks/init.lua | 14 +- .../models/advtrains_signals_ks_sign_ne3_smr0.obj | 212 ++++++++++++++++++++ .../models/advtrains_signals_ks_sign_ne3_smr30.obj | 213 +++++++++++++++++++++ .../models/advtrains_signals_ks_sign_ne3_smr45.obj | 213 +++++++++++++++++++++ .../models/advtrains_signals_ks_sign_ne3_smr60.obj | 213 +++++++++++++++++++++ .../models/advtrains_signals_ks_sign_ne4_smr0.obj | 148 ++++++++++++++ .../models/advtrains_signals_ks_sign_ne4_smr30.obj | 151 +++++++++++++++ .../models/advtrains_signals_ks_sign_ne4_smr45.obj | 151 +++++++++++++++ .../models/advtrains_signals_ks_sign_ne4_smr60.obj | 151 +++++++++++++++ .../textures/advtrains_signals_ks_sign_ne3x1.png | Bin 0 -> 77 bytes .../textures/advtrains_signals_ks_sign_ne3x2.png | Bin 0 -> 83 bytes .../textures/advtrains_signals_ks_sign_ne3x3.png | Bin 0 -> 80 bytes .../textures/advtrains_signals_ks_sign_ne3x4.png | Bin 0 -> 78 bytes .../textures/advtrains_signals_ks_sign_ne3x5.png | Bin 0 -> 75 bytes .../textures/advtrains_signals_ks_sign_ne4.png | Bin 0 -> 99 bytes 15 files changed, 1462 insertions(+), 4 deletions(-) create mode 100644 advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr0.obj create mode 100644 advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr30.obj create mode 100644 advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr45.obj create mode 100644 advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr60.obj create mode 100644 advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr0.obj create mode 100644 advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr30.obj create mode 100644 advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr45.obj create mode 100644 advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr60.obj create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x1.png create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x2.png create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x3.png create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x4.png create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x5.png create mode 100644 advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne4.png (limited to 'advtrains_signals_ks') diff --git a/advtrains_signals_ks/init.lua b/advtrains_signals_ks/init.lua index e97eb77..7e285ae 100755 --- a/advtrains_signals_ks/init.lua +++ b/advtrains_signals_ks/init.lua @@ -287,13 +287,19 @@ for _, rtab in ipairs({ end for typ, prts in pairs { - ["hfs"] = {asp = {main = false, shunt = false}, n = "pam", mesh = "_hfs"}, - ["pam"] = {asp = {main = -1, shunt = false, proceed_as_main = true}, n = "hfs"} + ["hfs"] = {asp = {main = false, shunt = false}, n = "pam", mesh = "_hfs", owntile = true}, + ["pam"] = {asp = {main = -1, shunt = false, proceed_as_main = true}, n = "ne4"}, + ["ne4"] = {asp = {}, n = "ne3x1", mesh="_ne4", owntile = true}, + ["ne3x1"] = {asp = {}, n = "ne3x2", mesh="_ne3", owntile = true}, + ["ne3x2"] = {asp = {}, n = "ne3x3", mesh="_ne3", owntile = true}, + ["ne3x3"] = {asp = {}, n = "ne3x4", mesh="_ne3", owntile = true}, + ["ne3x4"] = {asp = {}, n = "ne3x5", mesh="_ne3", owntile = true}, + ["ne3x5"] = {asp = {}, n = "hfs", mesh="_ne3", owntile = true}, } do local mesh = prts.mesh or "" local tile2 = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_"..typ..".png^[makealpha:255,255,255)" - if typ == "hfs" then - tile2 = "advtrains_signals_ks_sign_hfs.png" + if prts.owntile then + tile2 = "advtrains_signals_ks_sign_"..typ..".png" end register_sign("sign", typ, prts.n, "Signal Sign", "sign"..mesh, tile2, "hfs", "advtrains_signals_ks_sign_lf7.png", prts.asp) end diff --git a/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr0.obj b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr0.obj new file mode 100644 index 0000000..01bc666 --- /dev/null +++ b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr0.obj @@ -0,0 +1,212 @@ +# Blender v3.0.0 OBJ File: '' +# www.blender.org +mtllib advtrains_signals_ks_sign_ne3_smr0.mtl +o Cube.001 +v 0.100000 1.200000 -0.324543 +v 0.100000 1.200000 -0.344543 +v -0.100000 1.200000 -0.344543 +v -0.100000 1.200000 -0.324543 +v -0.100000 0.700000 -0.324543 +v 0.100000 0.700000 -0.324543 +v 0.100000 0.700000 -0.344543 +v -0.100000 0.700000 -0.344543 +v 0.024805 1.055075 -0.324528 +v 0.000000 1.055075 -0.334802 +v 0.000000 1.055075 -0.334802 +v 0.024805 1.055075 -0.324528 +v -0.035079 1.055075 -0.299723 +v -0.024805 1.055075 -0.274918 +v -0.024805 1.055075 -0.274918 +v -0.035079 1.055075 -0.299723 +v 0.024805 1.055075 -0.274918 +v 0.035079 1.055075 -0.299723 +v 0.035079 1.055075 -0.299723 +v 0.024805 1.055075 -0.274918 +v -0.024805 1.055075 -0.324528 +v -0.024805 1.055075 -0.324528 +v 0.000000 1.055075 -0.264644 +v 0.000000 1.055075 -0.264644 +v 0.024805 -0.499729 -0.274918 +v 0.035080 -0.499729 -0.299723 +v 0.000000 -0.499729 -0.264644 +v 0.024805 -0.499729 -0.324528 +v 0.000000 -0.499729 -0.334802 +v -0.024804 -0.499729 -0.274918 +v -0.024804 -0.499729 -0.324528 +v -0.035079 -0.499729 -0.299723 +v 0.100000 1.150000 -0.344543 +v 0.100000 1.100000 -0.344543 +v 0.100000 1.050000 -0.344543 +v 0.100000 1.000000 -0.344543 +v 0.100000 0.950000 -0.344543 +v 0.100000 0.900000 -0.344543 +v 0.100000 0.850000 -0.344543 +v 0.100000 0.800000 -0.344543 +v 0.100000 0.750000 -0.344543 +v -0.100000 1.150000 -0.344543 +v -0.100000 1.100000 -0.344543 +v -0.100000 1.050000 -0.344543 +v -0.100000 1.000000 -0.344543 +v -0.100000 0.950000 -0.344543 +v -0.100000 0.900000 -0.344543 +v -0.100000 0.850000 -0.344543 +v -0.100000 0.800000 -0.344543 +v -0.100000 0.750000 -0.344543 +vt 0.583333 0.750000 +vt 0.583333 0.500000 +vt 0.583333 0.250000 +vt 0.583333 1.000000 +vt 0.125000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.750000 +vt 0.125000 0.750000 +vt 0.583333 0.000000 +vt 0.562500 0.250000 +vt 0.541666 0.250000 +vt 0.520833 0.250000 +vt 0.500000 0.250000 +vt 0.479166 0.250000 +vt 0.458333 0.250000 +vt 0.437500 0.250000 +vt 0.416667 0.250000 +vt 0.395833 0.250000 +vt 0.375000 0.250000 +vt 0.375000 0.000000 +vt 0.541666 0.500000 +vt 0.562500 0.500000 +vt 0.395833 0.500000 +vt 0.416667 0.500000 +vt 0.437500 0.500000 +vt 0.458333 0.500000 +vt 0.479166 0.500000 +vt 0.500000 0.500000 +vt 0.520833 0.500000 +vt 0.375000 1.000000 +vt 0.372863 0.578719 +vt 0.372317 0.613951 +vt 0.371666 0.613734 +vt 0.372221 0.578991 +vt 0.315877 0.640082 +vt 0.292344 0.614764 +vt 0.292986 0.614492 +vt 0.316131 0.639438 +vt 0.315346 0.553400 +vt 0.349331 0.553400 +vt 0.349077 0.554044 +vt 0.315664 0.554020 +vt 0.349861 0.640082 +vt 0.349543 0.639462 +vt 0.292889 0.579531 +vt 0.293541 0.579748 +vt 0.444102 0.636706 +vt 0.409596 0.636706 +vt 0.385196 0.612306 +vt 0.385196 0.577799 +vt 0.409596 0.553400 +vt 0.444102 0.553400 +vt 0.468502 0.577800 +vt 0.468502 0.612306 +vt 0.037160 1.987962 +vt 0.036793 0.000397 +vt 0.071486 0.000384 +vt 0.071853 1.987948 +vt 0.002468 1.987974 +vt 0.002100 0.000409 +vt 0.106546 1.987936 +vt 0.106179 0.000371 +vt 0.140872 0.000358 +vt 0.141239 1.987923 +vt 0.245318 1.987885 +vt 0.244951 0.000319 +vt 0.279643 0.000307 +vt 0.280011 1.987871 +vt 0.175932 1.987910 +vt 0.175565 0.000345 +vt 0.210258 0.000332 +vt 0.210625 1.987897 +vt 0.812500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.937500 +vt 0.000000 0.875000 +vt 0.812500 0.875000 +vt 0.812500 0.937500 +vt 0.000000 0.812500 +vt 0.812500 0.812500 +vt 0.000000 0.750000 +vt 0.812500 0.750000 +vt 0.000000 0.687500 +vt 0.812500 0.687500 +vt 0.000000 0.625000 +vt 0.812500 0.625000 +vt 0.000000 0.562500 +vt 0.812500 0.562500 +vt 0.000000 0.500000 +vt 0.812500 0.500000 +vt 0.000000 0.437500 +vt 0.812500 0.437500 +vt 0.000000 0.375000 +vt 0.812500 0.375000 +vt 0.812500 1.000000 +vt 0.000000 0.937500 +vt 0.812500 0.937500 +vn 0.9239 0.3827 -0.0000 +vn -0.0000 0.3826 -0.9239 +vn -0.9239 0.3827 -0.0001 +vn 0.0000 0.3827 0.9239 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 -0.7071 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.9239 0.0000 0.3827 +vn 0.3827 -0.0000 0.9239 +vn 0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 -0.3827 +vn -0.3827 -0.0000 0.9239 +vn -0.9239 -0.0000 -0.3827 +vn -0.9239 -0.0000 0.3827 +vn -0.3827 -0.0000 -0.9239 +vn -0.3952 0.8351 -0.3827 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.7071 -0.7071 +g Cube.001_Cube.001_Default_OBJ +usemtl Default_OBJ +s off +f 1/1/1 2/2/2 3/3/3 4/4/4 +f 8/5/5 7/6/6 6/7/6 5/8/5 +f 4/9/7 3/3/7 42/10/7 43/11/7 44/12/7 45/13/7 46/14/7 47/15/7 48/16/7 49/17/7 50/18/7 8/19/7 5/20/7 +f 34/21/8 33/22/8 2/2/8 1/1/8 6/7/8 7/6/8 41/23/8 40/24/8 39/25/8 38/26/8 37/27/8 36/28/8 35/29/8 +f 1/1/9 4/4/9 5/30/9 6/7/9 +s 1 +f 9/31/9 10/32/9 11/33/9 12/34/9 +f 13/35/9 14/36/9 15/37/9 16/38/9 +f 17/39/9 18/40/9 19/41/9 20/42/9 +f 10/32/9 21/43/9 22/44/9 11/33/9 +f 14/36/9 23/45/9 24/46/9 15/37/9 +f 18/40/9 9/31/9 12/34/9 19/41/9 +f 21/47/10 13/48/10 14/49/10 23/50/10 17/51/10 18/52/10 9/53/10 10/54/10 +f 20/55/11 25/56/11 26/57/11 19/58/11 +f 21/43/9 13/35/9 16/38/9 22/44/9 +f 23/45/9 17/39/9 20/42/9 24/46/9 +f 24/59/12 27/60/12 25/56/12 20/55/12 +f 12/61/13 28/62/13 29/63/13 11/64/13 +f 19/58/14 26/57/14 28/62/14 12/61/14 +f 15/65/15 30/66/15 27/67/15 24/68/15 +f 22/69/16 31/70/16 32/71/16 16/72/16 +f 16/72/17 32/71/17 30/66/17 15/65/17 +f 11/64/18 29/63/18 31/70/18 22/69/18 +g Cube.001_Cube.001_Anzeige +usemtl Anzeige +s off +f 3/73/19 2/74/20 33/75/20 +f 34/76/20 42/77/20 3/78/20 33/75/20 +f 35/79/20 43/80/20 42/77/20 34/76/20 +f 36/81/20 44/82/20 43/80/20 35/79/20 +f 37/83/20 45/84/20 44/82/20 36/81/20 +f 38/85/20 46/86/20 45/84/20 37/83/20 +f 39/87/20 47/88/20 46/86/20 38/85/20 +f 40/89/20 48/90/20 47/88/20 39/87/20 +f 41/91/20 49/92/20 48/90/20 40/89/20 +f 7/93/20 50/94/20 49/92/20 41/91/20 +f 50/95/20 7/96/20 8/97/21 diff --git a/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr30.obj b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr30.obj new file mode 100644 index 0000000..a20c0bf --- /dev/null +++ b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr30.obj @@ -0,0 +1,213 @@ +# Blender v3.0.0 OBJ File: '' +# www.blender.org +mtllib advtrains_signals_ks_sign_ne3_smr30.mtl +o Cube.001 +v 0.234304 1.200000 -0.245825 +v 0.243228 1.200000 -0.263724 +v 0.064241 1.200000 -0.352963 +v 0.055317 1.200000 -0.335064 +v 0.055317 0.700000 -0.335064 +v 0.234304 0.700000 -0.245825 +v 0.243228 0.700000 -0.263724 +v 0.064241 0.700000 -0.352963 +v 0.167003 1.055075 -0.279363 +v 0.149388 1.055075 -0.299626 +v 0.149388 1.055075 -0.299626 +v 0.167003 1.055075 -0.279363 +v 0.102342 1.055075 -0.283885 +v 0.100469 1.055075 -0.257101 +v 0.100469 1.055075 -0.257101 +v 0.102342 1.055075 -0.283885 +v 0.144867 1.055075 -0.234966 +v 0.165129 1.055075 -0.252580 +v 0.165129 1.055075 -0.252580 +v 0.144867 1.055075 -0.234966 +v 0.122605 1.055075 -0.301499 +v 0.122605 1.055075 -0.301499 +v 0.118084 1.055075 -0.236839 +v 0.118084 1.055075 -0.236839 +v 0.144867 -0.499729 -0.234966 +v 0.165130 -0.499729 -0.252580 +v 0.118084 -0.499729 -0.236839 +v 0.167003 -0.499729 -0.279363 +v 0.149388 -0.499729 -0.299626 +v 0.100470 -0.499729 -0.257101 +v 0.122606 -0.499729 -0.301499 +v 0.102342 -0.499729 -0.283885 +v 0.243228 1.150000 -0.263724 +v 0.243228 1.100000 -0.263724 +v 0.243228 1.050000 -0.263724 +v 0.243228 1.000000 -0.263724 +v 0.243228 0.950000 -0.263724 +v 0.243228 0.900000 -0.263724 +v 0.243228 0.850000 -0.263724 +v 0.243228 0.800000 -0.263724 +v 0.243228 0.750000 -0.263724 +v 0.064241 1.150000 -0.352963 +v 0.064241 1.100000 -0.352963 +v 0.064241 1.050000 -0.352963 +v 0.064241 1.000000 -0.352963 +v 0.064241 0.950000 -0.352963 +v 0.064241 0.900000 -0.352963 +v 0.064241 0.850000 -0.352963 +v 0.064241 0.800000 -0.352963 +v 0.064241 0.750000 -0.352963 +vt 0.583333 0.750000 +vt 0.583333 0.500000 +vt 0.583333 0.250000 +vt 0.583333 1.000000 +vt 0.125000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.750000 +vt 0.125000 0.750000 +vt 0.583333 0.000000 +vt 0.562500 0.250000 +vt 0.541666 0.250000 +vt 0.520833 0.250000 +vt 0.500000 0.250000 +vt 0.479166 0.250000 +vt 0.458333 0.250000 +vt 0.437500 0.250000 +vt 0.416667 0.250000 +vt 0.395833 0.250000 +vt 0.375000 0.250000 +vt 0.375000 0.000000 +vt 0.541666 0.500000 +vt 0.562500 0.500000 +vt 0.395833 0.500000 +vt 0.416667 0.500000 +vt 0.437500 0.500000 +vt 0.458333 0.500000 +vt 0.479166 0.500000 +vt 0.500000 0.500000 +vt 0.520833 0.500000 +vt 0.375000 1.000000 +vt 0.372863 0.578719 +vt 0.372317 0.613951 +vt 0.371666 0.613734 +vt 0.372221 0.578991 +vt 0.315877 0.640082 +vt 0.292344 0.614764 +vt 0.292986 0.614492 +vt 0.316131 0.639438 +vt 0.315346 0.553400 +vt 0.349331 0.553400 +vt 0.349077 0.554044 +vt 0.315664 0.554020 +vt 0.349861 0.640082 +vt 0.349543 0.639462 +vt 0.292889 0.579531 +vt 0.293541 0.579748 +vt 0.444102 0.636706 +vt 0.409596 0.636706 +vt 0.385196 0.612306 +vt 0.385196 0.577799 +vt 0.409596 0.553400 +vt 0.444102 0.553400 +vt 0.468502 0.577800 +vt 0.468502 0.612306 +vt 0.037160 1.987962 +vt 0.036793 0.000397 +vt 0.071486 0.000384 +vt 0.071853 1.987948 +vt 0.002468 1.987974 +vt 0.002100 0.000409 +vt 0.106546 1.987936 +vt 0.106179 0.000371 +vt 0.140872 0.000358 +vt 0.141239 1.987923 +vt 0.245318 1.987885 +vt 0.244951 0.000319 +vt 0.279643 0.000307 +vt 0.280011 1.987871 +vt 0.175932 1.987910 +vt 0.175565 0.000345 +vt 0.210258 0.000332 +vt 0.210625 1.987897 +vt 0.812500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.937500 +vt 0.000000 0.875000 +vt 0.812500 0.875000 +vt 0.812500 0.937500 +vt 0.000000 0.812500 +vt 0.812500 0.812500 +vt 0.000000 0.750000 +vt 0.812500 0.750000 +vt 0.000000 0.687500 +vt 0.812500 0.687500 +vt 0.000000 0.625000 +vt 0.812500 0.625000 +vt 0.000000 0.562500 +vt 0.812500 0.562500 +vt 0.000000 0.500000 +vt 0.812500 0.500000 +vt 0.000000 0.437500 +vt 0.812500 0.437500 +vt 0.000000 0.375000 +vt 0.812500 0.375000 +vt 0.812500 1.000000 +vt 0.000000 0.937500 +vt 0.812500 0.937500 +vn 0.8268 0.3827 0.4122 +vn 0.4122 0.3826 -0.8269 +vn -0.8268 0.3827 -0.4123 +vn -0.4122 0.3827 0.8268 +vn 0.6328 -0.7071 0.3155 +vn -0.6328 -0.7071 -0.3155 +vn -0.8949 -0.0000 -0.4462 +vn 0.8949 -0.0000 0.4462 +vn -0.4462 -0.0000 0.8949 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.6561 0.0000 0.7547 +vn -0.0698 -0.0000 0.9976 +vn 0.7547 0.0000 -0.6561 +vn 0.9976 0.0000 0.0698 +vn -0.7547 -0.0000 0.6561 +vn -0.6561 -0.0000 -0.7547 +vn -0.9976 -0.0000 -0.0698 +vn 0.0698 -0.0000 -0.9976 +vn -0.1830 0.8351 -0.5188 +vn 0.4462 0.0000 -0.8949 +vn 0.3155 0.7071 -0.6328 +g Cube.001_Cube.001_Default_OBJ +usemtl Default_OBJ +s off +f 1/1/1 2/2/2 3/3/3 4/4/4 +f 8/5/5 7/6/6 6/7/6 5/8/5 +f 4/9/7 3/3/7 42/10/7 43/11/7 44/12/7 45/13/7 46/14/7 47/15/7 48/16/7 49/17/7 50/18/7 8/19/7 5/20/7 +f 34/21/8 33/22/8 2/2/8 1/1/8 6/7/8 7/6/8 41/23/8 40/24/8 39/25/8 38/26/8 37/27/8 36/28/8 35/29/8 +f 1/1/9 4/4/9 5/30/9 6/7/9 +s 1 +f 9/31/10 10/32/10 11/33/10 12/34/10 +f 13/35/10 14/36/10 15/37/10 16/38/10 +f 17/39/10 18/40/10 19/41/10 20/42/10 +f 10/32/10 21/43/10 22/44/10 11/33/10 +f 14/36/10 23/45/10 24/46/10 15/37/10 +f 18/40/10 9/31/10 12/34/10 19/41/10 +f 21/47/11 13/48/11 14/49/11 23/50/11 17/51/11 18/52/11 9/53/11 10/54/11 +f 20/55/12 25/56/12 26/57/12 19/58/12 +f 21/43/10 13/35/10 16/38/10 22/44/10 +f 23/45/10 17/39/10 20/42/10 24/46/10 +f 24/59/13 27/60/13 25/56/13 20/55/13 +f 12/61/14 28/62/14 29/63/14 11/64/14 +f 19/58/15 26/57/15 28/62/15 12/61/15 +f 15/65/16 30/66/16 27/67/16 24/68/16 +f 22/69/17 31/70/17 32/71/17 16/72/17 +f 16/72/18 32/71/18 30/66/18 15/65/18 +f 11/64/19 29/63/19 31/70/19 22/69/19 +g Cube.001_Cube.001_Anzeige +usemtl Anzeige +s off +f 3/73/20 2/74/21 33/75/21 +f 34/76/21 42/77/21 3/78/21 33/75/21 +f 35/79/21 43/80/21 42/77/21 34/76/21 +f 36/81/21 44/82/21 43/80/21 35/79/21 +f 37/83/21 45/84/21 44/82/21 36/81/21 +f 38/85/21 46/86/21 45/84/21 37/83/21 +f 39/87/21 47/88/21 46/86/21 38/85/21 +f 40/89/21 48/90/21 47/88/21 39/87/21 +f 41/91/21 49/92/21 48/90/21 40/89/21 +f 7/93/21 50/94/21 49/92/21 41/91/21 +f 50/95/21 7/96/21 8/97/22 diff --git a/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr45.obj b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr45.obj new file mode 100644 index 0000000..ed1047b --- /dev/null +++ b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr45.obj @@ -0,0 +1,213 @@ +# Blender v3.0.0 OBJ File: '' +# www.blender.org +mtllib advtrains_signals_ks_sign_ne3_smr45.mtl +o Cube.001 +v 0.300197 1.200000 -0.158776 +v 0.314339 1.200000 -0.172918 +v 0.172918 1.200000 -0.314339 +v 0.158776 1.200000 -0.300197 +v 0.158776 0.700000 -0.300197 +v 0.300197 0.700000 -0.158776 +v 0.314339 0.700000 -0.172918 +v 0.172918 0.700000 -0.314339 +v 0.247016 1.055075 -0.211936 +v 0.236741 1.055075 -0.236741 +v 0.236741 1.055075 -0.236741 +v 0.247016 1.055075 -0.211936 +v 0.187132 1.055075 -0.236741 +v 0.176857 1.055075 -0.211936 +v 0.176857 1.055075 -0.211936 +v 0.187132 1.055075 -0.236741 +v 0.211936 1.055075 -0.176857 +v 0.236741 1.055075 -0.187132 +v 0.236741 1.055075 -0.187132 +v 0.211936 1.055075 -0.176857 +v 0.211936 1.055075 -0.247016 +v 0.211936 1.055075 -0.247016 +v 0.187132 1.055075 -0.187132 +v 0.187132 1.055075 -0.187132 +v 0.211936 -0.499729 -0.176857 +v 0.236741 -0.499729 -0.187131 +v 0.187132 -0.499729 -0.187132 +v 0.247016 -0.499729 -0.211936 +v 0.236741 -0.499729 -0.236741 +v 0.176857 -0.499729 -0.211935 +v 0.211937 -0.499729 -0.247015 +v 0.187132 -0.499729 -0.236741 +v 0.314339 1.150000 -0.172918 +v 0.314339 1.100000 -0.172918 +v 0.314339 1.050000 -0.172918 +v 0.314339 1.000000 -0.172918 +v 0.314339 0.950000 -0.172918 +v 0.314339 0.900000 -0.172918 +v 0.314339 0.850000 -0.172918 +v 0.314339 0.800000 -0.172918 +v 0.314339 0.750000 -0.172918 +v 0.172918 1.150000 -0.314339 +v 0.172918 1.100000 -0.314339 +v 0.172918 1.050000 -0.314339 +v 0.172918 1.000000 -0.314339 +v 0.172918 0.950000 -0.314339 +v 0.172918 0.900000 -0.314339 +v 0.172918 0.850000 -0.314339 +v 0.172918 0.800000 -0.314339 +v 0.172918 0.750000 -0.314339 +vt 0.583333 0.750000 +vt 0.583333 0.500000 +vt 0.583333 0.250000 +vt 0.583333 1.000000 +vt 0.125000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.750000 +vt 0.125000 0.750000 +vt 0.583333 0.000000 +vt 0.562500 0.250000 +vt 0.541666 0.250000 +vt 0.520833 0.250000 +vt 0.500000 0.250000 +vt 0.479166 0.250000 +vt 0.458333 0.250000 +vt 0.437500 0.250000 +vt 0.416667 0.250000 +vt 0.395833 0.250000 +vt 0.375000 0.250000 +vt 0.375000 0.000000 +vt 0.541666 0.500000 +vt 0.562500 0.500000 +vt 0.395833 0.500000 +vt 0.416667 0.500000 +vt 0.437500 0.500000 +vt 0.458333 0.500000 +vt 0.479166 0.500000 +vt 0.500000 0.500000 +vt 0.520833 0.500000 +vt 0.375000 1.000000 +vt 0.372863 0.578719 +vt 0.372317 0.613951 +vt 0.371666 0.613734 +vt 0.372221 0.578991 +vt 0.315877 0.640082 +vt 0.292344 0.614764 +vt 0.292986 0.614492 +vt 0.316131 0.639438 +vt 0.315346 0.553400 +vt 0.349331 0.553400 +vt 0.349077 0.554044 +vt 0.315664 0.554020 +vt 0.349861 0.640082 +vt 0.349543 0.639462 +vt 0.292889 0.579531 +vt 0.293541 0.579748 +vt 0.444102 0.636706 +vt 0.409596 0.636706 +vt 0.385196 0.612306 +vt 0.385196 0.577799 +vt 0.409596 0.553400 +vt 0.444102 0.553400 +vt 0.468502 0.577800 +vt 0.468502 0.612306 +vt 0.037160 1.987962 +vt 0.036793 0.000397 +vt 0.071486 0.000384 +vt 0.071853 1.987948 +vt 0.002468 1.987974 +vt 0.002100 0.000409 +vt 0.106546 1.987936 +vt 0.106179 0.000371 +vt 0.140872 0.000358 +vt 0.141239 1.987923 +vt 0.245318 1.987885 +vt 0.244951 0.000319 +vt 0.279643 0.000307 +vt 0.280011 1.987871 +vt 0.175932 1.987910 +vt 0.175565 0.000345 +vt 0.210258 0.000332 +vt 0.210625 1.987897 +vt 0.812500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.937500 +vt 0.000000 0.875000 +vt 0.812500 0.875000 +vt 0.812500 0.937500 +vt 0.000000 0.812500 +vt 0.812500 0.812500 +vt 0.000000 0.750000 +vt 0.812500 0.750000 +vt 0.000000 0.687500 +vt 0.812500 0.687500 +vt 0.000000 0.625000 +vt 0.812500 0.625000 +vt 0.000000 0.562500 +vt 0.812500 0.562500 +vt 0.000000 0.500000 +vt 0.812500 0.500000 +vt 0.000000 0.437500 +vt 0.812500 0.437500 +vt 0.000000 0.375000 +vt 0.812500 0.375000 +vt 0.812500 1.000000 +vt 0.000000 0.937500 +vt 0.812500 0.937500 +vn 0.6533 0.3827 0.6532 +vn 0.6533 0.3826 -0.6533 +vn -0.6532 0.3827 -0.6533 +vn -0.6532 0.3827 0.6533 +vn 0.5000 -0.7071 0.5000 +vn -0.5000 -0.7071 -0.5000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 -0.0000 0.7071 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 -0.0000 +vn 0.3827 0.0000 0.9239 +vn -0.3827 -0.0000 0.9239 +vn 0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 0.3827 +vn -0.9239 -0.0000 0.3827 +vn -0.3827 -0.0000 -0.9239 +vn -0.9239 -0.0000 -0.3827 +vn 0.3827 -0.0000 -0.9239 +vn -0.0089 0.8351 -0.5501 +vn 0.7071 0.0000 -0.7071 +vn 0.5000 0.7071 -0.5000 +g Cube.001_Cube.001_Default_OBJ +usemtl Default_OBJ +s off +f 1/1/1 2/2/2 3/3/3 4/4/4 +f 8/5/5 7/6/6 6/7/6 5/8/5 +f 4/9/7 3/3/7 42/10/7 43/11/7 44/12/7 45/13/7 46/14/7 47/15/7 48/16/7 49/17/7 50/18/7 8/19/7 5/20/7 +f 34/21/8 33/22/8 2/2/8 1/1/8 6/7/8 7/6/8 41/23/8 40/24/8 39/25/8 38/26/8 37/27/8 36/28/8 35/29/8 +f 1/1/9 4/4/9 5/30/9 6/7/9 +s 1 +f 9/31/10 10/32/10 11/33/10 12/34/10 +f 13/35/10 14/36/10 15/37/10 16/38/10 +f 17/39/10 18/40/10 19/41/10 20/42/10 +f 10/32/10 21/43/10 22/44/10 11/33/10 +f 14/36/10 23/45/10 24/46/10 15/37/10 +f 18/40/10 9/31/10 12/34/10 19/41/10 +f 21/47/11 13/48/11 14/49/11 23/50/11 17/51/11 18/52/11 9/53/11 10/54/11 +f 20/55/12 25/56/12 26/57/12 19/58/12 +f 21/43/10 13/35/10 16/38/10 22/44/10 +f 23/45/10 17/39/10 20/42/10 24/46/10 +f 24/59/13 27/60/13 25/56/13 20/55/13 +f 12/61/14 28/62/14 29/63/14 11/64/14 +f 19/58/15 26/57/15 28/62/15 12/61/15 +f 15/65/16 30/66/16 27/67/16 24/68/16 +f 22/69/17 31/70/17 32/71/17 16/72/17 +f 16/72/18 32/71/18 30/66/18 15/65/18 +f 11/64/19 29/63/19 31/70/19 22/69/19 +g Cube.001_Cube.001_Anzeige +usemtl Anzeige +s off +f 3/73/20 2/74/21 33/75/21 +f 34/76/21 42/77/21 3/78/21 33/75/21 +f 35/79/21 43/80/21 42/77/21 34/76/21 +f 36/81/21 44/82/21 43/80/21 35/79/21 +f 37/83/21 45/84/21 44/82/21 36/81/21 +f 38/85/21 46/86/21 45/84/21 37/83/21 +f 39/87/21 47/88/21 46/86/21 38/85/21 +f 40/89/21 48/90/21 47/88/21 39/87/21 +f 41/91/21 49/92/21 48/90/21 40/89/21 +f 7/93/21 50/94/21 49/92/21 41/91/21 +f 50/95/21 7/96/21 8/97/22 diff --git a/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr60.obj b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr60.obj new file mode 100644 index 0000000..0a28ff1 --- /dev/null +++ b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne3_smr60.obj @@ -0,0 +1,213 @@ +# Blender v3.0.0 OBJ File: '' +# www.blender.org +mtllib advtrains_signals_ks_sign_ne3_smr60.mtl +o Cube.001 +v 0.335064 1.200000 -0.055317 +v 0.352963 1.200000 -0.064241 +v 0.263724 1.200000 -0.243228 +v 0.245825 1.200000 -0.234304 +v 0.245825 0.700000 -0.234304 +v 0.335064 0.700000 -0.055317 +v 0.352963 0.700000 -0.064241 +v 0.263724 0.700000 -0.243228 +v 0.301499 1.055075 -0.122605 +v 0.299626 1.055075 -0.149388 +v 0.299626 1.055075 -0.149388 +v 0.301499 1.055075 -0.122605 +v 0.252580 1.055075 -0.165129 +v 0.234966 1.055075 -0.144867 +v 0.234966 1.055075 -0.144867 +v 0.252580 1.055075 -0.165129 +v 0.257101 1.055075 -0.100469 +v 0.283885 1.055075 -0.102342 +v 0.283885 1.055075 -0.102342 +v 0.257101 1.055075 -0.100469 +v 0.279363 1.055075 -0.167002 +v 0.279363 1.055075 -0.167002 +v 0.236839 1.055075 -0.118084 +v 0.236839 1.055075 -0.118084 +v 0.257102 -0.499729 -0.100469 +v 0.283885 -0.499729 -0.102341 +v 0.236839 -0.499729 -0.118084 +v 0.301499 -0.499729 -0.122605 +v 0.299626 -0.499729 -0.149388 +v 0.234966 -0.499729 -0.144866 +v 0.279364 -0.499729 -0.167002 +v 0.252580 -0.499729 -0.165129 +v 0.352963 1.150000 -0.064241 +v 0.352963 1.100000 -0.064241 +v 0.352963 1.050000 -0.064241 +v 0.352963 1.000000 -0.064241 +v 0.352963 0.950000 -0.064241 +v 0.352963 0.900000 -0.064241 +v 0.352963 0.850000 -0.064241 +v 0.352963 0.800000 -0.064241 +v 0.352963 0.750000 -0.064241 +v 0.263724 1.150000 -0.243228 +v 0.263724 1.100000 -0.243228 +v 0.263724 1.050000 -0.243228 +v 0.263724 1.000000 -0.243228 +v 0.263724 0.950000 -0.243228 +v 0.263724 0.900000 -0.243228 +v 0.263724 0.850000 -0.243228 +v 0.263724 0.800000 -0.243228 +v 0.263724 0.750000 -0.243228 +vt 0.583333 0.750000 +vt 0.583333 0.500000 +vt 0.583333 0.250000 +vt 0.583333 1.000000 +vt 0.125000 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.750000 +vt 0.125000 0.750000 +vt 0.583333 0.000000 +vt 0.562500 0.250000 +vt 0.541666 0.250000 +vt 0.520833 0.250000 +vt 0.500000 0.250000 +vt 0.479166 0.250000 +vt 0.458333 0.250000 +vt 0.437500 0.250000 +vt 0.416667 0.250000 +vt 0.395833 0.250000 +vt 0.375000 0.250000 +vt 0.375000 0.000000 +vt 0.541666 0.500000 +vt 0.562500 0.500000 +vt 0.395833 0.500000 +vt 0.416667 0.500000 +vt 0.437500 0.500000 +vt 0.458333 0.500000 +vt 0.479166 0.500000 +vt 0.500000 0.500000 +vt 0.520833 0.500000 +vt 0.375000 1.000000 +vt 0.372863 0.578719 +vt 0.372317 0.613951 +vt 0.371666 0.613734 +vt 0.372221 0.578991 +vt 0.315877 0.640082 +vt 0.292344 0.614764 +vt 0.292986 0.614492 +vt 0.316131 0.639438 +vt 0.315346 0.553400 +vt 0.349331 0.553400 +vt 0.349077 0.554044 +vt 0.315664 0.554020 +vt 0.349861 0.640082 +vt 0.349543 0.639462 +vt 0.292889 0.579531 +vt 0.293541 0.579748 +vt 0.444102 0.636706 +vt 0.409596 0.636706 +vt 0.385196 0.612306 +vt 0.385196 0.577799 +vt 0.409596 0.553400 +vt 0.444102 0.553400 +vt 0.468502 0.577800 +vt 0.468502 0.612306 +vt 0.037160 1.987962 +vt 0.036793 0.000397 +vt 0.071486 0.000384 +vt 0.071853 1.987948 +vt 0.002468 1.987974 +vt 0.002100 0.000409 +vt 0.106546 1.987936 +vt 0.106179 0.000371 +vt 0.140872 0.000358 +vt 0.141239 1.987923 +vt 0.245318 1.987885 +vt 0.244951 0.000319 +vt 0.279643 0.000307 +vt 0.280011 1.987871 +vt 0.175932 1.987910 +vt 0.175565 0.000345 +vt 0.210258 0.000332 +vt 0.210625 1.987897 +vt 0.812500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.937500 +vt 0.000000 0.875000 +vt 0.812500 0.875000 +vt 0.812500 0.937500 +vt 0.000000 0.812500 +vt 0.812500 0.812500 +vt 0.000000 0.750000 +vt 0.812500 0.750000 +vt 0.000000 0.687500 +vt 0.812500 0.687500 +vt 0.000000 0.625000 +vt 0.812500 0.625000 +vt 0.000000 0.562500 +vt 0.812500 0.562500 +vt 0.000000 0.500000 +vt 0.812500 0.500000 +vt 0.000000 0.437500 +vt 0.812500 0.437500 +vt 0.000000 0.375000 +vt 0.812500 0.375000 +vt 0.812500 1.000000 +vt 0.000000 0.937500 +vt 0.812500 0.937500 +vn 0.4123 0.3827 0.8268 +vn 0.8268 0.3826 -0.4123 +vn -0.4122 0.3827 -0.8268 +vn -0.8268 0.3827 0.4123 +vn 0.3155 -0.7071 0.6328 +vn -0.3155 -0.7071 -0.6328 +vn -0.4462 0.0000 -0.8949 +vn 0.4462 0.0000 0.8949 +vn -0.8949 -0.0000 0.4462 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0698 0.0000 0.9976 +vn -0.6561 -0.0000 0.7547 +vn 0.9976 0.0000 -0.0698 +vn 0.7547 0.0000 0.6561 +vn -0.9976 -0.0000 0.0698 +vn -0.0698 -0.0000 -0.9976 +vn -0.7547 -0.0000 -0.6561 +vn 0.6561 -0.0000 -0.7547 +vn 0.1661 0.8351 -0.5245 +vn 0.8949 0.0000 -0.4462 +vn 0.6328 0.7071 -0.3155 +g Cube.001_Cube.001_Default_OBJ +usemtl Default_OBJ +s off +f 1/1/1 2/2/2 3/3/3 4/4/4 +f 8/5/5 7/6/6 6/7/6 5/8/5 +f 4/9/7 3/3/7 42/10/7 43/11/7 44/12/7 45/13/7 46/14/7 47/15/7 48/16/7 49/17/7 50/18/7 8/19/7 5/20/7 +f 34/21/8 33/22/8 2/2/8 1/1/8 6/7/8 7/6/8 41/23/8 40/24/8 39/25/8 38/26/8 37/27/8 36/28/8 35/29/8 +f 1/1/9 4/4/9 5/30/9 6/7/9 +s 1 +f 9/31/10 10/32/10 11/33/10 12/34/10 +f 13/35/10 14/36/10 15/37/10 16/38/10 +f 17/39/10 18/40/10 19/41/10 20/42/10 +f 10/32/10 21/43/10 22/44/10 11/33/10 +f 14/36/10 23/45/10 24/46/10 15/37/10 +f 18/40/10 9/31/10 12/34/10 19/41/10 +f 21/47/11 13/48/11 14/49/11 23/50/11 17/51/11 18/52/11 9/53/11 10/54/11 +f 20/55/12 25/56/12 26/57/12 19/58/12 +f 21/43/10 13/35/10 16/38/10 22/44/10 +f 23/45/10 17/39/10 20/42/10 24/46/10 +f 24/59/13 27/60/13 25/56/13 20/55/13 +f 12/61/14 28/62/14 29/63/14 11/64/14 +f 19/58/15 26/57/15 28/62/15 12/61/15 +f 15/65/16 30/66/16 27/67/16 24/68/16 +f 22/69/17 31/70/17 32/71/17 16/72/17 +f 16/72/18 32/71/18 30/66/18 15/65/18 +f 11/64/19 29/63/19 31/70/19 22/69/19 +g Cube.001_Cube.001_Anzeige +usemtl Anzeige +s off +f 3/73/20 2/74/21 33/75/21 +f 34/76/21 42/77/21 3/78/21 33/75/21 +f 35/79/21 43/80/21 42/77/21 34/76/21 +f 36/81/21 44/82/21 43/80/21 35/79/21 +f 37/83/21 45/84/21 44/82/21 36/81/21 +f 38/85/21 46/86/21 45/84/21 37/83/21 +f 39/87/21 47/88/21 46/86/21 38/85/21 +f 40/89/21 48/90/21 47/88/21 39/87/21 +f 41/91/21 49/92/21 48/90/21 40/89/21 +f 7/93/21 50/94/21 49/92/21 41/91/21 +f 50/95/21 7/96/21 8/97/22 diff --git a/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr0.obj b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr0.obj new file mode 100644 index 0000000..3c4fa17 --- /dev/null +++ b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr0.obj @@ -0,0 +1,148 @@ +# Blender v3.0.0 OBJ File: '' +# www.blender.org +mtllib advtrains_signals_ks_sign_ne4_smr0.mtl +o Cube.001 +v 0.100000 1.200000 -0.324543 +v 0.100000 1.200000 -0.344543 +v -0.100000 1.200000 -0.344543 +v -0.100000 1.200000 -0.324543 +v 0.100000 0.700000 -0.344543 +v 0.100000 0.700000 -0.324543 +v -0.100000 0.700000 -0.344543 +v -0.100000 0.700000 -0.324543 +v 0.024805 1.055075 -0.324528 +v 0.000000 1.055075 -0.334802 +v 0.000000 1.055075 -0.334802 +v 0.024805 1.055075 -0.324528 +v -0.035079 1.055075 -0.299723 +v -0.024805 1.055075 -0.274918 +v -0.024805 1.055075 -0.274918 +v -0.035079 1.055075 -0.299723 +v 0.024805 1.055075 -0.274918 +v 0.035079 1.055075 -0.299723 +v 0.035079 1.055075 -0.299723 +v 0.024805 1.055075 -0.274918 +v -0.024805 1.055075 -0.324528 +v -0.024805 1.055075 -0.324528 +v 0.000000 1.055075 -0.264644 +v 0.000000 1.055075 -0.264644 +v 0.024805 -0.499729 -0.274918 +v 0.035080 -0.499729 -0.299723 +v 0.000000 -0.499729 -0.264644 +v 0.024805 -0.499729 -0.324528 +v 0.000000 -0.499729 -0.334802 +v -0.024804 -0.499729 -0.274918 +v -0.024804 -0.499729 -0.324528 +v -0.035079 -0.499729 -0.299723 +vt 0.583333 0.750000 +vt 0.583333 0.500000 +vt 0.583333 0.250000 +vt 0.583333 1.000000 +vt 0.375000 1.000000 +vt 0.375000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.000000 +vt 0.583333 0.000000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.125000 0.750000 +vt 0.372863 0.578719 +vt 0.372317 0.613951 +vt 0.371666 0.613734 +vt 0.372221 0.578991 +vt 0.315877 0.640082 +vt 0.292344 0.614764 +vt 0.292986 0.614492 +vt 0.316131 0.639438 +vt 0.315346 0.553400 +vt 0.349331 0.553400 +vt 0.349077 0.554044 +vt 0.315664 0.554020 +vt 0.349861 0.640082 +vt 0.349543 0.639462 +vt 0.292889 0.579531 +vt 0.293541 0.579748 +vt 0.444102 0.636706 +vt 0.409596 0.636706 +vt 0.385196 0.612306 +vt 0.385196 0.577799 +vt 0.409596 0.553400 +vt 0.444102 0.553400 +vt 0.468502 0.577800 +vt 0.468502 0.612306 +vt 0.037160 1.987962 +vt 0.036793 0.000397 +vt 0.071486 0.000384 +vt 0.071853 1.987948 +vt 0.002468 1.987974 +vt 0.002100 0.000409 +vt 0.106546 1.987936 +vt 0.106179 0.000371 +vt 0.140872 0.000358 +vt 0.141239 1.987923 +vt 0.245318 1.987885 +vt 0.244951 0.000319 +vt 0.279643 0.000307 +vt 0.280011 1.987871 +vt 0.175932 1.987910 +vt 0.175565 0.000345 +vt 0.210258 0.000332 +vt 0.210625 1.987897 +vt 0.250000 0.375000 +vt 0.250000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.375000 +vn 0.9239 0.3827 -0.0000 +vn -0.0000 0.3826 -0.9239 +vn -0.9239 0.3827 -0.0001 +vn 0.0000 0.3827 0.9239 +vn 0.0000 -0.0000 1.0000 +vn 1.0000 -0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 -0.7071 -0.0000 +vn -0.9659 0.0000 0.2588 +vn 0.9659 0.0000 0.2588 +vn -0.7814 -0.5678 0.2588 +vn 0.9659 0.0000 -0.2588 +vn -0.9659 0.0000 -0.2588 +vn 0.0000 1.0000 0.0000 +vn 0.9239 0.0000 0.3827 +vn 0.3827 -0.0000 0.9239 +vn 0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 -0.3827 +vn -0.3827 -0.0000 0.9239 +vn -0.9239 -0.0000 -0.3827 +vn -0.9239 -0.0000 0.3827 +vn -0.3827 -0.0000 -0.9239 +vn 0.0000 0.0000 -1.0000 +g Cube.001_Cube.001_Default_OBJ +usemtl Default_OBJ +s off +f 1/1/1 2/2/2 3/3/3 4/4/4 +f 1/1/5 4/4/5 8/5/5 6/6/5 +f 5/7/6 2/2/6 1/1/6 6/6/6 +f 8/8/7 4/9/7 3/3/7 7/10/7 +f 7/11/8 5/7/9 6/6/9 8/12/8 +s 1 +f 9/13/10 10/14/5 11/15/11 12/16/12 +f 13/17/6 14/18/13 15/19/14 16/20/6 +f 17/21/13 18/22/7 19/23/7 20/24/14 +f 10/14/5 21/25/10 22/26/11 11/15/11 +f 14/18/13 23/27/5 24/28/14 15/19/14 +f 18/22/7 9/13/10 12/16/12 19/23/7 +f 21/29/15 13/30/15 14/31/15 23/32/15 17/33/15 18/34/15 9/35/15 10/36/15 +f 20/37/16 25/38/16 26/39/16 19/40/16 +f 21/25/10 13/17/6 16/20/6 22/26/11 +f 23/27/5 17/21/13 20/24/14 24/28/14 +f 24/41/17 27/42/17 25/38/17 20/37/17 +f 12/43/18 28/44/18 29/45/18 11/46/18 +f 19/40/19 26/39/19 28/44/19 12/43/19 +f 15/47/20 30/48/20 27/49/20 24/50/20 +f 22/51/21 31/52/21 32/53/21 16/54/21 +f 16/54/22 32/53/22 30/48/22 15/47/22 +f 11/46/23 29/45/23 31/52/23 22/51/23 +g Cube.001_Cube.001_Anzeige +usemtl Anzeige +s off +f 7/55/24 3/56/24 2/57/24 5/58/24 diff --git a/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr30.obj b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr30.obj new file mode 100644 index 0000000..d6f8603 --- /dev/null +++ b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr30.obj @@ -0,0 +1,151 @@ +# Blender v3.0.0 OBJ File: '' +# www.blender.org +mtllib advtrains_signals_ks_sign_ne4_smr30.mtl +o Cube.001 +v 0.234304 1.200000 -0.245825 +v 0.243228 1.200000 -0.263724 +v 0.064241 1.200000 -0.352963 +v 0.055317 1.200000 -0.335064 +v 0.243228 0.700000 -0.263724 +v 0.234304 0.700000 -0.245825 +v 0.064241 0.700000 -0.352963 +v 0.055317 0.700000 -0.335064 +v 0.167003 1.055075 -0.279363 +v 0.149388 1.055075 -0.299626 +v 0.149388 1.055075 -0.299626 +v 0.167003 1.055075 -0.279363 +v 0.102342 1.055075 -0.283885 +v 0.100469 1.055075 -0.257101 +v 0.100469 1.055075 -0.257101 +v 0.102342 1.055075 -0.283885 +v 0.144867 1.055075 -0.234966 +v 0.165129 1.055075 -0.252580 +v 0.165129 1.055075 -0.252580 +v 0.144867 1.055075 -0.234966 +v 0.122605 1.055075 -0.301499 +v 0.122605 1.055075 -0.301499 +v 0.118084 1.055075 -0.236839 +v 0.118084 1.055075 -0.236839 +v 0.144867 -0.499729 -0.234966 +v 0.165130 -0.499729 -0.252580 +v 0.118084 -0.499729 -0.236839 +v 0.167003 -0.499729 -0.279363 +v 0.149388 -0.499729 -0.299626 +v 0.100470 -0.499729 -0.257101 +v 0.122606 -0.499729 -0.301499 +v 0.102342 -0.499729 -0.283885 +vt 0.583333 0.750000 +vt 0.583333 0.500000 +vt 0.583333 0.250000 +vt 0.583333 1.000000 +vt 0.375000 1.000000 +vt 0.375000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.000000 +vt 0.583333 0.000000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.125000 0.750000 +vt 0.372863 0.578719 +vt 0.372317 0.613951 +vt 0.371666 0.613734 +vt 0.372221 0.578991 +vt 0.315877 0.640082 +vt 0.292344 0.614764 +vt 0.292986 0.614492 +vt 0.316131 0.639438 +vt 0.315346 0.553400 +vt 0.349331 0.553400 +vt 0.349077 0.554044 +vt 0.315664 0.554020 +vt 0.349861 0.640082 +vt 0.349543 0.639462 +vt 0.292889 0.579531 +vt 0.293541 0.579748 +vt 0.444102 0.636706 +vt 0.409596 0.636706 +vt 0.385196 0.612306 +vt 0.385196 0.577799 +vt 0.409596 0.553400 +vt 0.444102 0.553400 +vt 0.468502 0.577800 +vt 0.468502 0.612306 +vt 0.037160 1.987962 +vt 0.036793 0.000397 +vt 0.071486 0.000384 +vt 0.071853 1.987948 +vt 0.002468 1.987974 +vt 0.002100 0.000409 +vt 0.106546 1.987936 +vt 0.106179 0.000371 +vt 0.140872 0.000358 +vt 0.141239 1.987923 +vt 0.245318 1.987885 +vt 0.244951 0.000319 +vt 0.279643 0.000307 +vt 0.280011 1.987871 +vt 0.175932 1.987910 +vt 0.175565 0.000345 +vt 0.210258 0.000332 +vt 0.210625 1.987897 +vt 0.250000 0.375000 +vt 0.250000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.375000 +vn 0.8268 0.3827 0.4122 +vn 0.4122 0.3826 -0.8269 +vn -0.8268 0.3827 -0.4123 +vn -0.4122 0.3826 0.8268 +vn -0.4462 -0.0000 0.8949 +vn 0.8949 -0.0000 0.4462 +vn -0.8949 -0.0000 -0.4462 +vn 0.6328 -0.7071 0.3155 +vn -0.6328 -0.7071 -0.3155 +vn -0.9769 0.0000 0.2136 +vn 0.0000 0.0000 1.0000 +vn 0.9659 0.0000 0.2588 +vn -0.9659 0.0000 0.2588 +vn 0.9769 0.0000 -0.2136 +vn -0.7815 -0.5677 0.2588 +vn 0.9659 0.0000 -0.2588 +vn -0.9659 0.0000 -0.2588 +vn 0.0000 1.0000 -0.0000 +vn 0.6561 0.0000 0.7547 +vn -0.0698 -0.0000 0.9976 +vn 0.7547 0.0000 -0.6561 +vn 0.9976 0.0000 0.0698 +vn -0.7547 -0.0000 0.6561 +vn -0.6561 -0.0000 -0.7547 +vn -0.9976 -0.0000 -0.0698 +vn 0.0698 -0.0000 -0.9976 +vn 0.4462 0.0000 -0.8949 +g Cube.001_Cube.001_Default_OBJ +usemtl Default_OBJ +s off +f 1/1/1 2/2/2 3/3/3 4/4/4 +f 1/1/5 4/4/5 8/5/5 6/6/5 +f 5/7/6 2/2/6 1/1/6 6/6/6 +f 8/8/7 4/9/7 3/3/7 7/10/7 +f 7/11/8 5/7/9 6/6/9 8/12/8 +s 1 +f 9/13/10 10/14/11 11/15/12 12/16/10 +f 13/17/13 14/18/14 15/19/14 16/20/15 +f 17/21/16 18/22/16 19/23/17 20/24/17 +f 10/14/11 21/25/13 22/26/12 11/15/12 +f 14/18/14 23/27/11 24/28/17 15/19/14 +f 18/22/16 9/13/10 12/16/10 19/23/17 +f 21/29/18 13/30/18 14/31/18 23/32/18 17/33/18 18/34/18 9/35/18 10/36/18 +f 20/37/19 25/38/19 26/39/19 19/40/19 +f 21/25/13 13/17/13 16/20/15 22/26/12 +f 23/27/11 17/21/16 20/24/17 24/28/17 +f 24/41/20 27/42/20 25/38/20 20/37/20 +f 12/43/21 28/44/21 29/45/21 11/46/21 +f 19/40/22 26/39/22 28/44/22 12/43/22 +f 15/47/23 30/48/23 27/49/23 24/50/23 +f 22/51/24 31/52/24 32/53/24 16/54/24 +f 16/54/25 32/53/25 30/48/25 15/47/25 +f 11/46/26 29/45/26 31/52/26 22/51/26 +g Cube.001_Cube.001_Anzeige +usemtl Anzeige +s off +f 7/55/27 3/56/27 2/57/27 5/58/27 diff --git a/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr45.obj b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr45.obj new file mode 100644 index 0000000..b2c828e --- /dev/null +++ b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr45.obj @@ -0,0 +1,151 @@ +# Blender v3.0.0 OBJ File: '' +# www.blender.org +mtllib advtrains_signals_ks_sign_ne4_smr45.mtl +o Cube.001 +v 0.300197 1.200000 -0.158776 +v 0.314339 1.200000 -0.172918 +v 0.172918 1.200000 -0.314339 +v 0.158776 1.200000 -0.300197 +v 0.314339 0.700000 -0.172918 +v 0.300197 0.700000 -0.158776 +v 0.172918 0.700000 -0.314339 +v 0.158776 0.700000 -0.300197 +v 0.247016 1.055075 -0.211936 +v 0.236741 1.055075 -0.236741 +v 0.236741 1.055075 -0.236741 +v 0.247016 1.055075 -0.211936 +v 0.187132 1.055075 -0.236741 +v 0.176857 1.055075 -0.211936 +v 0.176857 1.055075 -0.211936 +v 0.187132 1.055075 -0.236741 +v 0.211936 1.055075 -0.176857 +v 0.236741 1.055075 -0.187132 +v 0.236741 1.055075 -0.187132 +v 0.211936 1.055075 -0.176857 +v 0.211936 1.055075 -0.247016 +v 0.211936 1.055075 -0.247016 +v 0.187132 1.055075 -0.187132 +v 0.187132 1.055075 -0.187132 +v 0.211936 -0.499729 -0.176857 +v 0.236741 -0.499729 -0.187131 +v 0.187132 -0.499729 -0.187132 +v 0.247016 -0.499729 -0.211936 +v 0.236741 -0.499729 -0.236741 +v 0.176857 -0.499729 -0.211935 +v 0.211937 -0.499729 -0.247015 +v 0.187132 -0.499729 -0.236741 +vt 0.583333 0.750000 +vt 0.583333 0.500000 +vt 0.583333 0.250000 +vt 0.583333 1.000000 +vt 0.375000 1.000000 +vt 0.375000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.000000 +vt 0.583333 0.000000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.125000 0.750000 +vt 0.372863 0.578719 +vt 0.372317 0.613951 +vt 0.371666 0.613734 +vt 0.372221 0.578991 +vt 0.315877 0.640082 +vt 0.292344 0.614764 +vt 0.292986 0.614492 +vt 0.316131 0.639438 +vt 0.315346 0.553400 +vt 0.349331 0.553400 +vt 0.349077 0.554044 +vt 0.315664 0.554020 +vt 0.349861 0.640082 +vt 0.349543 0.639462 +vt 0.292889 0.579531 +vt 0.293541 0.579748 +vt 0.444102 0.636706 +vt 0.409596 0.636706 +vt 0.385196 0.612306 +vt 0.385196 0.577799 +vt 0.409596 0.553400 +vt 0.444102 0.553400 +vt 0.468502 0.577800 +vt 0.468502 0.612306 +vt 0.037160 1.987962 +vt 0.036793 0.000397 +vt 0.071486 0.000384 +vt 0.071853 1.987948 +vt 0.002468 1.987974 +vt 0.002100 0.000409 +vt 0.106546 1.987936 +vt 0.106179 0.000371 +vt 0.140872 0.000358 +vt 0.141239 1.987923 +vt 0.245318 1.987885 +vt 0.244951 0.000319 +vt 0.279643 0.000307 +vt 0.280011 1.987871 +vt 0.175932 1.987910 +vt 0.175565 0.000345 +vt 0.210258 0.000332 +vt 0.210625 1.987897 +vt 0.250000 0.375000 +vt 0.250000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.375000 +vn 0.6533 0.3827 0.6532 +vn 0.6533 0.3826 -0.6533 +vn -0.6532 0.3826 -0.6534 +vn -0.6533 0.3827 0.6533 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 -0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.5000 -0.7071 0.5000 +vn -0.5000 -0.7071 -0.5000 +vn -1.0000 0.0000 -0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.9659 0.0000 0.2588 +vn -0.9659 0.0000 0.2588 +vn 1.0000 0.0000 -0.0000 +vn -0.7815 -0.5677 0.2588 +vn 0.9659 0.0000 -0.2588 +vn -0.9659 0.0000 -0.2588 +vn 0.0000 1.0000 -0.0000 +vn 0.3827 0.0000 0.9239 +vn -0.3827 -0.0000 0.9239 +vn 0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 0.3827 +vn -0.9239 -0.0000 0.3827 +vn -0.3827 -0.0000 -0.9239 +vn -0.9239 -0.0000 -0.3827 +vn 0.3827 -0.0000 -0.9239 +vn 0.7071 0.0000 -0.7071 +g Cube.001_Cube.001_Default_OBJ +usemtl Default_OBJ +s off +f 1/1/1 2/2/2 3/3/3 4/4/4 +f 1/1/5 4/4/5 8/5/5 6/6/5 +f 5/7/6 2/2/6 1/1/6 6/6/6 +f 8/8/7 4/9/7 3/3/7 7/10/7 +f 7/11/8 5/7/9 6/6/9 8/12/8 +s 1 +f 9/13/10 10/14/11 11/15/12 12/16/10 +f 13/17/13 14/18/14 15/19/14 16/20/15 +f 17/21/16 18/22/16 19/23/17 20/24/17 +f 10/14/11 21/25/13 22/26/12 11/15/12 +f 14/18/14 23/27/11 24/28/17 15/19/14 +f 18/22/16 9/13/10 12/16/10 19/23/17 +f 21/29/18 13/30/18 14/31/18 23/32/18 17/33/18 18/34/18 9/35/18 10/36/18 +f 20/37/19 25/38/19 26/39/19 19/40/19 +f 21/25/13 13/17/13 16/20/15 22/26/12 +f 23/27/11 17/21/16 20/24/17 24/28/17 +f 24/41/20 27/42/20 25/38/20 20/37/20 +f 12/43/21 28/44/21 29/45/21 11/46/21 +f 19/40/22 26/39/22 28/44/22 12/43/22 +f 15/47/23 30/48/23 27/49/23 24/50/23 +f 22/51/24 31/52/24 32/53/24 16/54/24 +f 16/54/25 32/53/25 30/48/25 15/47/25 +f 11/46/26 29/45/26 31/52/26 22/51/26 +g Cube.001_Cube.001_Anzeige +usemtl Anzeige +s off +f 7/55/27 3/56/27 2/57/27 5/58/27 diff --git a/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr60.obj b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr60.obj new file mode 100644 index 0000000..c49488b --- /dev/null +++ b/advtrains_signals_ks/models/advtrains_signals_ks_sign_ne4_smr60.obj @@ -0,0 +1,151 @@ +# Blender v3.0.0 OBJ File: '' +# www.blender.org +mtllib advtrains_signals_ks_sign_ne4_smr60.mtl +o Cube.001 +v 0.335064 1.200000 -0.055317 +v 0.352963 1.200000 -0.064241 +v 0.263724 1.200000 -0.243228 +v 0.245825 1.200000 -0.234304 +v 0.352963 0.700000 -0.064241 +v 0.335064 0.700000 -0.055317 +v 0.263724 0.700000 -0.243228 +v 0.245825 0.700000 -0.234304 +v 0.301499 1.055075 -0.122605 +v 0.299626 1.055075 -0.149388 +v 0.299626 1.055075 -0.149388 +v 0.301499 1.055075 -0.122605 +v 0.252580 1.055075 -0.165129 +v 0.234966 1.055075 -0.144867 +v 0.234966 1.055075 -0.144867 +v 0.252580 1.055075 -0.165129 +v 0.257101 1.055075 -0.100469 +v 0.283885 1.055075 -0.102342 +v 0.283885 1.055075 -0.102342 +v 0.257101 1.055075 -0.100469 +v 0.279363 1.055075 -0.167002 +v 0.279363 1.055075 -0.167002 +v 0.236839 1.055075 -0.118084 +v 0.236839 1.055075 -0.118084 +v 0.257102 -0.499729 -0.100469 +v 0.283885 -0.499729 -0.102341 +v 0.236839 -0.499729 -0.118084 +v 0.301499 -0.499729 -0.122605 +v 0.299626 -0.499729 -0.149388 +v 0.234966 -0.499729 -0.144866 +v 0.279364 -0.499729 -0.167002 +v 0.252580 -0.499729 -0.165129 +vt 0.583333 0.750000 +vt 0.583333 0.500000 +vt 0.583333 0.250000 +vt 0.583333 1.000000 +vt 0.375000 1.000000 +vt 0.375000 0.750000 +vt 0.375000 0.500000 +vt 0.375000 0.000000 +vt 0.583333 0.000000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.125000 0.750000 +vt 0.372863 0.578719 +vt 0.372317 0.613951 +vt 0.371666 0.613734 +vt 0.372221 0.578991 +vt 0.315877 0.640082 +vt 0.292344 0.614764 +vt 0.292986 0.614492 +vt 0.316131 0.639438 +vt 0.315346 0.553400 +vt 0.349331 0.553400 +vt 0.349077 0.554044 +vt 0.315664 0.554020 +vt 0.349861 0.640082 +vt 0.349543 0.639462 +vt 0.292889 0.579531 +vt 0.293541 0.579748 +vt 0.444102 0.636706 +vt 0.409596 0.636706 +vt 0.385196 0.612306 +vt 0.385196 0.577799 +vt 0.409596 0.553400 +vt 0.444102 0.553400 +vt 0.468502 0.577800 +vt 0.468502 0.612306 +vt 0.037160 1.987962 +vt 0.036793 0.000397 +vt 0.071486 0.000384 +vt 0.071853 1.987948 +vt 0.002468 1.987974 +vt 0.002100 0.000409 +vt 0.106546 1.987936 +vt 0.106179 0.000371 +vt 0.140872 0.000358 +vt 0.141239 1.987923 +vt 0.245318 1.987885 +vt 0.244951 0.000319 +vt 0.279643 0.000307 +vt 0.280011 1.987871 +vt 0.175932 1.987910 +vt 0.175565 0.000345 +vt 0.210258 0.000332 +vt 0.210625 1.987897 +vt 0.250000 0.375000 +vt 0.250000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.375000 +vn 0.4123 0.3827 0.8268 +vn 0.8268 0.3826 -0.4123 +vn -0.4122 0.3827 -0.8269 +vn -0.8268 0.3827 0.4123 +vn -0.8949 -0.0000 0.4462 +vn 0.4462 0.0000 0.8949 +vn -0.4462 0.0000 -0.8949 +vn 0.3155 -0.7071 0.6328 +vn -0.3155 -0.7071 -0.6328 +vn -0.9769 0.0000 -0.2136 +vn 0.0000 0.0000 1.0000 +vn 0.9659 0.0000 0.2588 +vn -0.9659 0.0000 0.2588 +vn 0.9769 0.0000 0.2136 +vn -0.7817 -0.5674 0.2588 +vn 0.9659 0.0000 -0.2588 +vn -0.9659 0.0000 -0.2588 +vn 0.0000 1.0000 0.0000 +vn 0.0698 0.0000 0.9976 +vn -0.6561 -0.0000 0.7547 +vn 0.9976 0.0000 -0.0698 +vn 0.7547 0.0000 0.6561 +vn -0.9976 -0.0000 0.0698 +vn -0.0698 -0.0000 -0.9976 +vn -0.7547 -0.0000 -0.6561 +vn 0.6561 -0.0000 -0.7547 +vn 0.8949 0.0000 -0.4462 +g Cube.001_Cube.001_Default_OBJ +usemtl Default_OBJ +s off +f 1/1/1 2/2/2 3/3/3 4/4/4 +f 1/1/5 4/4/5 8/5/5 6/6/5 +f 5/7/6 2/2/6 1/1/6 6/6/6 +f 8/8/7 4/9/7 3/3/7 7/10/7 +f 7/11/8 5/7/9 6/6/9 8/12/8 +s 1 +f 9/13/10 10/14/11 11/15/12 12/16/10 +f 13/17/13 14/18/14 15/19/14 16/20/15 +f 17/21/16 18/22/16 19/23/17 20/24/17 +f 10/14/11 21/25/13 22/26/12 11/15/12 +f 14/18/14 23/27/11 24/28/17 15/19/14 +f 18/22/16 9/13/10 12/16/10 19/23/17 +f 21/29/18 13/30/18 14/31/18 23/32/18 17/33/18 18/34/18 9/35/18 10/36/18 +f 20/37/19 25/38/19 26/39/19 19/40/19 +f 21/25/13 13/17/13 16/20/15 22/26/12 +f 23/27/11 17/21/16 20/24/17 24/28/17 +f 24/41/20 27/42/20 25/38/20 20/37/20 +f 12/43/21 28/44/21 29/45/21 11/46/21 +f 19/40/22 26/39/22 28/44/22 12/43/22 +f 15/47/23 30/48/23 27/49/23 24/50/23 +f 22/51/24 31/52/24 32/53/24 16/54/24 +f 16/54/25 32/53/25 30/48/25 15/47/25 +f 11/46/26 29/45/26 31/52/26 22/51/26 +g Cube.001_Cube.001_Anzeige +usemtl Anzeige +s off +f 7/55/27 3/56/27 2/57/27 5/58/27 diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x1.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x1.png new file mode 100644 index 0000000..19f860a Binary files /dev/null and b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x1.png differ diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x2.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x2.png new file mode 100644 index 0000000..dd86d09 Binary files /dev/null and b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x2.png differ diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x3.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x3.png new file mode 100644 index 0000000..f343fc4 Binary files /dev/null and b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x3.png differ diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x4.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x4.png new file mode 100644 index 0000000..98c0248 Binary files /dev/null and b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x4.png differ diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x5.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x5.png new file mode 100644 index 0000000..d9d21bd Binary files /dev/null and b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne3x5.png differ diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne4.png b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne4.png new file mode 100644 index 0000000..4efbe57 Binary files /dev/null and b/advtrains_signals_ks/textures/advtrains_signals_ks_sign_ne4.png differ -- cgit v1.2.3 From 69c0fd9aca7d3901c665f8987583df74a9dfd2e9 Mon Sep 17 00:00:00 2001 From: "Y. Wang" Date: Thu, 3 Nov 2022 15:18:41 +0100 Subject: Use green Ks masts --- .../textures/advtrains_signals_ks_mast.png | Bin 224 -> 455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) (limited to 'advtrains_signals_ks') diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_mast.png b/advtrains_signals_ks/textures/advtrains_signals_ks_mast.png index dbbee5d..db28b4f 100644 Binary files a/advtrains_signals_ks/textures/advtrains_signals_ks_mast.png and b/advtrains_signals_ks/textures/advtrains_signals_ks_mast.png differ -- cgit v1.2.3 From 778c9096ae7e027feae7f72b980cc583b9ec48b2 Mon Sep 17 00:00:00 2001 From: "Y. Wang" Date: Sun, 6 Nov 2022 10:14:25 +0100 Subject: Optimize textures in previous commits --- .../textures/advtrains_signals_japan_mast.png | Bin 411 -> 180 bytes .../textures/advtrains_signals_ks_mast.png | Bin 455 -> 180 bytes 2 files changed, 0 insertions(+), 0 deletions(-) (limited to 'advtrains_signals_ks') diff --git a/advtrains_signals_japan/textures/advtrains_signals_japan_mast.png b/advtrains_signals_japan/textures/advtrains_signals_japan_mast.png index 817394d..8d288a9 100644 Binary files a/advtrains_signals_japan/textures/advtrains_signals_japan_mast.png and b/advtrains_signals_japan/textures/advtrains_signals_japan_mast.png differ diff --git a/advtrains_signals_ks/textures/advtrains_signals_ks_mast.png b/advtrains_signals_ks/textures/advtrains_signals_ks_mast.png index db28b4f..81b1128 100644 Binary files a/advtrains_signals_ks/textures/advtrains_signals_ks_mast.png and b/advtrains_signals_ks/textures/advtrains_signals_ks_mast.png differ -- cgit v1.2.3 From 2dab59f05572fe6cf73cde353446a5a501550b41 Mon Sep 17 00:00:00 2001 From: orwell Date: Tue, 6 Feb 2024 21:10:40 +0100 Subject: Start changing APIs and applying proof-of-concept to ks signals --- advtrains_interlocking/init.lua | 2 +- advtrains_interlocking/signal_api.lua | 105 +++++++++++++++++--------- advtrains_signals_ks/init.lua | 138 +++++++++++++++++++++------------- 3 files changed, 156 insertions(+), 89 deletions(-) (limited to 'advtrains_signals_ks') diff --git a/advtrains_interlocking/init.lua b/advtrains_interlocking/init.lua index 4d959cc..9aa0c06 100644 --- a/advtrains_interlocking/init.lua +++ b/advtrains_interlocking/init.lua @@ -12,7 +12,7 @@ end local modpath = minetest.get_modpath(minetest.get_current_modname()) .. DIR_DELIM -advtrains.interlocking.aspect = dofile(modpath.."aspect.lua") +--advtrains.interlocking.aspect = dofile(modpath.."aspect.lua") dofile(modpath.."database.lua") dofile(modpath.."distant.lua") diff --git a/advtrains_interlocking/signal_api.lua b/advtrains_interlocking/signal_api.lua index 743e8e1..c2cc08b 100644 --- a/advtrains_interlocking/signal_api.lua +++ b/advtrains_interlocking/signal_api.lua @@ -2,18 +2,19 @@ local F = advtrains.formspec -local DANGER = { - main = 0, - shunt = false, +local signal = {} + +signal.MASP_HALT = { + name = "halt" + halt = true, } -advtrains.interlocking.DANGER = DANGER -advtrains.interlocking.GENERIC_FREE = { - main = -1, +signal.ASPI_HALT = { + main = 0, shunt = false, - dst = false, } -advtrains.interlocking.FULL_FREE = { + +signal.ASPI_FREE = { main = -1, shunt = false, proceed_as_main = true, @@ -25,14 +26,12 @@ Most parts of ywang's implementation are fine, especially I like the formspecs. - Signal gets distant assigned via field in signal aspect table (instead of explicitly) - Signal speed/shunt are no longer free-text but rather they need to be predefined in the node definition To do this: Differentiation between: -== Aspect Group == +== Main Aspect == This is what a signal is assigned by either the route system or the user. It is a string key which has an appropriate entry in the node definition (where it has a description assigned) The signal mod defines a function to set a signal to the most appropriate aspect. This function gets -a) the aspect group name +a) the main aspect table (straight from node def) b) the distant signal's aspect group name & aspect table -EVERY signal must define the special aspect group "halt". This must always be the most restrictive aspect possible. -The "halt" aspect group should ignore any distant info, in most cases it is called without them anyway. == Aspect == One concrete combination of lights/shapes that a signal signal shows. Handling these is at the discretion of @@ -50,6 +49,11 @@ Note that once apply_aspect returns, there is no need for advtrains anymore to q When the signal, for any reason, wants to change its aspect by itself *without* going through the signal API then it should update the aspect info cache by calling advtrains.interlocking.signal.update_aspect_info(pos) +Note that the apply_aspect function MUST accept the following main aspect, even if it is not defined in the main_aspects table: +{ name = "halt", halt = true } +It should cause the signal to show its most restrictive aspect. Typically it is a halt aspect, but e.g. for distant-only +signals this would be "expect stop". + == Aspect Info == The actual signal aspect in the already-known format. This is what the trains use to determine halt/proceed and speed. In this, the dst field has to be resolved. asp = { @@ -62,7 +66,10 @@ asp = { Node definition of signals: - The signal needs some logic to figure out, for each combination of its own aspect group and the distant signal's aspect, what aspect info it can/will show. ndef.advtrains = { - aspect_groups = { [name] = { description = "Proceed at full speed", } } + main_aspects = { + { name = "proceed" description = "Proceed at full speed", } + { name = "proceed2" description = "Proceed at full speed", } + } -- The numerical order determines the layout of the list in the selection dialog. apply_aspect = function(pos, asp_group, dst_aspgrp, dst_aspinfo) -- set the node to show the desired aspect -- called by advtrains when this signal's aspect group or the distant signal's aspect changes @@ -72,28 +79,61 @@ ndef.advtrains = { } ]] -advtrains.interlocking.signal_convert_aspect_if_necessary = advtrains.interlocking.aspect +-- Set a signal's aspect. +-- Signal aspects should only be set through this function. It takes care of: +-- - Storing the main aspect and dst pos for this signal permanently (until next change) +-- - Assigning the distant signal for this signal +-- - Calling apply_aspect() in the signal's node definition to make the signal show the aspect +-- - Calling apply_aspect() again whenever the distant signal changes its aspect +-- - Notifying this signal's distant signals about changes to this signal (unless skip_dst_notify is specified) +function signal.set_aspect(pos, main_aspect, dst_pos, skip_dst_notify) + -- TODO +end + +-- Gets the stored main aspect and distant signal position for this signal +-- This information equals the information last passed to set_aspect +-- It does not take into consideration the actual speed signalling, please use +-- get_aspect_info() for this +-- returns: main_aspect, dst_pos +function signal.get_aspect(pos) + --TODO +end + +function signal.get_distant_signals_of(pos) + --TODO +end -function advtrains.interlocking.update_signal_aspect(tcbs, skipdst) +-- Called when either this signal has changed its main aspect +-- or when this distant signal's currently assigned main signal has changed its aspect +-- It retrieves the signal's main aspect and aspect info and calls apply_aspect of the node definition +-- to update the signal's appearance and aspect info +-- pts: The signal position to update as encoded_pos +function signal.reapply_aspect(pts, p_mainaspect) + --TODO +end + +-- Update this signal's aspect based on the set route +-- +function signal.update_route_aspect(tcbs, skip_dst_notify) if tcbs.signal then - local asp = tcbs.aspect or DANGER - advtrains.interlocking.signal_set_aspect(tcbs.signal, asp, skipdst) + local asp = tcbs.aspect or signal.MASP_HALT + signal.set_aspect(tcbs.signal, asp, skip_dst_notify) end end -function advtrains.interlocking.signal_can_dig(pos) +function signal.can_dig(pos) return not advtrains.interlocking.db.get_sigd_for_signal(pos) end function advtrains.interlocking.signal_after_dig(pos) -- clear influence point - advtrains.interlocking.signal_clear_aspect(pos) - advtrains.distant.unassign_all(pos, true) + advtrains.distant.unassign_all(pos, true) -- TODO end --- should be called when aspect has changed on this signal. -function advtrains.interlocking.signal_on_aspect_changed(pos) +-- Update waiting trains and distant signals about a changed signal aspect +function signal.notify_on_aspect_changed(pos, skip_dst_notify) + --TODO update distant? local ipts, iconn = advtrains.interlocking.db.get_ip_by_signalpos(pos) if not ipts then return end local ipos = minetest.string_to_pos(ipts) @@ -103,7 +143,7 @@ function advtrains.interlocking.signal_on_aspect_changed(pos) minetest.after(0, advtrains.invalidate_all_paths, ipos) end -function advtrains.interlocking.signal_rc_handler(pos, node, player, itemstack, pointed_thing) +function signal.on_rightclick(pos, node, player, itemstack, pointed_thing) local pname = player:get_player_name() local control = player:get_player_control() if control.aux1 then @@ -122,7 +162,7 @@ function advtrains.interlocking.show_signal_form(pos, node, pname) if ndef.advtrains and ndef.advtrains.set_aspect then -- permit to set aspect manually local function callback(pname, aspect) - advtrains.interlocking.signal_set_aspect(pos, aspect) + signal.set_aspect(pos, aspect) end local isasp = advtrains.interlocking.signal_get_aspect(pos, node) @@ -138,18 +178,6 @@ function advtrains.interlocking.show_signal_form(pos, node, pname) end end --- Returns the aspect the signal at pos is supposed to show -function advtrains.interlocking.signal_get_supposed_aspect(pos) - local sigd = advtrains.interlocking.db.get_sigd_for_signal(pos) - if sigd then - local tcbs = advtrains.interlocking.db.get_tcbs(sigd) - if tcbs.aspect then - return convert_aspect_if_necessary(tcbs.aspect) - end - end - return DANGER; -end - local players_assign_ip = {} local function ipmarker(ipos, connid) @@ -236,7 +264,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end) -- inits the signal IP assignment process -function advtrains.interlocking.signal_init_ip_assign(pos, pname) +function signal.init_ip_assign(pos, pname) if not minetest.check_player_privs(pname, "interlocking") then minetest.chat_send_player(pname, "Insufficient privileges to use this!") return @@ -281,3 +309,6 @@ minetest.register_on_punchnode(function(pos, node, player, pointed_thing) players_assign_ip[pname] = nil end end) + + +advtrains.interlocking.signal = signal diff --git a/advtrains_signals_ks/init.lua b/advtrains_signals_ks/init.lua index 7e285ae..c91b4ec 100755 --- a/advtrains_signals_ks/init.lua +++ b/advtrains_signals_ks/init.lua @@ -11,10 +11,9 @@ local function asp_to_zs3type(asp) return math.min(16,4*math.floor(n/4)) end -local function setzs3(msp, lim, rot) +local function setzs3(msp, asp, rot) local pos = {x = msp.x, y = msp.y+1, z = msp.z} local node = advtrains.ndb.get_node(pos) - local asp = asp_to_zs3type(lim) if node.name:find("^advtrains_signals_ks:zs3_") then advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:zs3_"..asp.."_"..rot, param2 = node.param2}) end @@ -50,67 +49,106 @@ local function getzs3v(msp) end local setaspectf = function(rot) - return function(pos, node, asp) - setzs3(pos, asp.main, rot) - if asp.main == 0 then - if asp.shunt then - advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_shunt_"..rot, param2 = node.param2}) - else - advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_danger_"..rot, param2 = node.param2}) - end + return function(pos, node, main_aspect, dst_aspect, dst_aspect_info) + -- set zs3 signal to show speed according to main_aspect + setzs3(pos, asp.zs3, rot) + -- select appropriate lamps based on mainaspect and dst + if main_aspect.shunt then + advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_shunt_"..rot, param2 = node.param2}) + setzs3v(pos, nil, rot) + elseif main_aspect.halt then + advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_danger_"..rot, param2 = node.param2}) setzs3v(pos, nil, rot) else - if not asp.dst or asp.dst == -1 then + if not dst_aspect_info + or not dst_aspect_info.main + or dst_aspect_info.main == -1 then advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_free_"..rot, param2 = node.param2}) - elseif asp.dst == 0 then + setzs3v(pos, nil, rot) + elseif dst_aspect_info.main == 0 then advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_slow_"..rot, param2 = node.param2}) + setzs3v(pos, nil, rot) else advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_nextslow_"..rot, param2 = node.param2}) + setzs3v(pos, dst_aspect_info.main, rot) end - setzs3v(pos, asp.dst, rot) end end end - -local suppasp = { - main = {0, 4, 6, 8, 12, 16, -1}, - dst = {0, 4, 6, 8, 12, 16, -1, false}, - shunt = nil, - proceed_as_main = true, - info = { - call_on = false, - dead_end = false, - w_speed = nil, - } +-- Main aspects main signal +-- These aspects tell only the speed signalization at this signal. +-- Actual signal aspect is chosen based on this and the Dst signal. +local mainaspects_main = { + { + name = "proceed" + description = "Proceed", + zs3 = "off" + }, + { + name = "shunt" + description = "Shunt", + zs3 = "off", + shunt = true, + }, + { + name = "proceed_16" + description = "Proceed (speed 16)", + zs3 = "16", + }, + { + name = "proceed_12" + description = "Proceed (speed 12)", + zs3 = "12", + }, + { + name = "proceed_8" + description = "Proceed (speed 8)", + zs3 = "8", + }, + { + name = "proceed_6" + description = "Proceed (speed 6)", + zs3 = "6", + }, + { + name = "proceed_4" + description = "Proceed (speed 4)", + zs3 = "4", + }, + { + name = "halt" + description = "Halt", + zs3 = "off", + halt = true, + }, } --Rangiersignal -local setaspectf_ra = function(rot) - return function(pos, node, asp) - if asp.shunt then +local applyaspectf_ra = function(rot) + -- we get here the full main_aspect table + return function(pos, node, main_aspect, dst_aspect, dst_aspect_info) + if main_aspect.shunt then advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:ra_shuntd_"..rot, param2 = node.param2}) else advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:ra_danger_"..rot, param2 = node.param2}) end - local meta = minetest.get_meta(pos) - if meta then - meta:set_string("infotext", minetest.serialize(asp)) - end end end -local suppasp_ra = { - main = { false }, - dst = { false }, - shunt = nil, - proceed_as_main = false, - - info = { - call_on = false, - dead_end = false, - w_speed = nil, - } +-- Main aspects shunt signal +-- Shunt signals have only two states, distant doesn't matter +local mainaspects_shunt = { + { + name = "shunt" + description = "Shunt", + shunt = true, + }, + { + name = "halt" + description = "Halt", + halt = true, + }, } advtrains.trackplacer.register_tracktype("advtrains_signals_ks:hs") @@ -192,9 +230,9 @@ for _, rtab in ipairs({ drop = "advtrains_signals_ks:hs_danger_0", inventory_image = "advtrains_signals_ks_hs_inv.png", advtrains = { - set_aspect = setaspectf(rot), - supported_aspects = suppasp, - get_aspect = afunc, + main_aspects = mainaspects_main + apply_aspect = applyaspectf_main(rot), + get_aspect_info = afunc, }, on_rightclick = advtrains.interlocking.signal_rc_handler, can_dig = advtrains.interlocking.signal_can_dig, @@ -235,11 +273,9 @@ for _, rtab in ipairs({ drop = "advtrains_signals_ks:ra_danger_0", inventory_image = "advtrains_signals_ks_ra_inv.png", advtrains = { - set_aspect = setaspectf_ra(rot), - supported_aspects = suppasp_ra, - get_aspect = function(pos, node) - return prts.asp - end, + main_aspects = mainaspects_ra, + apply_aspect = applyaspectf_ra(rot), + get_aspect_info = prts.asp, }, on_rightclick = advtrains.interlocking.signal_rc_handler, can_dig = advtrains.interlocking.signal_can_dig, @@ -276,7 +312,7 @@ for _, rtab in ipairs({ drop = "advtrains_signals_ks:"..prefix.."_"..dtyp.."_0", inventory_image = inv, advtrains = { - get_aspect = function() return asp end + get_aspect_info = asp }, on_rightclick = advtrains.interlocking.signal_rc_handler, can_dig = advtrains.interlocking.signal_can_dig, -- cgit v1.2.3 From eb03b5f301c4244bbc79a101dd9f990b01503ab5 Mon Sep 17 00:00:00 2001 From: orwell Date: Fri, 5 Apr 2024 00:35:40 +0200 Subject: Continue with new-ks rework --- advtrains_interlocking/database.lua | 13 +- advtrains_interlocking/signal_api.lua | 274 ++++++++++++++++++++++++++++++---- advtrains_signals_ks/init.lua | 2 +- 3 files changed, 250 insertions(+), 39 deletions(-) (limited to 'advtrains_signals_ks') diff --git a/advtrains_interlocking/database.lua b/advtrains_interlocking/database.lua index c5ae906..e23b0e5 100644 --- a/advtrains_interlocking/database.lua +++ b/advtrains_interlocking/database.lua @@ -131,12 +131,9 @@ function ildb.load(data) if data.npr_rails then advtrains.interlocking.npr_rails = data.npr_rails end - if data.supposed_aspects then - advtrains.interlocking.load_supposed_aspects(data.supposed_aspects) - end - if data.distant then - advtrains.distant.load(data.distant) - end + + -- let signal_api load data + advtrains.interlocking.signal.load(data) --COMPATIBILITY to Signal aspect format -- TODO remove in time... @@ -171,7 +168,7 @@ function ildb.load(data) end function ildb.save() - return { + local data = { tcbs = track_circuit_breaks, ts=track_sections, signalass = signal_assignments, @@ -182,6 +179,8 @@ function ildb.save() supposed_aspects = advtrains.interlocking.save_supposed_aspects(), distant = advtrains.distant.save(), } + advtrains.interlocking.signal.save(data) + return data end -- diff --git a/advtrains_interlocking/signal_api.lua b/advtrains_interlocking/signal_api.lua index c2cc08b..ce3b03f 100644 --- a/advtrains_interlocking/signal_api.lua +++ b/advtrains_interlocking/signal_api.lua @@ -5,7 +5,8 @@ local F = advtrains.formspec local signal = {} signal.MASP_HALT = { - name = "halt" + name = "halt", + description = "HALT", halt = true, } @@ -55,12 +56,12 @@ It should cause the signal to show its most restrictive aspect. Typically it is signals this would be "expect stop". == Aspect Info == -The actual signal aspect in the already-known format. This is what the trains use to determine halt/proceed and speed. In this, the dst field has to be resolved. +The actual signal aspect in the already-known format. This is what the trains use to determine halt/proceed and speed. asp = { main = 0 (halt) / -1 (max speed) / false (no info) / (speed limit) shunt = true (shunt free) / false (shunt not free) proceed_as_main = true (shunt move can proceed and become train move when main!=0) / false (no) - dst = (like main, informative character, not actually used) + dst = speed of the remote signal (like main, informative character, not actually used) } Node definition of signals: @@ -68,17 +69,84 @@ Node definition of signals: ndef.advtrains = { main_aspects = { { name = "proceed" description = "Proceed at full speed", } - { name = "proceed2" description = "Proceed at full speed", } - } -- The numerical order determines the layout of the list in the selection dialog. - apply_aspect = function(pos, asp_group, dst_aspgrp, dst_aspinfo) + { name = "reduced" description = "Proceed at reduced speed", } + } + -- This list is mainly for the selection dialog. Order of entries determines list order in the dropdown. + -- Some fields have special meaning: + -- name: A unique key to identify the main aspect. Only this key is saved, but APIs always receive the whole table + -- description: Text shown in UI dropdown + -- speed: a number. When present, a speed field is shown in the UI next to the dropdown (prefilled with the value). + -- When user selects a different speed there, this different speed replaces the value in the table whenever the main_aspect is applied. + -- Node can set any other fields at its discretion. They are not touched. + -- Note: On first call advtrains automatically inserts into the ndef.advtrains table a main_aspects_lookup hashtable + -- Note: Pure distant signals (that cannot show halt) should NOT have a main_aspects table + apply_aspect = function(pos, main_aspect, rem_aspect, rem_aspinfo) -- set the node to show the desired aspect - -- called by advtrains when this signal's aspect group or the distant signal's aspect changes + -- called by advtrains when this signal's aspect group or the remote signal's aspect changes -- MAY return the aspect_info. If it returns nil then get_aspect_info will be queried at a later point. - get_aspect_info(pos) - -- Returns the aspect info table (main, shunt, dst etc.)W + get_aspect_info(pos, main_aspect) + -- Returns the aspect info table (main, shunt, dst etc.) + distant_support = true or false + -- If true, signal is considered in distant signalling. If false or nil, rem_aspect and rem_aspinfo are never set. + route_role = one of "main", "shunt", "distant", "distant_repeater", "end" + -- Determines how the signal behaves when routes are set. Only in effect when signal is assigned to a TCB. + -- main: The signal is a possible endpoint for a train move route. Distant signals before it refer to it. + -- shunt: The signal is a possible endpoint for a shunt move route. Ignored for distant signals. + -- distant, distant_repeater: When route is set, signal is always assigned its first main aspect. The next signal with role="main" is set as the remote signal. (currently no further distinction) + -- end: like main, but signifies that it marks an end of track and trains cannot continue further. (currently no practical implications above main) } + +== Nomenclature == +The distant/main relation is named as follows: + V M +=====>====> +Main signal (main) always refers to the signal that is in focus right now (even if that is a distant-only signal) +From the standpoint of M, V is the distant (dst) signal. M does not need to concern itself with V's aspect but needs to notify V when it changes +From the standpoint of V, M is the remote (rem) signal. V needs to show an aspect that matches its remote signal M + +== Criteria for which signals are eligible for routes == + +All signals must define: +- get_aspect_info() + +Signals that can be assigned to a TCB must satisfy: +- apply_aspect() defined + +Signals that are possible start and end points for a route must satisfy: +- main_aspects defined (note, pure distant signals should therefore not define main_aspects) + ]] +-- Database +-- Signal Aspect store +-- Stores for each signal the main aspect and other info, like the assigned remote signal +-- [signal encodePos] = { main_aspect = "proceed", [speed = 12], [remote = encodedPos] } +signal.aspects = {} + +-- Distant signal notification. Records for each signal the distant signals that refer to it +-- Note: this mapping is weak. Needs always backreference check. +-- [signal encodePos] = { [distant signal encodePos] = true } +signal.distant_refs = {} + +function signal.load(data) + signal.aspects = data.aspects or {} + -- rebuild distant_refs after load + signal.distant_refs = {} + for main, aspt in pairs(signal.aspects) do + if aspt.remote then + if not signal.distant_refs[aspt.remote] then + signal.distant_refs[aspt.remote] = {} + end + signal.distant_refs[aspt.remote][main] = true + end + end +end + +function signal.save(data) + data.aspects = signal.aspects +end + + -- Set a signal's aspect. -- Signal aspects should only be set through this function. It takes care of: -- - Storing the main aspect and dst pos for this signal permanently (until next change) @@ -86,30 +154,184 @@ ndef.advtrains = { -- - Calling apply_aspect() in the signal's node definition to make the signal show the aspect -- - Calling apply_aspect() again whenever the distant signal changes its aspect -- - Notifying this signal's distant signals about changes to this signal (unless skip_dst_notify is specified) -function signal.set_aspect(pos, main_aspect, dst_pos, skip_dst_notify) - -- TODO +function signal.set_aspect(pos, main_asp_name, main_asp_speed, rem_pos, skip_dst_notify) + local main_pts = advtrains.encode_pos(pos) + local old_tbl = signal.aspects[main_pts] + local old_remote = old_tbl and old_tbl.remote + local new_remote = rem_pos and advtrains.encode_pos(rem_pos) + + -- if remote has changed, unregister from old remote + if old_remote and old_remote~=new_remote and signal.distant_refs[old_remote] then + signal.distant_refs[old_remote][main_pts] = nil + end + + signal.aspects[main_pts] = { main_aspect = main_asp_name, speed = main_asp_speed, remote = new_remote } + -- apply aspect on main signal, this also checks new_remote + signal.reapply_aspect(main_pts) + + -- notify my distants about this change (with limit 2) + if not skip_dst_notify then + signal.notify_distants_of(main_pts, 2) + end +end + +function signal.clear_aspect(pos, skip_dst_notify) + local main_pts = advtrains.encode_pos(pos) + local old_tbl = signal.aspects[main_pts] + local old_remote = old_tbl and old_tbl.remote + + -- unregister from old remote + if old_remote then + signal.distant_refs[old_remote][main_pts] = nil + end + + signal.aspects[main_pts] = nil + -- apply aspect on main signal, this also checks new_remote + signal.reapply_aspect(main_pts) + + -- notify my distants about this change (with limit 2) + if not skip_dst_notify then + signal.notify_distants_of(main_pts, 2) + end +end + +-- Notify distant signals of main_pts of a change in the aspect of this signal +-- +function signal.notify_distants_of(main_pts, limit) + if limit <= 0 then + return + end + local dstrefs = signal.distant_refs[main_pts] + if dstrefs then + for dst,_ in pairs(dstrefs) do + -- ensure that the backref is still valid + local dst_asp = signal.aspects[dst] + if dst_asp and dst_asp.remote == main_pts then + signal.reapply_aspect(dst) + signal.notify_distants_of(dst, limit - 1) + else + atwarn("Distant signal backref is not purged: main =",main_pts,", distant =",dst,", remote =",dst_asp.remote,"") + end + end + end +end + +function signal.notify_trains(pos) + local ipts, iconn = advtrains.interlocking.db.get_ip_by_signalpos(pos) + if not ipts then return end + local ipos = minetest.string_to_pos(ipts) + + -- FIXME: invalidate_all_paths_ahead does not appear to always work as expected + --advtrains.invalidate_all_paths_ahead(ipos) + minetest.after(0, advtrains.invalidate_all_paths, ipos) +end + +-- Update waiting trains and distant signals about a changed signal aspect +-- Must be called when a signal's aspect changes through some other means +-- and not via the signal mechanism +function signal.notify_on_aspect_changed(pos, skip_dst_notify) + signal.notify_trains(pos) + if not skip_dst_notify then + signal.notify_distants_of(advtrains.encode_pos(pos), 2) + end end -- Gets the stored main aspect and distant signal position for this signal -- This information equals the information last passed to set_aspect -- It does not take into consideration the actual speed signalling, please use -- get_aspect_info() for this +-- pos: the position of the signal -- returns: main_aspect, dst_pos function signal.get_aspect(pos) - --TODO + local aspt = signal.aspects[advtrains.encode_pos(pos)] + local ma,dp = signal.get_aspect_internal(pos, aspt) + return ma, advtrains.decode_pos(dp) +end + +local function cache_mainaspects(ndefat) + ndefat.main_aspects_lookup = { + -- always define halt aspect + halt = signal.MASP_HALT + } + for _,ma in ipairs(ndefat.main_aspects) then + ndefat.main_aspects_lookup[ma.name] = ma + end +end + +function signal.get_aspect_internal(pos, aspt) + if not aspt then + -- oh, no main aspect, nevermind + return nil, aspt.remote, nil + end + -- look aspect in nodedef + local node = advtrains.ndb.get_node_or_nil(pos) + local ndef = node and minetest.registered_nodes[node.name] + local ndefat = ndef and ndef.advtrains + -- only if signal defines main aspect and its set in aspt + if ndefat and ndefat.main_aspects and aspt.main_aspect then + if not ndefat.main_aspects_lookup then + cache_mainaspects(ndefat) + end + local masp = ndefat.main_aspects_lookup[aspt.name] + -- if speed, then apply speed + if masp.speed and aspt.speed then + masp = table.copy(masp) + masp.speed = aspt.speed + end + return masp, aspt.remote, ndef + end + -- invalid node or no main aspect, return nil for masp + return nil, aspt.remote, ndef end -function signal.get_distant_signals_of(pos) - --TODO +-- For the signal at pos, get the "aspect info" table. This contains the speed signalling information at this location +function signal.get_aspect_info(pos) + -- get aspect internal + local aspt = signal.aspects[advtrains.encode_pos(pos)] + local masp, remote, ndef = signal.get_aspect_internal(pos, aspt) + -- call into ndef + if ndef.advtrains and ndef.advtrains.get_aspect_info then + return ndef.advtrains.get_aspect_info(pos, masp) + end end + -- Called when either this signal has changed its main aspect -- or when this distant signal's currently assigned main signal has changed its aspect -- It retrieves the signal's main aspect and aspect info and calls apply_aspect of the node definition -- to update the signal's appearance and aspect info -- pts: The signal position to update as encoded_pos -function signal.reapply_aspect(pts, p_mainaspect) - --TODO +-- returns: the return value of the nodedef call which may be aspect_info +function signal.reapply_aspect(pts) + -- get aspt + local aspt = signal.aspects[pts] + if not aspt then + return -- oop, nothing to do + end + -- resolve mainaspect table by name + local pos = advtrains.decode_pos(pts) + -- note: masp may be nil, when aspt.main_aspect was nil. Valid case for distant-only signals + local masp, remote, ndef = signal.get_aspect_internal(pos, aspt) + -- if we have remote, resolve remote + local rem_masp, rem_aspi + if remote then + local rem_aspt = signal.aspects[remote] + if rem_aspt and rem_aspt.name then + local rem_pos = advtrains.decode_pos(remote) + rem_masp, _, rem_ndef = signal.get_aspect_internal(rem_pos, rem_aspt) + if rem_masp then + if rem_ndef.advtrains and rem_ndef.advtrains.get_aspect_info then + rem_aspi = rem_ndef.advtrains.get_aspect_info(pos, rem_masp) + end + end + end + end + -- call into ndef + if ndef.advtrains and ndef.advtrains.apply_aspect then + return ndef.advtrains.apply_aspect(pos, masp, rem_masp, rem_aspi) + end + -- notify trains + signal.notify_trains(pos) end -- Update this signal's aspect based on the set route @@ -121,26 +343,16 @@ function signal.update_route_aspect(tcbs, skip_dst_notify) end end + +---------------- + function signal.can_dig(pos) return not advtrains.interlocking.db.get_sigd_for_signal(pos) end function advtrains.interlocking.signal_after_dig(pos) - -- clear influence point - advtrains.interlocking.signal_clear_aspect(pos) - advtrains.distant.unassign_all(pos, true) -- TODO -end - --- Update waiting trains and distant signals about a changed signal aspect -function signal.notify_on_aspect_changed(pos, skip_dst_notify) - --TODO update distant? - local ipts, iconn = advtrains.interlocking.db.get_ip_by_signalpos(pos) - if not ipts then return end - local ipos = minetest.string_to_pos(ipts) - - -- FIXME: invalidate_all_paths_ahead does not appear to always work as expected - --advtrains.invalidate_all_paths_ahead(ipos) - minetest.after(0, advtrains.invalidate_all_paths, ipos) + -- TODO clear influence point + advtrains.interlocking.signal.clear_aspect(pos) end function signal.on_rightclick(pos, node, player, itemstack, pointed_thing) diff --git a/advtrains_signals_ks/init.lua b/advtrains_signals_ks/init.lua index c91b4ec..0a43db0 100755 --- a/advtrains_signals_ks/init.lua +++ b/advtrains_signals_ks/init.lua @@ -48,7 +48,7 @@ local function getzs3v(msp) return speed end -local setaspectf = function(rot) +local applyaspectf_main = function(rot) return function(pos, node, main_aspect, dst_aspect, dst_aspect_info) -- set zs3 signal to show speed according to main_aspect setzs3(pos, asp.zs3, rot) -- cgit v1.2.3 From 1f74697e85d456e97e201cdd9edef91a2df4fc14 Mon Sep 17 00:00:00 2001 From: orwell Date: Mon, 8 Apr 2024 21:46:43 +0200 Subject: Fully implement and test new aspect support/distant signalling on ks and japan signals --- advtrains_interlocking/signal_api.lua | 42 ++++++++++++++++++++++++----------- advtrains_signals_japan/init.lua | 36 ++++++++++++++++++++++++------ advtrains_signals_japan/mod.conf | 6 +++++ advtrains_signals_ks/init.lua | 26 +++++++++++----------- 4 files changed, 77 insertions(+), 33 deletions(-) create mode 100644 advtrains_signals_japan/mod.conf (limited to 'advtrains_signals_ks') diff --git a/advtrains_interlocking/signal_api.lua b/advtrains_interlocking/signal_api.lua index ce3b03f..d27a045 100644 --- a/advtrains_interlocking/signal_api.lua +++ b/advtrains_interlocking/signal_api.lua @@ -80,7 +80,7 @@ ndef.advtrains = { -- Node can set any other fields at its discretion. They are not touched. -- Note: On first call advtrains automatically inserts into the ndef.advtrains table a main_aspects_lookup hashtable -- Note: Pure distant signals (that cannot show halt) should NOT have a main_aspects table - apply_aspect = function(pos, main_aspect, rem_aspect, rem_aspinfo) + apply_aspect = function(pos, node, main_aspect, rem_aspect, rem_aspinfo) -- set the node to show the desired aspect -- called by advtrains when this signal's aspect group or the remote signal's aspect changes -- MAY return the aspect_info. If it returns nil then get_aspect_info will be queried at a later point. @@ -120,7 +120,7 @@ Signals that are possible start and end points for a route must satisfy: -- Database -- Signal Aspect store -- Stores for each signal the main aspect and other info, like the assigned remote signal --- [signal encodePos] = { main_aspect = "proceed", [speed = 12], [remote = encodedPos] } +-- [signal encodePos] = { name = "proceed", [speed = 12], [remote = encodedPos] } signal.aspects = {} -- Distant signal notification. Records for each signal the distant signals that refer to it @@ -162,10 +162,11 @@ function signal.set_aspect(pos, main_asp_name, main_asp_speed, rem_pos, skip_dst -- if remote has changed, unregister from old remote if old_remote and old_remote~=new_remote and signal.distant_refs[old_remote] then + atdebug("unregister old remote: ",old_remote,"from",main_pts) signal.distant_refs[old_remote][main_pts] = nil end - signal.aspects[main_pts] = { main_aspect = main_asp_name, speed = main_asp_speed, remote = new_remote } + signal.aspects[main_pts] = { name = main_asp_name, speed = main_asp_speed, remote = new_remote } -- apply aspect on main signal, this also checks new_remote signal.reapply_aspect(main_pts) @@ -198,10 +199,12 @@ end -- Notify distant signals of main_pts of a change in the aspect of this signal -- function signal.notify_distants_of(main_pts, limit) + atdebug("notify_distants_of",advtrains.decode_pos(main_pts),"limit",limit) if limit <= 0 then return end local dstrefs = signal.distant_refs[main_pts] + atdebug("dstrefs",dstrefs,"") if dstrefs then for dst,_ in pairs(dstrefs) do -- ensure that the backref is still valid @@ -253,7 +256,7 @@ local function cache_mainaspects(ndefat) -- always define halt aspect halt = signal.MASP_HALT } - for _,ma in ipairs(ndefat.main_aspects) then + for _,ma in ipairs(ndefat.main_aspects) do ndefat.main_aspects_lookup[ma.name] = ma end end @@ -263,32 +266,37 @@ function signal.get_aspect_internal(pos, aspt) -- oh, no main aspect, nevermind return nil, aspt.remote, nil end + atdebug("get_aspect_internal",pos,aspt) -- look aspect in nodedef local node = advtrains.ndb.get_node_or_nil(pos) local ndef = node and minetest.registered_nodes[node.name] local ndefat = ndef and ndef.advtrains -- only if signal defines main aspect and its set in aspt - if ndefat and ndefat.main_aspects and aspt.main_aspect then + if ndefat and ndefat.main_aspects and aspt.name then if not ndefat.main_aspects_lookup then cache_mainaspects(ndefat) end local masp = ndefat.main_aspects_lookup[aspt.name] + if not masp then + atwarn(pos,"invalid main aspect",aspt.name,"valid are",ndefat.main_aspects_lookup) + return nil, aspt.remote, node, ndef + end -- if speed, then apply speed if masp.speed and aspt.speed then masp = table.copy(masp) masp.speed = aspt.speed end - return masp, aspt.remote, ndef + return masp, aspt.remote, node, ndef end -- invalid node or no main aspect, return nil for masp - return nil, aspt.remote, ndef + return nil, aspt.remote, node, ndef end -- For the signal at pos, get the "aspect info" table. This contains the speed signalling information at this location function signal.get_aspect_info(pos) -- get aspect internal local aspt = signal.aspects[advtrains.encode_pos(pos)] - local masp, remote, ndef = signal.get_aspect_internal(pos, aspt) + local masp, remote, node, ndef = signal.get_aspect_internal(pos, aspt) -- call into ndef if ndef.advtrains and ndef.advtrains.get_aspect_info then return ndef.advtrains.get_aspect_info(pos, masp) @@ -305,30 +313,38 @@ end function signal.reapply_aspect(pts) -- get aspt local aspt = signal.aspects[pts] + atdebug("reapply_aspect",advtrains.decode_pos(pts),"aspt",aspt) if not aspt then return -- oop, nothing to do end -- resolve mainaspect table by name local pos = advtrains.decode_pos(pts) - -- note: masp may be nil, when aspt.main_aspect was nil. Valid case for distant-only signals - local masp, remote, ndef = signal.get_aspect_internal(pos, aspt) + -- note: masp may be nil, when aspt.name was nil. Valid case for distant-only signals + local masp, remote, node, ndef = signal.get_aspect_internal(pos, aspt) -- if we have remote, resolve remote local rem_masp, rem_aspi if remote then + -- register in remote signal as distant + if not signal.distant_refs[remote] then + signal.distant_refs[remote] = {} + end + signal.distant_refs[remote][pts] = true local rem_aspt = signal.aspects[remote] + atdebug("resolving remote",advtrains.decode_pos(remote),"aspt",rem_aspt) if rem_aspt and rem_aspt.name then local rem_pos = advtrains.decode_pos(remote) - rem_masp, _, rem_ndef = signal.get_aspect_internal(rem_pos, rem_aspt) + rem_masp, _, _, rem_ndef = signal.get_aspect_internal(rem_pos, rem_aspt) if rem_masp then if rem_ndef.advtrains and rem_ndef.advtrains.get_aspect_info then - rem_aspi = rem_ndef.advtrains.get_aspect_info(pos, rem_masp) + rem_aspi = rem_ndef.advtrains.get_aspect_info(rem_pos, rem_masp) end end end end -- call into ndef + atdebug("applying to",pos,": main_asp",masp,"rem_masp",rem_masp,"rem_aspi",rem_aspi) if ndef.advtrains and ndef.advtrains.apply_aspect then - return ndef.advtrains.apply_aspect(pos, masp, rem_masp, rem_aspi) + ndef.advtrains.apply_aspect(pos, node, masp, rem_masp, rem_aspi) end -- notify trains signal.notify_trains(pos) diff --git a/advtrains_signals_japan/init.lua b/advtrains_signals_japan/init.lua index 84373a9..eb39f85 100644 --- a/advtrains_signals_japan/init.lua +++ b/advtrains_signals_japan/init.lua @@ -275,6 +275,7 @@ 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"), @@ -301,7 +302,7 @@ advtrains.interlocking.aspect.register_group { "restrictedspeed", "danger", } -} +}]] local sigdefs = {} local lightcolors = { @@ -316,6 +317,7 @@ local function process_signal(name, sigdata, isrpt) def.textures = tx def.desc = sigdata.desc def.isdst = isrpt + def.aspects = sigdata.aspects local lights = sigdata.lights local lightcount = #lights if isrpt then @@ -359,16 +361,17 @@ for sigtype, sigdata in pairs { desc = "5A", lights = {"yellow", "yellow", "red", "yellow", "green"}, aspects = { - {name = "clear", lights = {5}, main = -1}, - {name = "reducedspeed", lights = {2, 5}}, - {name = "caution", lights = {4}}, - {name = "restrictedspeed", lights = {1, 4}}, - {name = "danger", lights = {3}, main = 0}, + {name = "clear", description = S"Clear (proceed)", lights = {5}, main = -1}, + {name = "reducedspeed", description = S"Reduced speed", lights = {2, 5}, main = 12}, + {name = "caution", description = S"Caution", lights = {4}}, + {name = "restrictedspeed", description = S"Restricted speed", lights = {1, 4}, main = 6}, + {name = "danger", description = S"Danger (halt)", lights = {3}, main = 0}, } } } do sigdefs["main_"..sigtype] = process_signal(sigtype, sigdata) - sigdefs["rpt_"..sigtype] = process_signal(sigtype, sigdata, true) + -- TODO re-enable this once ready + --sigdefs["rpt_"..sigtype] = process_signal(sigtype, sigdata, true) end for k in pairs(sigdefs) do @@ -412,6 +415,24 @@ for _, rtab in ipairs { inventory_image = siginfo.inventory_image, drop = "advtrains_signals_japan:"..sigtype.."_danger_0", advtrains = { + main_aspects = siginfo.aspects, + apply_aspect = function(pos, node, main_aspect, rem_aspect, rem_aspinfo) + local asp_name = main_aspect and main_aspect.name or "danger" + -- if this signal is clear and remote signal is restrictive (<= 10) then degrade to caution aspect + if not main_aspect or main_aspect.name == "halt" then + asp_name = "danger" + elseif main_aspect.name == "clear" and rem_aspinfo and rem_aspinfo.main and rem_aspinfo.main >= 0 and rem_aspinfo.main <= 10 then + asp_name = "caution" + end + advtrains.ndb.swap_node(pos, {name="advtrains_signals_japan:"..sigtype.."_"..asp_name.."_"..rot, param2 = node.param2}) + end, + get_aspect_info = function(pos, main_aspect) + return { + main = main_aspect.main, + proceed_as_main = true, + } + end, + --[[ supported_aspects = { group = "advtrains_signals_japan:5a", name = siginfo.suppasp_names, @@ -428,6 +449,7 @@ for _, rtab in ipairs { set_aspect = function(pos, node, asp) advtrains.ndb.swap_node(pos, {name = "advtrains_signals_japan:"..sigtype.."_"..(asp.name).."_"..rot, param2 = node.param2}) end, + ]] }, on_rightclick = advtrains.interlocking.signal_rc_handler, can_dig = advtrains.interlocking.signal_can_dig, diff --git a/advtrains_signals_japan/mod.conf b/advtrains_signals_japan/mod.conf new file mode 100644 index 0000000..8cb2cb3 --- /dev/null +++ b/advtrains_signals_japan/mod.conf @@ -0,0 +1,6 @@ +name=advtrains_signals_japan +title=Advtrains Interlocking Signal Set - Japanese Signals +description=Japanese signal set for the Advanced Trains Interlocking system +author=yw05 + +depends=advtrains_interlocking diff --git a/advtrains_signals_ks/init.lua b/advtrains_signals_ks/init.lua index 0a43db0..0ed03bb 100755 --- a/advtrains_signals_ks/init.lua +++ b/advtrains_signals_ks/init.lua @@ -51,7 +51,7 @@ end local applyaspectf_main = function(rot) return function(pos, node, main_aspect, dst_aspect, dst_aspect_info) -- set zs3 signal to show speed according to main_aspect - setzs3(pos, asp.zs3, rot) + setzs3(pos, main_aspect.zs3, rot) -- select appropriate lamps based on mainaspect and dst if main_aspect.shunt then advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_shunt_"..rot, param2 = node.param2}) @@ -81,43 +81,43 @@ end -- Actual signal aspect is chosen based on this and the Dst signal. local mainaspects_main = { { - name = "proceed" + name = "proceed", description = "Proceed", zs3 = "off" }, { - name = "shunt" + name = "shunt", description = "Shunt", zs3 = "off", shunt = true, }, { - name = "proceed_16" + name = "proceed_16", description = "Proceed (speed 16)", zs3 = "16", }, { - name = "proceed_12" + name = "proceed_12", description = "Proceed (speed 12)", zs3 = "12", }, { - name = "proceed_8" + name = "proceed_8", description = "Proceed (speed 8)", zs3 = "8", }, { - name = "proceed_6" + name = "proceed_6", description = "Proceed (speed 6)", zs3 = "6", }, { - name = "proceed_4" + name = "proceed_4", description = "Proceed (speed 4)", zs3 = "4", }, { - name = "halt" + name = "halt", description = "Halt", zs3 = "off", halt = true, @@ -140,12 +140,12 @@ end -- Shunt signals have only two states, distant doesn't matter local mainaspects_shunt = { { - name = "shunt" + name = "shunt", description = "Shunt", shunt = true, }, { - name = "halt" + name = "halt", description = "Halt", halt = true, }, @@ -168,7 +168,7 @@ for _, rtab in ipairs({ }) do local rot = rtab.rot for typ, prts in pairs({ - danger = {asp = advtrains.interlocking.DANGER, n = "slow", ici=true}, + danger = {asp = advtrains.interlocking.signal.ASPI_HALT, n = "slow", ici=true}, slow = { asp = function(pos) return { main = getzs3(pos) or -1, proceed_as_main = true, dst = 0 } @@ -230,7 +230,7 @@ for _, rtab in ipairs({ drop = "advtrains_signals_ks:hs_danger_0", inventory_image = "advtrains_signals_ks_hs_inv.png", advtrains = { - main_aspects = mainaspects_main + main_aspects = mainaspects_main, apply_aspect = applyaspectf_main(rot), get_aspect_info = afunc, }, -- cgit v1.2.3