summaryrefslogtreecommitdiff
path: root/callbuttons.lua
diff options
context:
space:
mode:
Diffstat (limited to 'callbuttons.lua')
-rw-r--r--callbuttons.lua96
1 files changed, 55 insertions, 41 deletions
diff --git a/callbuttons.lua b/callbuttons.lua
index 7e19de6..84ccf12 100644
--- a/callbuttons.lua
+++ b/callbuttons.lua
@@ -1,5 +1,7 @@
celevator.callbutton = {}
+local S = core.get_translator("celevator")
+
local function makebuttontex(dir,upon,downon,inventory)
local tex = "[combine:64x64"..
":0,0=celevator_cabinet_sides.png"..
@@ -42,52 +44,57 @@ local function makebuttontex(dir,upon,downon,inventory)
return(tex)
end
+local upname = S("Elevator Up Call Button")
+local dnname = S("Elevator Down Call Button")
+local bothname = S("Elevator Up and Down Call Buttons")
+local onname = S("Elevator Call Button (on state - you hacker you!)")
+
local validstates = {
- {"up",false,false,"Up"},
- {"up",true,false,"Up"},
- {"down",false,false,"Down"},
- {"down",false,true,"Down"},
- {"both",false,false,"Up and Down"},
- {"both",true,false,"Up and Down"},
- {"both",false,true,"Up and Down"},
- {"both",true,true,"Up and Down"},
+ {"up",false,false,upname},
+ {"up",true,false,onname},
+ {"down",false,false,dnname},
+ {"down",false,true,onname},
+ {"both",false,false,bothname},
+ {"both",true,false,onname},
+ {"both",false,true,onname},
+ {"both",true,true,onname},
}
function celevator.callbutton.setlight(pos,dir,newstate)
local node = celevator.get_node(pos)
- if minetest.get_item_group(node.name,"_celevator_callbutton") ~= 1 then return end
+ if core.get_item_group(node.name,"_celevator_callbutton") ~= 1 then return end
if dir == "up" then
- if minetest.get_item_group(node.name,"_celevator_callbutton_has_up") ~= 1 then return end
- local lit = minetest.get_item_group(node.name,"_celevator_callbutton_up_lit") == 1
+ if core.get_item_group(node.name,"_celevator_callbutton_has_up") ~= 1 then return end
+ local lit = core.get_item_group(node.name,"_celevator_callbutton_up_lit") == 1
if lit == newstate then return end
local newname = "celevator:callbutton_"
- if minetest.get_item_group(node.name,"_celevator_callbutton_has_down") == 1 then
+ if core.get_item_group(node.name,"_celevator_callbutton_has_down") == 1 then
newname = newname.."both"
else
newname = newname.."up"
end
if newstate then newname = newname.."_upon" end
- if minetest.get_item_group(node.name,"_celevator_callbutton_down_lit") == 1 then
+ if core.get_item_group(node.name,"_celevator_callbutton_down_lit") == 1 then
newname = newname.."_downon"
end
node.name = newname
- minetest.swap_node(pos,node)
+ core.swap_node(pos,node)
elseif dir == "down" then
- if minetest.get_item_group(node.name,"_celevator_callbutton_has_down") ~= 1 then return end
- local lit = minetest.get_item_group(node.name,"_celevator_callbutton_down_lit") == 1
+ if core.get_item_group(node.name,"_celevator_callbutton_has_down") ~= 1 then return end
+ local lit = core.get_item_group(node.name,"_celevator_callbutton_down_lit") == 1
if lit == newstate then return end
local newname = "celevator:callbutton_"
- if minetest.get_item_group(node.name,"_celevator_callbutton_has_up") == 1 then
+ if core.get_item_group(node.name,"_celevator_callbutton_has_up") == 1 then
newname = newname.."both"
else
newname = newname.."down"
end
- if minetest.get_item_group(node.name,"_celevator_callbutton_up_lit") == 1 then
+ if core.get_item_group(node.name,"_celevator_callbutton_up_lit") == 1 then
newname = newname.."_upon"
end
if newstate then newname = newname.."_downon" end
node.name = newname
- minetest.swap_node(pos,node)
+ core.swap_node(pos,node)
end
end
@@ -97,13 +104,13 @@ local function disambiguatedir(pos,player)
local lookdir = player:get_look_dir()
local distance = vector.distance(eyepos,pos)
local endpos = vector.add(eyepos,vector.multiply(lookdir,distance+1))
- local ray = minetest.raycast(eyepos,endpos,true,false)
+ local ray = core.raycast(eyepos,endpos,true,false)
local pointed,button,hitpos
repeat
pointed = ray:next()
if pointed and pointed.type == "node" then
- local node = minetest.get_node(pointed.under)
- if node.name and (minetest.get_item_group(node.name,"_celevator_callbutton") == 1) then
+ local node = core.get_node(pointed.under)
+ if node.name and (core.get_item_group(node.name,"_celevator_callbutton") == 1) then
button = pointed.under
hitpos = vector.subtract(pointed.intersection_point,button)
end
@@ -134,8 +141,8 @@ for _,state in ipairs(validstates) do
light = light + 5
end
local idle = not (state[2] or state[3])
- local description = string.format("Elevator %s Call Button%s%s",state[4],(state[1] == "both" and "s" or ""),(idle and "" or " (on state, you hacker you!)"))
- minetest.register_node(nname,{
+ local description = state[4]
+ core.register_node(nname,{
description = description,
groups = {
dig_immediate = 2,
@@ -167,45 +174,52 @@ for _,state in ipairs(validstates) do
},
},
after_place_node = function(pos)
- local meta = minetest.get_meta(pos)
- meta:set_string("formspec","formspec_version[7]size[8,5]field[0.5,0.5;7,1;carid;Car ID;]field[0.5,2;7,1;landing;Landing Number;]button[3,3.5;2,1;save;Save]")
+ local meta = core.get_meta(pos)
+ local idmsg = S("Car ID")
+ local landingmsg = S("Landing Number")
+ local savemsg = S("Save")
+ local fs = "formspec_version[7]size[8,5]"
+ fs = fs.."field[0.5,0.5;7,1;carid;"..idmsg..";]"
+ fs = fs.."field[0.5,2;7,1;landing;"..landingmsg..";]"
+ fs = fs.."button[3,3.5;2,1;save;"..savemsg.."]"
+ meta:set_string("formspec",fs)
end,
on_receive_fields = function(pos,_,fields)
if tonumber(fields.carid) and tonumber(fields.landing) then
local carid = tonumber(fields.carid)
- local carinfo = minetest.deserialize(celevator.storage:get_string(string.format("car%d",carid)))
+ local carinfo = core.deserialize(celevator.storage:get_string(string.format("car%d",carid)))
if not carinfo then return end
table.insert(carinfo.callbuttons,{pos=pos,landing=tonumber(fields.landing)})
- celevator.storage:set_string(string.format("car%d",carid),minetest.serialize(carinfo))
- local meta = minetest.get_meta(pos)
+ celevator.storage:set_string(string.format("car%d",carid),core.serialize(carinfo))
+ local meta = core.get_meta(pos)
meta:set_int("carid",carid)
meta:set_int("landing",tonumber(fields.landing))
meta:set_string("formspec","")
end
end,
on_destruct = function(pos)
- local meta = minetest.get_meta(pos)
+ local meta = core.get_meta(pos)
local carid = meta:get_int("carid")
if carid == 0 then return end
- local carinfo = minetest.deserialize(celevator.storage:get_string(string.format("car%d",carid)))
+ local carinfo = core.deserialize(celevator.storage:get_string(string.format("car%d",carid)))
if not carinfo then return end
for i,button in pairs(carinfo.callbuttons) do
if vector.equals(pos,button.pos) then
table.remove(carinfo.callbuttons,i)
- celevator.storage:set_string(string.format("car%d",carid),minetest.serialize(carinfo))
+ celevator.storage:set_string(string.format("car%d",carid),core.serialize(carinfo))
end
end
end,
on_rightclick = function(pos,_,clicker)
- local meta = minetest.get_meta(pos)
+ local meta = core.get_meta(pos)
local carid = meta:get_int("carid")
if carid == 0 then return end
- local carinfo = minetest.deserialize(celevator.storage:get_string(string.format("car%d",carid)))
+ local carinfo = core.deserialize(celevator.storage:get_string(string.format("car%d",carid)))
if not carinfo then return end
local controllerpos = carinfo.controllerpos or carinfo.dispatcherpos
local isdispatcher = carinfo.dispatcherpos
if not controllerpos then return end
- local controllermeta = minetest.get_meta(controllerpos)
+ local controllermeta = core.get_meta(controllerpos)
if controllermeta:get_int("carid") ~= carid then return end
local landing = meta:get_int("landing")
if state[1] == "up" then
@@ -240,24 +254,24 @@ for _,state in ipairs(validstates) do
})
end
-minetest.register_abm({
+core.register_abm({
label = "Check call buttons for missing/replaced controllers",
nodenames = {"group:_celevator_callbutton",},
interval = 15,
chance = 1,
action = function(pos)
- local meta = minetest.get_meta(pos)
+ local meta = core.get_meta(pos)
local carid = meta:get_int("carid")
if not (carid and carid > 0) then return end --Not set up yet
- local carinfo = minetest.deserialize(celevator.storage:get_string("car"..carid))
+ local carinfo = core.deserialize(celevator.storage:get_string("car"..carid))
if not carinfo then
- meta:set_string("infotext","Error reading car information!\nPlease remove and replace this node.")
+ meta:set_string("infotext",S("Error reading car information!\nPlease remove and replace this node."))
return
end
local iscontroller = (carinfo.controllerpos and celevator.controller.iscontroller(carinfo.controllerpos))
local isdispatcher = (carinfo.dispatcherpos and celevator.dispatcher.isdispatcher(carinfo.dispatcherpos))
if not (iscontroller or isdispatcher) then
- meta:set_string("infotext","Controller/dispatcher is missing!\nPlease remove and replace this node.")
+ meta:set_string("infotext",S("Controller/dispatcher is missing!\nPlease remove and replace this node."))
return
end
local metacarid = 0
@@ -267,7 +281,7 @@ minetest.register_abm({
metacarid = celevator.get_meta(carinfo.dispatcherpos):get_int("carid")
end
if metacarid ~= carid then
- meta:set_string("infotext","Controller/dispatcher found but with incorrect ID!\nPlease remove and replace this node.")
+ meta:set_string("infotext",S("Controller/dispatcher found but with incorrect ID!\nPlease remove and replace this node."))
end
end,
})