From a29dda359ed363b7e33fe967af5dca5dd611e2fb Mon Sep 17 00:00:00 2001 From: HybridDog Date: Sat, 9 Jan 2016 10:52:31 +0100 Subject: [PATCH] do not store those gateNodes and remove unnecessary code, e.g. whitespace fixes --- gate_defs.lua | 329 ++++++++++++++++++----------------------------- stargate_gui.lua | 71 +++++----- 2 files changed, 164 insertions(+), 236 deletions(-) diff --git a/gate_defs.lua b/gate_defs.lua index d60ef4d..a6965cf 100644 --- a/gate_defs.lua +++ b/gate_defs.lua @@ -1,220 +1,149 @@ -function swap_gate_node(pos,name,dir) +local function swap_gate_node(pos,name,dir) local node = core.get_node(pos) local meta = core.get_meta(pos) local meta0 = meta:to_table() node.name = name - node.param1=0 node.param2=dir core.set_node(pos,node) meta:from_table(meta0) end -function getDir (player) - local dir=player:get_look_dir() - if math.abs(dir.x)>math.abs(dir.z) then - if dir.x>0 then return 0 end - return 1 - end - if dir.z>0 then return 2 end - return 3 +local function addGateNode(gateNodes, pos) + gateNodes[#gateNodes+1] = vector.new(pos) end -function checkNode (pos) - local node=core.get_node(pos) - if node.name == "air" then return 0 end - return 1 -end - -function addGateNode (gateNodes,i,pos) - gateNodes[i].pos.x=pos.x - gateNodes[i].pos.y=pos.y - gateNodes[i].pos.z=pos.z -end - -function placeGate (player,pos) - local player_name=player:get_player_name() - local dir=minetest.dir_to_facedir(player:get_look_dir()) - local pos1=pos - local gateNodes={} - for i=1,9,1 do - gateNodes[i]={} - gateNodes[i].pos={} +local function placeGate(player,pos) + local dir = minetest.dir_to_facedir(player:get_look_dir()) + local pos1 = vector.new(pos) + local gateNodes = {} + addGateNode(gateNodes, pos1) + if dir == 1 + or dir == 3 then + pos1.z=pos1.z+1 + addGateNode(gateNodes, pos1) + pos1.z=pos1.z-2 + addGateNode(gateNodes, pos1) + pos1.z=pos1.z+1 + pos1.y=pos1.y+1 + addGateNode(gateNodes, pos1) + pos1.z=pos1.z+1 + addGateNode(gateNodes, pos1) + pos1.z=pos1.z-2 + addGateNode(gateNodes, pos1) + pos1.z=pos1.z+1 + pos1.y=pos1.y+1 + addGateNode(gateNodes, pos1) + pos1.z=pos1.z+1 + addGateNode(gateNodes, pos1) + pos1.z=pos1.z-2 + addGateNode(gateNodes, pos1) + else + pos1.x=pos1.x+1 + addGateNode(gateNodes, pos1) + pos1.x=pos1.x-2 + addGateNode(gateNodes, pos1) + pos1.x=pos1.x+1 + pos1.y=pos1.y+1 + addGateNode(gateNodes, pos1) + pos1.x=pos1.x+1 + addGateNode(gateNodes, pos1) + pos1.x=pos1.x-2 + addGateNode(gateNodes, pos1) + pos1.x=pos1.x+1 + pos1.y=pos1.y+1 + addGateNode(gateNodes, pos1) + pos1.x=pos1.x+1 + addGateNode(gateNodes, pos1) + pos1.x=pos1.x-2 + addGateNode(gateNodes, pos1) end - if dir==1 then - addGateNode(gateNodes,1,pos1) - pos1.z=pos1.z+1 - addGateNode(gateNodes,2,pos1) - pos1.z=pos1.z-2 - addGateNode(gateNodes,3,pos1) - pos1.z=pos1.z+1 - pos1.y=pos1.y+1 - addGateNode(gateNodes,4,pos1) - pos1.z=pos1.z+1 - addGateNode(gateNodes,5,pos1) - pos1.z=pos1.z-2 - addGateNode(gateNodes,6,pos1) - pos1.z=pos1.z+1 - pos1.y=pos1.y+1 - addGateNode(gateNodes,7,pos1) - pos1.z=pos1.z+1 - addGateNode(gateNodes,8,pos1) - pos1.z=pos1.z-2 - addGateNode(gateNodes,9,pos1) + for i=1,9 do + if core.get_node(gateNodes[i]).name ~= "air" then + print("not enough space") + return false + end end - if dir==3 then - addGateNode(gateNodes,1,pos1) - pos1.z=pos1.z+1 - addGateNode(gateNodes,3,pos1) - pos1.z=pos1.z-2 - addGateNode(gateNodes,2,pos1) - pos1.z=pos1.z+1 - pos1.y=pos1.y+1 - addGateNode(gateNodes,4,pos1) - pos1.z=pos1.z+1 - addGateNode(gateNodes,6,pos1) - pos1.z=pos1.z-2 - addGateNode(gateNodes,5,pos1) - pos1.z=pos1.z+1 - pos1.y=pos1.y+1 - addGateNode(gateNodes,7,pos1) - pos1.z=pos1.z+1 - addGateNode(gateNodes,9,pos1) - pos1.z=pos1.z-2 - addGateNode(gateNodes,8,pos1) - end - if dir==2 then - addGateNode(gateNodes,1,pos1) - pos1.x=pos1.x+1 - addGateNode(gateNodes,2,pos1) - pos1.x=pos1.x-2 - addGateNode(gateNodes,3,pos1) - pos1.x=pos1.x+1 - pos1.y=pos1.y+1 - addGateNode(gateNodes,4,pos1) - pos1.x=pos1.x+1 - addGateNode(gateNodes,5,pos1) - pos1.x=pos1.x-2 - addGateNode(gateNodes,6,pos1) - pos1.x=pos1.x+1 - pos1.y=pos1.y+1 - addGateNode(gateNodes,7,pos1) - pos1.x=pos1.x+1 - addGateNode(gateNodes,8,pos1) - pos1.x=pos1.x-2 - addGateNode(gateNodes,9,pos1) - end - if dir==0 then - addGateNode(gateNodes,1,pos1) - pos1.x=pos1.x+1 - addGateNode(gateNodes,3,pos1) - pos1.x=pos1.x-2 - addGateNode(gateNodes,2,pos1) - pos1.x=pos1.x+1 - pos1.y=pos1.y+1 - addGateNode(gateNodes,4,pos1) - pos1.x=pos1.x+1 - addGateNode(gateNodes,6,pos1) - pos1.x=pos1.x-2 - addGateNode(gateNodes,5,pos1) - pos1.x=pos1.x+1 - pos1.y=pos1.y+1 - addGateNode(gateNodes,7,pos1) - pos1.x=pos1.x+1 - addGateNode(gateNodes,9,pos1) - pos1.x=pos1.x-2 - addGateNode(gateNodes,8,pos1) - end - for i=1,9,1 do - local node=core.get_node(gateNodes[i].pos) - if node.name ~= "air" then return false end - end - core.set_node(gateNodes[1].pos,{name="stargate:gatenode_off", param1=0, param2=dir}) - local meta = core.get_meta(gateNodes[1].pos) - meta:set_string("infotext", "Stargate\nOwned by: "..player_name) - meta:set_string("gateNodes",minetest.serialize(gateNodes)) - meta:set_int("gateActive",0) - meta:set_string("owner",player_name) - meta:set_string("dont_destroy","false") - stargate.registerGate(player_name,gateNodes[1].pos,dir) + core.set_node(pos, {name="stargate:gatenode_off", param2=dir}) + local player_name = player:get_player_name() + local meta = core.get_meta(pos) + meta:set_string("infotext", "Stargate\rOwned by: "..player_name) + meta:set_int("gateActive", 0) + meta:set_string("owner", player_name) + meta:set_string("dont_destroy", "false") + stargate.registerGate(player_name, pos, dir) return true end -function removeGate (pos) +local function removeGate(pos) local meta = core.get_meta(pos) - if meta:get_string("dont_destroy") == "true" then return end - local player_name=meta:get_string("owner") - local gateNodes=minetest.deserialize(meta:get_string("gateNodes")) - if gateNodes ~= nil then - stargate.unregisterGate(player_name,gateNodes[1].pos) + if meta:get_string("dont_destroy") == "true" then + -- when swapping it + return end + stargate.unregisterGate(meta:get_string("owner"), pos) end -function activateGate (pos) +function stargate.activateGate(pos) local node = core.get_node(pos) local dir=node.param2 local meta = core.get_meta(pos) - local gateNodes=minetest.deserialize(meta:get_string("gateNodes")) meta:set_int("gateActive",1) meta:set_string("dont_destroy","true") - minetest.sound_play("gateOpen", {pos = pos, gain = 1.0,loop = false, max_hear_distance = 72,}) - swap_gate_node(gateNodes[1].pos,"stargate:gatenode_on",dir) + minetest.sound_play("gateOpen", {pos = pos, max_hear_distance = 72,}) + swap_gate_node(pos,"stargate:gatenode_on",dir) meta:set_string("dont_destroy","false") end -function deactivateGate (pos) +function stargate.deactivateGate(pos) local node = core.get_node(pos) local dir=node.param2 local meta = core.get_meta(pos) - local gateNodes=minetest.deserialize(meta:get_string("gateNodes")) meta:set_int("gateActive",0) meta:set_string("dont_destroy","true") minetest.sound_play("gateClose", {pos = pos, gain = 1.0,loop = false, max_hear_distance = 72,}) - swap_gate_node(gateNodes[1].pos,"stargate:gatenode_off",dir) + swap_gate_node(pos,"stargate:gatenode_off",dir) meta:set_string("dont_destroy","false") end -gateCanDig = function(pos,player) - local player_name = player:get_player_name() +local function gateCanDig(pos, player) local meta = core.get_meta(pos) - if meta:get_string("dont_destroy") == "true" then return end - local owner=meta:get_string("owner") - if player_name==owner then return true - else return false end + return meta:get_string("dont_destroy") ~= "true" + and player:get_player_name() == meta:get_string("owner") end -sg_collision_box = { +local sg_collision_box = { type = "fixed", fixed={{-1.5,-0.5,-3/20,1.5,2.5,3/20},}, } -sg_selection_box = { +local sg_selection_box = { type = "fixed", fixed={{-1.5,-0.5,-3/20,1.5,2.5,3/20},}, } -sg_groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1} -sg_groups1 = {snappy=2,choppy=2,oddly_breakable_by_hand=2} +local sg_groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1} +local sg_groups1 = {snappy=2,choppy=2,oddly_breakable_by_hand=2} minetest.register_node("stargate:gatenode_on",{ - tiles = { - {name = "gray.png"}, - { - name = "puddle_animated2.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 2.0, - }, - }, - {name = "0003.png"}, - {name = "0002.png"}, - {name = "0001.png"}, - {name = "null.png"}, - }, + tiles = { + {name = "gray.png"}, + { + name = "puddle_animated2.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 2.0, + }, + }, + {name = "0003.png"}, + {name = "0002.png"}, + {name = "0001.png"}, + {name = "null.png"}, + }, drawtype = "mesh", mesh = "stargate.obj", - visual_scale = 3.0, + visual_scale = 3.0, groups = sg_groups, drop="stargate:gatenode_off", paramtype2 = "facedir", @@ -223,9 +152,7 @@ minetest.register_node("stargate:gatenode_on",{ selection_box = sg_selection_box, collision_box = sg_collision_box, can_dig = gateCanDig, - on_destruct = function (pos) - removeGate(pos) - end, + on_destruct = removeGate, on_rightclick=stargate.gateFormspecHandler, }) @@ -233,29 +160,27 @@ minetest.register_node("stargate:gatenode_off",{ description = "Stargate", inventory_image = "stargate.png", wield_image = "stargate.png", - tiles = { - {name = "gray.png"}, - {name = "null.png"}, - {name = "0003.png"}, - {name = "0002.png"}, - {name = "0001.png"}, - {name = "null.png"}, - }, + tiles = { + {name = "gray.png"}, + {name = "null.png"}, + {name = "0003.png"}, + {name = "0002.png"}, + {name = "0001.png"}, + {name = "null.png"}, + }, groups = sg_groups1, paramtype2 = "facedir", paramtype = "light", drawtype = "mesh", mesh = "stargate.obj", - visual_scale = 3.0, + visual_scale = 3.0, selection_box = sg_selection_box, collision_box = sg_collision_box, can_dig = gateCanDig, - on_destruct = function (pos) - removeGate(pos) - end, + on_destruct = removeGate, on_place = function(itemstack, placer, pointed_thing) local pos = pointed_thing.above - if placeGate(placer,pos)==true then + if placeGate(placer,pos)==true then itemstack:take_item(1) return itemstack else @@ -269,27 +194,29 @@ minetest.register_abm({ nodenames = {"stargate:gatenode_on"}, interval = 1, chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local meta = core.get_meta(pos) - for _,object in ipairs(core.get_objects_inside_radius(pos, 1)) do - if object:is_player() then + action = function(pos) + --local owner + for _,object in pairs(core.get_objects_inside_radius(pos, 1)) do + if object:is_player() then local player_name = object:get_player_name() - local owner=meta:get_string("owner") - local gate=stargate.findGate (pos) - if gate==nil then print("Gate is not registered!") return end - local pos1={} - pos1.x=gate["destination"].x - pos1.y=gate["destination"].y - pos1.z=gate["destination"].z - local dest_gate=stargate.findGate (pos1) - if dest_gate==nil then - gate["destination"]=nil - deactivateGate(pos) - stargate.save_data(owner) + local gate = stargate.findGate(pos) + if not gate then + print("Gate is not registered!") return end - if player_name~=owner and gate["type"]=="private" then return end - local dir1=gate["destination_dir"] + --owner = owner or core.get_meta(pos):get_string("owner") + if gate.type == "private" + and player_name ~= core.get_meta(pos):get_string("owner") then + return + end + local pos1 = vector.new(gate.destination) + if not stargate.findGate(pos1) then + gate.destination = nil + stargate.deactivateGate(pos) + stargate.save_data(core.get_meta(pos):get_string("owner")) + return + end + local dir1 = gate.destination_dir local dest_angle if dir1 == 0 then pos1.z = pos1.z-2 @@ -306,8 +233,8 @@ minetest.register_abm({ end object:moveto(pos1,false) object:set_look_yaw(math.rad(dest_angle)) - core.sound_play("enterEventHorizon", {pos = pos, gain = 1.0,loop = false, max_hear_distance = 72,}) + core.sound_play("enterEventHorizon", {pos = pos, max_hear_distance = 72}) end end end -}) +}) diff --git a/stargate_gui.lua b/stargate_gui.lua index 51404ea..104ad20 100644 --- a/stargate_gui.lua +++ b/stargate_gui.lua @@ -63,15 +63,16 @@ minetest.register_on_joinplayer(function(player) stargate.save_data("registered_players") stargate.save_data(player_name) end - stargate_network["players"][player_name]={} - stargate_network["players"][player_name]["formspec"]="" - stargate_network["players"][player_name]["current_page"]=stargate.default_page - stargate_network["players"][player_name]["own_gates"]={} - stargate_network["players"][player_name]["own_gates_count"]=0 - stargate_network["players"][player_name]["public_gates"]={} - stargate_network["players"][player_name]["public_gates_count"]=0 - stargate_network["players"][player_name]["current_index"]=0 - stargate_network["players"][player_name]["temp_gate"]={} + stargate_network["players"][player_name]={ + formspec = "", + current_page = stargate.default_page, + own_gates ={}, + own_gates_count =0, + public_gates ={}, + public_gates_count =0, + current_index =0, + temp_gate ={}, + } end) stargate.registerGate = function(player_name,pos,dir) @@ -103,14 +104,13 @@ stargate.unregisterGate = function(player_name,pos) end stargate.findGate = function(pos) - for __,tab in ipairs(stargate_network["registered_players"]) do - local player_name=tab["player_name"] + for _,tab in pairs(stargate_network.registered_players) do + local player_name=tab.player_name if type(stargate_network[player_name])=="table" then - for __,gates in ipairs(stargate_network[player_name]) do - if gates then - if gates["pos"].x==pos.x and gates["pos"].y==pos.y and gates["pos"].z==pos.z then - return gates - end + for _,gates in pairs(stargate_network[player_name]) do + if gates + and vector.equals(gates.pos, pos) then + return gates end end end @@ -121,7 +121,7 @@ end --show formspec to player stargate.gateFormspecHandler = function(pos, node, clicker, itemstack) local player_name = clicker:get_player_name() - local meta = minetest.env:get_meta(pos) + local meta = minetest.get_meta(pos) local owner=meta:get_string("owner") if player_name~=owner then return end local current_gate=nil @@ -145,7 +145,7 @@ stargate.gateFormspecHandler = function(pos, node, clicker, itemstack) local temp=tab["player_name"] if type(stargate_network[temp])=="table" and temp~=player_name then for __,gates in ipairs(stargate_network[temp]) do - if gates["type"]=="public" then + if gates["type"]=="public" then public_gates_count=public_gates_count+1 table.insert(stargate_network["players"][player_name]["public_gates"],gates) end @@ -154,7 +154,7 @@ stargate.gateFormspecHandler = function(pos, node, clicker, itemstack) end -- print(dump(stargate_network["players"][player_name]["public_gates"])) - if current_gate==nil then + if current_gate == nil then print ("Gate not registered in network! Please remove it and place once again.") return nil end @@ -165,7 +165,7 @@ stargate.gateFormspecHandler = function(pos, node, clicker, itemstack) stargate_network["players"][player_name]["temp_gate"]["pos"].x=current_gate["pos"].x stargate_network["players"][player_name]["temp_gate"]["pos"].y=current_gate["pos"].y stargate_network["players"][player_name]["temp_gate"]["pos"].z=current_gate["pos"].z - if current_gate["destination"] then + if current_gate["destination"] then stargate_network["players"][player_name]["temp_gate"]["destination_description"]=current_gate["destination_description"] stargate_network["players"][player_name]["temp_gate"]["destination_dir"]=current_gate["destination_dir"] stargate_network["players"][player_name]["temp_gate"]["destination"]={} @@ -196,7 +196,7 @@ stargate.get_formspec = function(player_name,page) formspec = formspec.."label[4,.5;Type: "..temp_gate["type"].."]" formspec = formspec.."image_button[6.5,.6;.6,.6;pencil_icon.png;edit_desc;]" formspec = formspec.."label[0,1.1;Destination: ]" - if temp_gate["destination"] then + if temp_gate["destination"] then formspec = formspec.."label[2.5,1.1;("..temp_gate["destination"].x.."," ..temp_gate["destination"].y.."," ..temp_gate["destination"].z..") " @@ -217,11 +217,11 @@ stargate.get_formspec = function(player_name,page) formspec = formspec.."image_button[6.5,.6;.6,.6;ok_icon.png;save_desc;]" formspec = formspec.."field[7.3,.7;5,1;desc_box;Edit gate description:;"..temp_gate["description"].."]" end - + local list_index=stargate_network["players"][player_name]["current_index"] local page=math.floor(list_index / 24 + 1) local pagemax - if stargate_network["players"][player_name]["dest_type"] == "own" then + if stargate_network["players"][player_name]["dest_type"] == "own" then pagemax = math.floor((stargate_network["players"][player_name]["own_gates_count"] / 24) + 1) local x,y for y=0,7,1 do @@ -267,7 +267,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local formspec if fields.toggle_type then - if temp_gate["type"] == "private" then + if temp_gate["type"] == "private" then temp_gate["type"] = "public" else temp_gate["type"] = "private" end stargate_network["players"][player_name]["current_index"]=0 @@ -278,7 +278,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) return end if fields.toggle_dest_type then - if stargate_network["players"][player_name]["dest_type"] == "own" then + if stargate_network["players"][player_name]["dest_type"] == "own" then stargate_network["players"][player_name]["dest_type"] = "all public" else stargate_network["players"][player_name]["dest_type"] = "own" end stargate_network["players"][player_name]["current_index"] = 0 @@ -304,12 +304,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) minetest.sound_play("click", {to_player=player_name, gain = 0.5}) return end - + -- page controls local start=math.floor(stargate_network["players"][player_name]["current_index"]/24 +1 ) local start_i=start local pagemax = math.floor(((stargate_network["players"][player_name]["own_gates_count"]-1) / 24) + 1) - + if fields.page_left then minetest.sound_play("paperflip2", {to_player=player_name, gain = 1.0}) start_i = start_i - 1 @@ -323,7 +323,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if fields.page_right then minetest.sound_play("paperflip2", {to_player=player_name, gain = 1.0}) - start_i = start_i + 1 + start_i = start_i + 1 if start_i > pagemax then start_i = pagemax end if not (start_i == start) then stargate_network["players"][player_name]["current_index"] = (start_i-1)*24 @@ -344,7 +344,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if fields.save_changes then minetest.sound_play("click", {to_player=player_name, gain = 0.5}) - local meta = minetest.env:get_meta(temp_gate["pos"]) + local meta = minetest.get_meta(temp_gate["pos"]) local infotext="" current_gate["type"]=temp_gate["type"] current_gate["description"]=temp_gate["description"] @@ -353,7 +353,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) current_gate["pos"].y=temp_gate["pos"].y current_gate["pos"].z=temp_gate["pos"].z current_gate["dest"]=temp_gate["dest"] - if temp_gate["destination"] then + if temp_gate["destination"] then current_gate["destination"]={} current_gate["destination"].x=temp_gate["destination"].x current_gate["destination"].y=temp_gate["destination"].y @@ -363,15 +363,16 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) else current_gate["destination"]=nil end - if current_gate["destination"] then - activateGate (current_gate["pos"]) + if current_gate["destination"] then + stargate.activateGate (current_gate.pos) + --stargate.activateGate (current_gate.destination) else - deactivateGate (current_gate["pos"]) + stargate.deactivateGate (current_gate["pos"]) end if current_gate["type"]=="private" then infotext="Private" else infotext="Public" end infotext=infotext.." Gate: "..current_gate["description"].."\n" infotext=infotext.."Owned by "..player_name.."\n" - if current_gate["destination"] then + if current_gate["destination"] then infotext=infotext.."Destination: ("..current_gate["destination"].x..","..current_gate["destination"].y..","..current_gate["destination"].z..") " infotext=infotext..current_gate["destination_description"] end @@ -389,7 +390,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local i for i=0,23,1 do local button="list_button"..i+list_index - if fields[button] then + if fields[button] then minetest.sound_play("click", {to_player=player_name, gain = 1.0}) local gate=stargate_network["players"][player_name]["temp_gate"] local dest_gate