From ee079d02ff09c4ae4bc63d892e83146dfe6edd6c Mon Sep 17 00:00:00 2001 From: orwell96 Date: Sat, 16 Feb 2019 13:09:33 +0100 Subject: Improve Signal IP form/workflow --- advtrains_interlocking/signal_api.lua | 39 ++++++++++++++----------------- advtrains_interlocking/train_sections.lua | 2 +- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/advtrains_interlocking/signal_api.lua b/advtrains_interlocking/signal_api.lua index f33edde..6704e18 100644 --- a/advtrains_interlocking/signal_api.lua +++ b/advtrains_interlocking/signal_api.lua @@ -322,6 +322,20 @@ end local players_assign_ip = {} +local function ipmarker(ipos, connid) + local node_ok, conns, rhe = advtrains.get_rail_info_at(ipos, advtrains.all_tracktypes) + if not node_ok then return end + local yaw = advtrains.dir_to_angle(conns[connid].c) + + -- using tcbmarker here + local obj = minetest.add_entity(vector.add(ipos, {x=0, y=0.2, z=0}), "advtrains_interlocking:tcbmarker") + if not obj then return end + obj:set_yaw(yaw) + obj:set_properties({ + textures = { "at_il_signal_ip.png" }, + }) +end + -- shows small info form for signal IP state/assignment -- only_notset: show only if it is not set yet (used by signal tcb assignment) function advtrains.interlocking.show_ip_form(pos, pname, only_notset) @@ -332,8 +346,10 @@ function advtrains.interlocking.show_ip_form(pos, pname, only_notset) local pts, connid = advtrains.interlocking.db.get_ip_by_signalpos(pos) if pts then form = form.."label[0.5,1.5;Influence point is set at "..pts.."/"..connid.."]" - form = form.."button_exit[0.5,2.5; 5,1;show;Show]" + form = form.."button_exit[0.5,2.5; 5,1;set;Move]" form = form.."button_exit[0.5,3.5; 5,1;clear;Clear]" + local ipos = minetest.string_to_pos(pts) + ipmarker(ipos, connid) else form = form.."label[0.5,1.5;Influence point is not set.]" form = form.."label[0.5,2.0;It is recommended to set an influence point.]" @@ -346,20 +362,6 @@ function advtrains.interlocking.show_ip_form(pos, pname, only_notset) end end -local function ipmarker(ipos, connid) - local node_ok, conns, rhe = advtrains.get_rail_info_at(ipos, advtrains.all_tracktypes) - if not node_ok then return end - local yaw = advtrains.dir_to_angle(conns[connid].c) - - -- using tcbmarker here - local obj = minetest.add_entity(vector.add(ipos, {x=0, y=0.2, z=0}), "advtrains_interlocking:tcbmarker") - if not obj then return end - obj:set_yaw(yaw) - obj:set_properties({ - textures = { "at_il_signal_ip.png" }, - }) -end - minetest.register_on_player_receive_fields(function(player, formname, fields) local pname = player:get_player_name() if not minetest.check_player_privs(pname, {train_operator=true, interlocking=true}) then @@ -375,11 +377,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) advtrains.interlocking.signal_init_ip_assign(pos, pname) elseif fields.clear then advtrains.interlocking.db.clear_ip_by_signalpos(pos) - elseif fields.show then - local ipts, connid = advtrains.interlocking.db.get_ip_by_signalpos(pos) - if not ipts then return end - local ipos = minetest.string_to_pos(ipts) - ipmarker(ipos, connid) end end end) @@ -391,7 +388,7 @@ function advtrains.interlocking.signal_init_ip_assign(pos, pname) return end --remove old IP - advtrains.interlocking.db.clear_ip_by_signalpos(pos) + --advtrains.interlocking.db.clear_ip_by_signalpos(pos) minetest.chat_send_player(pname, "Configuring Signal: Please look in train's driving direction and punch rail to set influence point.") players_assign_ip[pname] = pos diff --git a/advtrains_interlocking/train_sections.lua b/advtrains_interlocking/train_sections.lua index 21d3d13..757f36a 100644 --- a/advtrains_interlocking/train_sections.lua +++ b/advtrains_interlocking/train_sections.lua @@ -65,7 +65,7 @@ local function setsection(tid, train, ts_id, ts, sigd) -- train if not train.il_sections then train.il_sections = {} end if not itkexist(train.il_sections, "ts_id", ts_id) then - table.insert(train.il_sections, {ts_id = ts_id, origin = origin}) + table.insert(train.il_sections, {ts_id = ts_id, origin = sigd}) end -- ts -- cgit v1.2.3