-- Get current translator local S = atlatc.translate local ac = {nodes={}} function ac.load(data) if data then ac.nodes=data.nodes end end function ac.save() return {nodes = ac.nodes} end function ac.after_place_node(pos, player) local meta=minetest.get_meta(pos) meta:set_string("formspec", ac.getform(pos, meta)) meta:set_string("infotext", S("Unconfigured LuaATC component")) local ph=minetest.pos_to_string(pos) --just get first available key! for en,_ in pairs(atlatc.envs) do ac.nodes[ph]={env=en} return end end function ac.getform(pos, meta_p) local meta = meta_p or minetest.get_meta(pos) local envs_asvalues={} local ph=minetest.pos_to_string(pos) local nodetbl = ac.nodes[ph] local env, code, err = nil, "", "" if nodetbl then code=nodetbl.code or "" err=nodetbl.err or "" env=nodetbl.env or "" end local sel = 1 for n,_ in pairs(atlatc.envs) do envs_asvalues[#envs_asvalues+1]=minetest.formspec_escape(n) if n==env then sel=#envs_asvalues end end local form = "size["..atlatc.CODE_FORM_SIZE.."]" .."style[code;font=mono]" .."label[0,-0.1;"..S("LuaATC Environment").."]" .."dropdown[0,0.3;3;env;"..table.concat(envs_asvalues, ",")..";"..sel.."]" .."button[5,0.2;2,1;save;"..S("Save").."]" .."button[7,0.2;3,1;cle;"..S("Clear Local Environment").."]" .."textarea[0.3,1.5;"..atlatc.CODE_FORM_SIZE..";code;"..S("Code")..";"..minetest.formspec_escape(code).."]" .."label["..atlatc.CODE_FORM_ERRLABELPOS..";"..err.."]" return form end function ac.after_dig_node(pos, node, player) advtrains.invalidate_all_paths(pos) advtrains.ndb.clear(pos) atlatc.interrupt.clear_ints_at_pos(pos) if advtrains.lines and advtrains.lines.sched then advtrains.lines.sched.discard_all(advtrains.encode_pos(pos)) end local ph=minetest.pos_to_string(pos) ac.nodes[ph]=nil end function ac.on_receive_fields(pos, formname, fields, player) if not minetest.check_player_privs(player:get_player_name(), {atlatc=true}) then minetest.chat_send_player(player:get_player_name(), S("You are not allowed to configure this LuaATC component without the @1 privilege.", "atlatc")) return end local meta=minetest.get_meta(pos) local ph=minetest.pos_to_string(pos) local nodetbl = ac.nodes[ph] or {} --if fields.quit then return end if fields.env then nodetbl.env=fields.env end if fields.code then nodetbl.code=fields.code end if fields.save then -- reset certain things nodetbl.err=nil if advtrains.lines and advtrains.lines.sched then -- discard all schedules for this node advtrains.lines.sched.discard_all(advtrains.encode_pos(pos)) end end if fields.cle then nodetbl.data={} end ac.nodes[ph]=nodetbl meta:set_string("formspec", ac.getform(pos, meta)) if nodetbl.env then meta:set_string("infotext", S("LuaATC component assigned to environment '@1'", nodetbl.env)) else meta:set_string("infotext", S("LuaATC component assigned to an invalid environment")) end end function ac.run_in_env(pos, evtdata, customfct_p, ignore_no_code) local ph=minetest.pos_to_string(pos) local nodetbl = ac.nodes[ph] if not nodetbl then atwarn("LuaATC component at",ph,": Data not in memory! Please visit component and click 'Save'!") return end local meta if advtrains.is_node_loaded(pos) then meta=minetest.get_meta(pos) end if not nodetbl.env or not atlatc.envs[nodetbl.env] then atwarn("LuaATC component at",ph,": Not an existing environment: "..(nodetbl.env or "")) return false end local env = atlatc.envs[nodetbl.env] if not nodetbl.code or nodetbl.code=="" then if not ignore_no_code then env:log("warning", "LuaATC component at",ph,": No code to run! (insert -- to suppress warning)") end return false end local customfct=customfct_p or {} -- add interrupt function customfct.interrupt=functio/* Minetest-c55 Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef CONTENT_MAPBLOCK_HEADER #define CONTENT_MAPBLOCK_HEADER #ifndef SERVER #include "mapblock_mesh.h" #include "utility.h" void mapblock_mesh_generate_special(MeshMakeData *data, MeshCollector &collector); #endif #endif atlatc.interrupt.add(0, data.pos, {type="schedule",schedule=true, msg=data.msg}) end) end ac.trackdef_advtrains_defs = { on_train_enter = function(pos, train_id) --do async. Event is fired in train steps atlatc.interrupt.add(0, pos, {type="train", train=true, id=train_id}) end, } atlatc.active=ac