diff options
| author | Y. Wang <yw05@forksworld.de> | 2022-04-11 16:55:50 +0200 |
|---|---|---|
| committer | Y. Wang <yw05@forksworld.de> | 2023-03-23 20:06:02 +0100 |
| commit | 5c8962b39bd4f6871ec87a988ac43d7bfad04d2b (patch) | |
| tree | b30a30fdfa905ef5eabce1528829fa41a8c127a3 /advtrains_signals_japan/init.lua | |
| parent | 0b4cdbb455b5ba43b3c8d3fd7af5112021144eaa (diff) | |
Implement basic route signaling with Japanese signals for demo
Diffstat (limited to 'advtrains_signals_japan/init.lua')
| -rw-r--r-- | advtrains_signals_japan/init.lua | 419 |
1 files changed, 419 insertions, 0 deletions
diff --git a/advtrains_signals_japan/init.lua b/advtrains_signals_japan/init.lua new file mode 100644 index 0000000..9ccf66b --- /dev/null +++ b/advtrains_signals_japan/init.lua @@ -0,0 +1,419 @@ +local pole_texture = "advtrains_hud_bg.png^[colorize:#858585:255" +local signal_face_texture = "advtrains_hud_bg.png^[colorize:#000000:255" +local pole_radius = 1/16 +local pole_box = {-pole_radius,-1/2,-pole_radius,pole_radius,1/2,pole_radius} +local light_radius = 1/20 +local signal_width = 6*light_radius +local signal_thickness = pole_radius*3 +local signal_height = {} +local signal_box = {} +local light_red = "advtrains_hud_bg.png^[colorize:red:255" +local light_yellow = "advtrains_hud_bg.png^[colorize:orange:255" +local light_green = "advtrains_hud_bg.png^[colorize:lime:255" +local light_purple = "advtrains_hud_bg.png^[colorize:purple:255" +local light_distant = light_purple +local light_off = signal_face_texture + +do + local model_path_prefix = table.concat({minetest.get_modpath("advtrains_signals_japan"), "models", "advtrains_signals_japan_"}, DIR_DELIM) + + local function vertex(x, y, z) + return string.format("v %f %f %f", x, y, z) + end + local function texture(u, v) + return string.format("vt %f %f", u, v) + end + local function face_element(v, vt) + if vt then + return string.format("%d/%d", v, vt) + end + return tonumber(v) + end + local function face_elements(...) + local st = {"f"} + local args = {...} + local len = #args + for i = 1, len, 2 do + st[(i+3)/2] = face_element(args[i], args[i+1]) + end + return table.concat(st, " ") + end + local function sequential_elements(v0, vt0, count) + local st = {} + for i = 1, count do + st[i] = face_element(v0+i, vt0+i) + end + return table.concat(st, " ") + end + local function mod_lower(min, a, b) + return min + (a-min)%b + end + local function connect_circular(v0, vt0, count) + return "f " .. sequential_elements(v0, vt0, count) + end + local function connect_cylindrical(v0, vt0, count) + local st = {} + for i = 0, count-1 do + local j = (i+1)%count + local v1 = v0+i+1 + local v2 = v1+count + local v3 = v0+j+1 + local v4 = v3+count + local vt1 = vt0+i+1 + local vt2 = vt1+count+1 + st[i+1] = face_elements(v1, vt1, v3, vt1+1, v4, vt2+1, v2, vt2) + end + return table.concat(st, "\n") + end + local function circular_textures(u0, v0, r, count, total, angular_offset, direction) + local st = {} + if not angular_offset then + angular_offset = 0 + end + if not total then + total = count + end + if not direction then + direction = 1 + end |
