Add freeze feature

master
rubenwardy 2019-12-19 21:27:58 +00:00
parent 47ad2f515f
commit ff64fecf5e
3 changed files with 64 additions and 2 deletions

61
freeze.lua Normal file
View File

@ -0,0 +1,61 @@
function classroom.is_frozen(player)
return minetest.is_yes(player:get_meta():get_string("classroom:frozen"))
end
minetest.register_entity("classroom:freeze", {
initial_properties = {
physical = true,
collisionbox = { -0.01, -0.01, -0.01, 0.01, 0.01, 0.01 },
visual = "sprite",
visual_size = { x = 0, y = 0 },
textures = { "blank.png" },
is_visible = true,
makes_footstep_sound = false,
},
on_step = function(self, dtime)
local player = self.pname and minetest.get_player_by_name(self.pname)
if not player or not classroom.is_frozen(player) then
self.object:remove()
return
end
end,
set_frozen_player = function(self, player)
self.pname = player:get_player_name()
player:set_attach(self.object, "", {x = 0, y = 0, z = 0 }, { x = 0, y = 0, z = 0 })
end,
})
function classroom.freeze(player)
player:get_meta():set_string("classroom:frozen", "true")
local parent = player:get_attach()
if parent and parent:get_luaentity() and
parent:get_luaentity().set_frozen_player then
-- Already attached
return
end
local obj = minetest.add_entity(player:get_pos(), "classroom:freeze")
obj:get_luaentity():set_frozen_player(player)
end
function classroom.unfreeze(player)
player:get_meta():set_string("classroom:frozen", "")
local pname = player:get_player_name()
local objects = minetest.get_objects_inside_radius(player:get_pos(), 2)
for i=1, #objects do
local entity = objects[i]:get_luaentity()
if entity and entity.set_frozen_player and entity.pname == pname then
objects[i]:remove()
end
end
end
minetest.register_on_joinplayer(function(player)
if classroom.is_frozen(player) then
classroom.freeze(player)
end
end)

View File

@ -258,8 +258,8 @@ local function get_formspec(player, context)
for _, action in pairs(classroom.get_actions()) do
btn.state = "active"
btn.name = action.name
btn.text = minetest.formspec_escape(action.title)
btn.name = "action_" .. action.name
btn.text = minetest.formspec_escape(action.title)
btn.tooltip = minetest.formspec_escape(action.description)
fs[#fs + 1] = button(btn)

View File

@ -13,6 +13,7 @@ end
dofile(minetest.get_modpath("classroom") .. "/api.lua")
dofile(minetest.get_modpath("classroom") .. "/gui_dash.lua")
dofile(minetest.get_modpath("classroom") .. "/gui_group.lua")
dofile(minetest.get_modpath("classroom") .. "/freeze.lua")
dofile(minetest.get_modpath("classroom") .. "/actions.lua")
-- Privileges