Add door light curtain

This commit is contained in:
cheapie 2024-04-25 14:00:54 -05:00
parent 219811a0c0
commit c5954749b7
3 changed files with 42 additions and 0 deletions

30
car.lua
View File

@ -73,6 +73,36 @@ local pieces = {
"celevator_car_wallpaper.png^celevator_car_wall_bottom.png^celevator_car_switch_panel.png", "celevator_car_wallpaper.png^celevator_car_wall_bottom.png^celevator_car_switch_panel.png",
"celevator_cabinet_sides.png", "celevator_cabinet_sides.png",
}, },
on_timer = function(pos)
local carid = minetest.get_meta(pos):get_int("carid")
local carinfo = minetest.deserialize(celevator.storage:get_string(string.format("car%d",carid)))
if not (carinfo and carinfo.controllerpos) then return end
local yaw = minetest.dir_to_yaw(minetest.fourdir_to_dir(minetest.get_node(pos).param2))
local positions = {
vector.new(-0.25,-0.1,-0.5),
vector.new(0.25,-0.1,-0.5),
vector.new(0.75,-0.1,-0.5),
vector.new(1.25,-0.1,-0.5),
}
local playerseen = false
for _,searchpos in ipairs(positions) do
local rotatedpos = vector.rotate_around_axis(searchpos,vector.new(0,1,0),yaw)
local erefs = minetest.get_objects_inside_radius(vector.add(pos,rotatedpos),0.5)
for _,ref in pairs(erefs) do
if ref:is_player() then
playerseen = true
break
end
end
if playerseen then break end
end
if playerseen then
celevator.controller.run(carinfo.controllerpos,{
type = "lightcurtain",
})
end
return true
end,
}, },
{ {
_position = "001", _position = "001",

View File

@ -675,6 +675,14 @@ elseif event.type == "remotemsg" then
elseif event.channel == "carcall" and mem.carstate == "normal" then elseif event.channel == "carcall" and mem.carstate == "normal" then
mem.carcalls[event.msg] = true mem.carcalls[event.msg] = true
end end
elseif event.type == "lightcurtain" then
if mem.carstate == "normal" or mem.carstate == "indep" then
if mem.doorstate == "closing" then
open()
elseif mem.doorstate == "open" and mem.carstate == "normal" then
interrupt(mem.params.doortimer,"close")
end
end
end end
local oldstate = mem.carstate local oldstate = mem.carstate

View File

@ -430,6 +430,8 @@ function celevator.doors.carstep(dtime)
end end
celevator.get_meta(data.positions[1]):set_string("doorstate","closed") celevator.get_meta(data.positions[1]):set_string("doorstate","closed")
cardoors_moving[hash] = nil cardoors_moving[hash] = nil
local cartimer = minetest.get_node_timer(data.positions[1])
cartimer:stop()
end end
end end
else else
@ -490,6 +492,8 @@ end
function celevator.doors.caropen(pos) function celevator.doors.caropen(pos)
local cardoors_moving = minetest.deserialize(celevator.storage:get_string("cardoors_moving")) or {} local cardoors_moving = minetest.deserialize(celevator.storage:get_string("cardoors_moving")) or {}
local hash = minetest.hash_node_position(pos) local hash = minetest.hash_node_position(pos)
local cartimer = minetest.get_node_timer(pos)
cartimer:start(0.25)
if not cardoors_moving[hash] then if not cardoors_moving[hash] then
local fdir = minetest.fourdir_to_dir(celevator.get_node(pos).param2) 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 otherpanel = vector.add(pos,vector.rotate_around_axis(fdir,vector.new(0,1,0),-math.pi/2))