celevator-cd2025/doors.lua
cheapie 6c908698d7 Add nudging
Timer can be edited from the parameters menu, entering 0 disables nudging
2024-05-10 21:00:30 -05:00

754 lines
23 KiB
Lua

celevator.doors = {}
celevator.doors.erefs = {}
local function placesill(pos,node)
local erefs = minetest.get_objects_inside_radius(pos,0.5)
for _,ref in pairs(erefs) do
if ref:get_luaentity() and ref:get_luaentity().name == "celevator:door_sill" then return end
end
local yaw = minetest.dir_to_yaw(minetest.fourdir_to_dir(node.param2))
local entity = minetest.add_entity(pos,"celevator:door_sill")
if node.name == "celevator:hwdoor_slow_glass_bottom" then
entity:set_properties({
wield_item = "celevator:door_sill_double",
})
end
entity:set_yaw(yaw)
end
minetest.register_node("celevator:hwdoor_fast_glass_bottom",{
description = "Glass Hoistway Door (fast, bottom - you hacker you!)",
tiles = {
"celevator_transparent.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_topbottom.png^[transformFY",
"celevator_door_glass_topbottom.png^[transformFY",
},
groups = {
not_in_creative_inventory = 1,
_celevator_hwdoor_root = 1,
oddly_breakable_by_hand = 2,
},
drop = "celevator:hwdoor_glass",
paramtype = "light",
paramtype2 = "4dir",
drawtype = "nodebox",
use_texture_alpha = "clip",
node_box = {
type = "fixed",
fixed = {
{-0.5,-0.5,0.4,0.5,0.5,0.5},
},
},
after_dig_node = function(pos,node)
local erefs = minetest.get_objects_inside_radius(pos,1.5)
for _,ref in pairs(erefs) do
if ref:get_luaentity() and ref:get_luaentity().name == "celevator:door_sill" then ref:remove() end
end
local facedir = minetest.dir_to_yaw(minetest.fourdir_to_dir(node.param2))
local xnames = {
[0] = "fast",
[1] = "slow",
}
local ynames = {
[0] = "bottom",
[1] = "middle",
[2] = "top",
}
for x=0,1,1 do
for y=0,2,1 do
local piecename = string.format("celevator:hwdoor_%s_glass_%s",xnames[x],ynames[y])
local pieceoffset = vector.new(x,y,0)
local piecepos = vector.add(pos,vector.rotate_around_axis(pieceoffset,vector.new(0,1,0),facedir))
if minetest.get_node(piecepos).name == piecename then minetest.remove_node(piecepos) end
end
end
end,
})
minetest.register_node("celevator:hwdoor_fast_glass_middle",{
description = "Glass Hoistway Door (fast, middle - you hacker you!)",
tiles = {
"celevator_transparent.png",
"celevator_transparent.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_middle.png",
"celevator_door_glass_middle.png",
},
groups = {
not_in_creative_inventory = 1,
},
drop = "",
paramtype = "light",
paramtype2 = "4dir",
drawtype = "nodebox",
use_texture_alpha = "clip",
node_box = {
type = "fixed",
fixed = {
{-0.5,-0.5,0.4,0.5,0.5,0.5},
},
},
})
minetest.register_node("celevator:hwdoor_fast_glass_top",{
description = "Glass Hoistway Door (fast, top - you hacker you!)",
tiles = {
"celevator_door_glass_edge.png",
"celevator_transparent.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_topbottom.png",
"celevator_door_glass_topbottom.png",
},
groups = {
not_in_creative_inventory = 1,
},
drop = "",
paramtype = "light",
paramtype2 = "4dir",
drawtype = "nodebox",
use_texture_alpha = "clip",
node_box = {
type = "fixed",
fixed = {
{-0.5,-0.5,0.4,0.5,0.5,0.5},
},
},
})
minetest.register_node("celevator:hwdoor_slow_glass_bottom",{
description = "Glass Hoistway Door (slow, bottom - you hacker you!)",
tiles = {
"celevator_transparent.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_topbottom.png^[transformFY",
"celevator_door_glass_topbottom.png^[transformFY",
},
groups = {
not_in_creative_inventory = 1,
},
drop = "",
paramtype = "light",
paramtype2 = "4dir",
drawtype = "nodebox",
use_texture_alpha = "clip",
node_box = {
type = "fixed",
fixed = {
{-0.5,-0.5,0.3,0.5,0.5,0.4},
},
},
})
minetest.register_node("celevator:hwdoor_slow_glass_middle",{
description = "Glass Hoistway Door (slow, middle - you hacker you!)",
tiles = {
"celevator_transparent.png",
"celevator_transparent.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_middle.png",
"celevator_door_glass_middle.png",
},
groups = {
not_in_creative_inventory = 1,
},
drop = "",
paramtype = "light",
paramtype2 = "4dir",
drawtype = "nodebox",
use_texture_alpha = "clip",
node_box = {
type = "fixed",
fixed = {
{-0.5,-0.5,0.3,0.5,0.5,0.4},
},
},
})
minetest.register_node("celevator:hwdoor_slow_glass_top",{
description = "Glass Hoistway Door (slow, top - you hacker you!)",
tiles = {
"celevator_door_glass_edge.png",
"celevator_transparent.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_edge.png",
"celevator_door_glass_topbottom.png",
"celevator_door_glass_topbottom.png",
},
groups = {
not_in_creative_inventory = 1,
},
drop = "",
paramtype = "light",
paramtype2 = "4dir",
drawtype = "nodebox",
use_texture_alpha = "clip",
node_box = {
type = "fixed",
fixed = {
{-0.5,-0.5,0.3,0.5,0.5,0.4},
},
},
})
minetest.register_node("celevator:hwdoor_placeholder",{
description = "Hoistway Door Open-State Placeholder (you hacker you!)",
groups = {
not_in_creative_inventory = 1,
},
tiles = {
"celevator_transparent.png",
},
drop = "",
paramtype = "light",
paramtype2 = "4dir",
drawtype = "airlike",
collision_box = {
type = "fixed",
fixed = {
{0,0,0,0,0,0}
}
},
selection_box = {
type = "fixed",
fixed = {
{0,0,0,0,0,0}
}
},
})
minetest.register_entity("celevator:hwdoor_moving",{
initial_properties = {
visual = "wielditem",
visual_size = vector.new(0.667,0.667,0.667),
wield_item = "default:dirt",
static_save = false,
pointable = false,
},
})
function celevator.doors.hwopen(pos,drivepos)
local hwdoors_moving = minetest.deserialize(celevator.storage:get_string("hwdoors_moving")) or {}
local hash = minetest.hash_node_position(pos)
if not hwdoors_moving[hash] then
local param2 = celevator.get_node(pos).param2
local fdir = minetest.fourdir_to_dir(param2)
local otherpanel = vector.add(pos,vector.rotate_around_axis(fdir,vector.new(0,1,0),-math.pi/2))
local positions = {
pos,
vector.add(pos,vector.new(0,1,0)),
vector.add(pos,vector.new(0,2,0)),
otherpanel,
vector.add(otherpanel,vector.new(0,1,0)),
vector.add(otherpanel,vector.new(0,2,0)),
}
local oldnodes = {}
for i,position in ipairs(positions) do
oldnodes[i] = celevator.get_node(position)
end
local erefs = celevator.drives.entity.nodestoentities(positions,"celevator:hwdoor_moving")
hwdoors_moving[hash] = {
direction = "open",
positions = positions,
nodes = oldnodes,
time = 0,
opendir = vector.rotate_around_axis(fdir,vector.new(0,1,0),-math.pi/2),
drivepos = drivepos,
param2 = param2,
}
celevator.doors.erefs[hash] = erefs
celevator.storage:set_string("hwdoors_moving",minetest.serialize(hwdoors_moving))
minetest.set_node(pos,{name="celevator:hwdoor_placeholder",param2=param2})
local pmeta = celevator.get_meta(pos)
pmeta:set_string("data",minetest.serialize(hwdoors_moving[hash]))
pmeta:set_string("state","opening")
local carpos = vector.add(pos,fdir)
if celevator.get_node(carpos).name == "celevator:car_000" then
celevator.doors.caropen(carpos)
end
elseif hwdoors_moving[hash].direction == "close" then
hwdoors_moving[hash].direction = "open"
hwdoors_moving[hash].time = math.pi-hwdoors_moving[hash].time
celevator.storage:set_string("hwdoors_moving",minetest.serialize(hwdoors_moving))
local fdir = minetest.fourdir_to_dir(hwdoors_moving[hash].param2)
local carpos = vector.add(pos,fdir)
if celevator.get_node(carpos).name == "celevator:car_000" then
celevator.doors.caropen(carpos)
end
minetest.set_node(pos,{name="celevator:hwdoor_placeholder",param2=hwdoors_moving[hash].param2})
local pmeta = celevator.get_meta(pos)
pmeta:set_string("data",minetest.serialize(hwdoors_moving[hash]))
pmeta:set_string("state","opening")
end
end
function celevator.doors.hwclose(pos,drivepos,nudge)
local hwdoors_moving = minetest.deserialize(celevator.storage:get_string("hwdoors_moving")) or {}
local hash = minetest.hash_node_position(pos)
if hwdoors_moving[hash] then
return
end
local pmeta = celevator.get_meta(pos)
local state = pmeta:get_string("state")
if state ~= "open" then return end
local fdir = minetest.fourdir_to_dir(celevator.get_node(pos).param2)
local carpos = vector.add(pos,fdir)
if celevator.get_node(carpos).name == "celevator:car_000" then
celevator.doors.carclose(carpos,nudge)
end
local data = minetest.deserialize(pmeta:get_string("data"))
if not data then return end
for i=1,6,1 do
minetest.set_node(data.positions[i],data.nodes[i])
end
data.direction = "close"
data.time = 0
data.drivepos = drivepos
data.nudging = nudge
local erefs = celevator.drives.entity.nodestoentities(data.positions,"celevator:hwdoor_moving")
local foffset = vector.multiply(data.opendir,2)
local soffset = data.opendir
for i=1,3,1 do
erefs[i]:set_pos(vector.add(erefs[i]:get_pos(),foffset))
end
for i=4,6,1 do
erefs[i]:set_pos(vector.add(erefs[i]:get_pos(),soffset))
end
celevator.doors.erefs[hash] = erefs
hwdoors_moving[hash] = data
celevator.storage:set_string("hwdoors_moving",minetest.serialize(hwdoors_moving))
end
function celevator.doors.hwstep(dtime)
local hwdoors_moving = minetest.deserialize(celevator.storage:get_string("hwdoors_moving")) or {}
local save = false
for hash,data in pairs(hwdoors_moving) do
save = true
local present = celevator.doors.erefs[hash]
if present then
for i=1,6,1 do
if not celevator.doors.erefs[hash][i]:get_pos() then
present = false
break
end
end
end
if present then
if data.direction == "open" then
data.time = data.time+dtime
local vel = math.sin(data.time)
for i=1,3,1 do
celevator.doors.erefs[hash][i]:set_velocity(vector.multiply(data.opendir,vel))
end
for i=4,6,1 do
celevator.doors.erefs[hash][i]:set_velocity(vector.multiply(data.opendir,vel/2))
end
if data.time >= math.pi then
for i=1,6,1 do
celevator.doors.erefs[hash][i]:remove()
end
celevator.get_meta(data.positions[1]):set_string("state","open")
if hwdoors_moving[hash].drivepos then celevator.get_meta(hwdoors_moving[hash].drivepos):set_string("doorstate","open") end
hwdoors_moving[hash] = nil
end
elseif data.direction == "close" then
local speed = 0.66
if data.nudging then speed = 0.2 end
data.time = data.time+(speed*dtime)
local vel = math.sin(data.time)
for i=1,3,1 do
celevator.doors.erefs[hash][i]:set_velocity(vector.multiply(data.opendir,vel*-speed))
end
for i=4,6,1 do
celevator.doors.erefs[hash][i]:set_velocity(vector.multiply(data.opendir,vel/2*-speed))
end
if data.time >= math.pi then
for i=1,6,1 do
celevator.doors.erefs[hash][i]:set_pos(data.positions[i])
end
celevator.drives.entity.entitiestonodes(celevator.doors.erefs[hash])
if hwdoors_moving[hash].drivepos then celevator.get_meta(hwdoors_moving[hash].drivepos):set_string("doorstate","closed") end
hwdoors_moving[hash] = nil
end
end
else
if data.direction == "open" then
for i=1,6,1 do
if celevator.doors.erefs[hash] then
celevator.doors.erefs[hash][i]:remove()
end
end
celevator.get_meta(data.positions[1]):set_string("state","open")
if hwdoors_moving[hash].drivepos then celevator.get_meta(hwdoors_moving[hash].drivepos):set_string("doorstate","open") end
hwdoors_moving[hash] = nil
elseif data.direction == "close" then
for i=1,6,1 do
minetest.set_node(data.positions[i],data.nodes[i])
end
celevator.get_meta(data.positions[1]):set_string("state","closed")
if hwdoors_moving[hash].drivepos then celevator.get_meta(hwdoors_moving[hash].drivepos):set_string("doorstate","closed") end
hwdoors_moving[hash] = nil
end
end
end
if save then
celevator.storage:set_string("hwdoors_moving",minetest.serialize(hwdoors_moving))
end
end
minetest.register_globalstep(celevator.doors.hwstep)
function celevator.doors.carstep(dtime)
local cardoors_moving = minetest.deserialize(celevator.storage:get_string("cardoors_moving")) or {}
local save = false
for hash,data in pairs(cardoors_moving) do
save = true
local present = celevator.doors.erefs[hash]
if present then
for i=1,6,1 do
if not (celevator.doors.erefs[hash][i] and celevator.doors.erefs[hash][i]:get_pos()) then
present = false
break
end
end
end
if present then
if data.direction == "open" then
data.time = data.time+dtime
local vel = math.sin(data.time)
for i=1,3,1 do
celevator.doors.erefs[hash][i]:set_velocity(vector.multiply(data.opendir,vel))
end
for i=4,6,1 do
celevator.doors.erefs[hash][i]:set_velocity(vector.multiply(data.opendir,vel/2))
end
if data.time >= math.pi then
for i=1,6,1 do
celevator.doors.erefs[hash][i]:remove()
end
celevator.get_meta(data.positions[1]):set_string("doorstate","open")
cardoors_moving[hash] = nil
end
elseif data.direction == "close" then
local speed = 0.66
if data.nudging then speed = 0.2 end
data.time = data.time+(speed*dtime)
local vel = math.sin(data.time)
for i=1,3,1 do
celevator.doors.erefs[hash][i]:set_velocity(vector.multiply(data.opendir,vel*-speed))
end
for i=4,6,1 do
celevator.doors.erefs[hash][i]:set_velocity(vector.multiply(data.opendir,vel/2*-speed))
end
if data.time >= math.pi then
for _,ref in ipairs(celevator.doors.erefs[hash]) do
ref:set_velocity(vector.new(0,0,0))
end
celevator.get_meta(data.positions[1]):set_string("doorstate","closed")
cardoors_moving[hash] = nil
local cartimer = minetest.get_node_timer(data.positions[1])
cartimer:stop()
end
end
else
if data.direction == "open" then
for i=1,6,1 do
if celevator.doors.erefs[hash] and celevator.doors.erefs[hash][i] then
celevator.doors.erefs[hash][i]:remove()
end
end
celevator.get_meta(data.positions[1]):set_string("doorstate","open")
cardoors_moving[hash] = nil
elseif data.direction == "close" then
local fdir = minetest.fourdir_to_dir(celevator.get_node(data.positions[1]).param2)
celevator.doors.spawncardoors(data.positions[1],vector.rotate_around_axis(fdir,vector.new(0,1,0),math.pi))
celevator.get_meta(data.positions[1]):set_string("doorstate","closed")
cardoors_moving[hash] = nil
end
end
end
if save then
celevator.storage:set_string("cardoors_moving",minetest.serialize(cardoors_moving))
end
end
minetest.register_globalstep(celevator.doors.carstep)
minetest.register_entity("celevator:car_door",{
initial_properties = {
visual = "wielditem",
visual_size = vector.new(0.667,0.667,0.667),
wield_item = "default:dirt",
static_save = false,
pointable = false,
glow = minetest.LIGHT_MAX,
},
})
function celevator.doors.spawncardoors(pos,dir)
local refs = {}
for x=2,1,-1 do
for y=1,3,1 do
local yaw = minetest.dir_to_yaw(dir)+math.pi
local doorpos = vector.add(pos,vector.rotate_around_axis(vector.new(x-2,y-1,0),vector.new(0,1,0),yaw))
local xnames = {"slow","fast"}
local ynames = {"bottom","middle","top"}
local nname = string.format("celevator:hwdoor_%s_glass_%s",xnames[x],ynames[y])
local ref = minetest.add_entity(doorpos,"celevator:car_door")
ref:set_yaw(yaw)
ref:set_properties({
wield_item = nname,
})
table.insert(refs,ref)
end
end
return refs
end
function celevator.doors.caropen(pos)
local cardoors_moving = minetest.deserialize(celevator.storage:get_string("cardoors_moving")) or {}
local hash = minetest.hash_node_position(pos)
local cartimer = minetest.get_node_timer(pos)
cartimer:start(0.25)
if not cardoors_moving[hash] then
local fdir = minetest.fourdir_to_dir(celevator.get_node(pos).param2)
local otherpanel = vector.add(pos,vector.rotate_around_axis(fdir,vector.new(0,1,0),-math.pi/2))
local positions = {
pos,
vector.add(pos,vector.new(0,1,0)),
vector.add(pos,vector.new(0,2,0)),
otherpanel,
vector.add(otherpanel,vector.new(0,1,0)),
vector.add(otherpanel,vector.new(0,2,0)),
}
local erefs = {}
for _,dpos in ipairs(positions) do
local objs = minetest.get_objects_inside_radius(dpos,0.1)
for _,obj in pairs(objs) do
if obj:get_luaentity() and obj:get_luaentity().name == "celevator:car_door" then
table.insert(erefs,obj)
end
end
end
cardoors_moving[hash] = {
direction = "open",
positions = positions,
time = 0,
opendir = vector.rotate_around_axis(fdir,vector.new(0,1,0),-math.pi/2),
}
minetest.sound_play("celevator_door_open",{
pos = pos,
gain = 0.4,
max_hear_distance = 10
},true)
celevator.doors.erefs[hash] = erefs
celevator.storage:set_string("cardoors_moving",minetest.serialize(cardoors_moving))
local meta = celevator.get_meta(pos)
meta:set_string("doordata",minetest.serialize(cardoors_moving[hash]))
meta:set_string("doorstate","opening")
elseif cardoors_moving[hash].direction == "close" then
if cardoors_moving[hash].soundhandle then
minetest.sound_stop(cardoors_moving[hash].soundhandle)
end
minetest.sound_play("celevator_door_reverse",{
pos = pos,
gain = 1,
max_hear_distance = 10
},true)
minetest.sound_play("celevator_door_open",{
pos = pos,
gain = 0.4,
start_time = math.max(0,2.75-cardoors_moving[hash].time),
max_hear_distance = 10
},true)
cardoors_moving[hash].direction = "open"
cardoors_moving[hash].time = math.pi-cardoors_moving[hash].time
celevator.storage:set_string("cardoors_moving",minetest.serialize(cardoors_moving))
end
end
function celevator.doors.carclose(pos,nudge)
local cardoors_moving = minetest.deserialize(celevator.storage:get_string("cardoors_moving")) or {}
local hash = minetest.hash_node_position(pos)
if cardoors_moving[hash] then
return
end
local meta = celevator.get_meta(pos)
local state = meta:get_string("doorstate")
if state ~= "open" then return end
local data = minetest.deserialize(meta:get_string("doordata"))
if not data then return end
local dir = minetest.fourdir_to_dir(celevator.get_node(pos).param2)
data.direction = "close"
data.time = 0
local erefs = celevator.doors.spawncardoors(pos,dir)
local soffset = data.opendir
local foffset = vector.multiply(soffset,2)
for i=1,3,1 do
erefs[i]:set_pos(vector.add(erefs[i]:get_pos(),foffset))
end
for i=4,6,1 do
erefs[i]:set_pos(vector.add(erefs[i]:get_pos(),soffset))
end
celevator.doors.erefs[hash] = erefs
if nudge then
data.soundhandle = minetest.sound_play("celevator_nudge",{
pos = pos,
gain = 0.75,
max_hear_distance = 10
})
else
data.soundhandle = minetest.sound_play("celevator_door_close",{
pos = pos,
gain = 0.3,
max_hear_distance = 10
})
end
data.nudging = nudge
cardoors_moving[hash] = data
celevator.storage:set_string("cardoors_moving",minetest.serialize(cardoors_moving))
end
minetest.register_abm({
label = "Respawn car doors",
nodenames = {"celevator:car_000"},
interval = 1,
chance = 1,
action = function(pos)
if minetest.get_meta(pos):get_string("doorstate") ~= "closed" then return end
local entitiesnearby = minetest.get_objects_inside_radius(pos,0.5)
for _,i in pairs(entitiesnearby) do
if i:get_luaentity() and i:get_luaentity().name == "celevator:car_door" then
return
end
end
local fdir = minetest.facedir_to_dir(minetest.get_node(pos).param2)
celevator.doors.spawncardoors(pos,fdir)
end,
})
minetest.register_node("celevator:hwdoor_glass",{
description = "Glass Elevator Hoistway Door",
paramtype2 = "4dir",
buildable_to = true,
inventory_image = "celevator_door_glass_inventory.png",
wield_image = "celevator_door_glass_inventory.png",
wield_scale = vector.new(1,3,1),
tiles = {"celevator_transparent.png"},
after_place_node = function(pos,player)
if not player:is_player() then
minetest.remove_node(pos)
return true
end
local name = player:get_player_name()
local newnode = minetest.get_node(pos)
local facedir = minetest.dir_to_yaw(minetest.fourdir_to_dir(newnode.param2))
local xnames = {
[0] = "fast",
[1] = "slow",
}
local ynames = {
[0] = "bottom",
[1] = "middle",
[2] = "top",
}
for x=0,1,1 do
for y=0,2,1 do
local offsetdesc = string.format("%dm to the right and %dm up",x,y)
local placeoffset = vector.new(x,y,0)
local placepos = vector.add(pos,vector.rotate_around_axis(placeoffset,vector.new(0,1,0),facedir))
local replaces = minetest.get_node(placepos).name
if not (minetest.registered_nodes[replaces] and minetest.registered_nodes[replaces].buildable_to) then
minetest.chat_send_player(name,string.format("Can't place car here - position %s is blocked!",offsetdesc))
minetest.remove_node(pos)
return true
end
if minetest.is_protected(placepos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
minetest.chat_send_player(name,string.format("Can't place car here - position %s is protected!",offsetdesc))
minetest.record_protection_violation(placepos,name)
minetest.remove_node(pos)
return true
end
end
end
for x=0,1,1 do
for y=0,2,1 do
local piecename = string.format("celevator:hwdoor_%s_glass_%s",xnames[x],ynames[y])
local placeoffset = vector.new(x,y,0)
local placepos = vector.add(pos,vector.rotate_around_axis(placeoffset,vector.new(0,1,0),facedir))
minetest.set_node(placepos,{name=piecename,param2=newnode.param2})
if y==0 then
placesill(placepos,{name=piecename,param2=newnode.param2})
end
end
end
end,
})
minetest.register_node("celevator:door_sill_single",{
description = "Hoistway Door Sill, Single Track (you hacker you!)",
drop = "",
groups = {
not_in_creative_inventory = 1,
},
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.5,-0.5,0.28,0.5,-0.495,0.5},
},
},
tiles = {
"celevator_door_sill_single.png^[transformR180",
"celevator_cabinet_sides.png",
},
})
minetest.register_node("celevator:door_sill_double",{
description = "Hoistway Door Sill, Double Track (you hacker you!)",
drop = "",
groups = {
not_in_creative_inventory = 1,
},
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.5,-0.5,0.28,0.5,-0.495,0.5},
},
},
tiles = {
"celevator_door_sill_double.png^[transformR180",
"celevator_cabinet_sides.png",
},
})
minetest.register_entity("celevator:door_sill",{
initial_properties = {
visual = "wielditem",
visual_size = vector.new(0.667,0.667,0.667),
wield_item = "celevator:door_sill_single",
static_save = false,
pointable = false,
glow = minetest.LIGHT_MAX,
},
})
minetest.register_lbm({
label = "Respawn hoistway door sills",
name = "celevator:spawn_sill",
nodenames = {"celevator:hwdoor_fast_glass_bottom","celevator:hwdoor_slow_glass_bottom"},
run_at_every_load = true,
action = placesill,
})