Add freeze feature
parent
47ad2f515f
commit
ff64fecf5e
|
@ -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)
|
|
@ -258,8 +258,8 @@ local function get_formspec(player, context)
|
||||||
|
|
||||||
for _, action in pairs(classroom.get_actions()) do
|
for _, action in pairs(classroom.get_actions()) do
|
||||||
btn.state = "active"
|
btn.state = "active"
|
||||||
btn.name = action.name
|
btn.name = "action_" .. action.name
|
||||||
btn.text = minetest.formspec_escape(action.title)
|
btn.text = minetest.formspec_escape(action.title)
|
||||||
btn.tooltip = minetest.formspec_escape(action.description)
|
btn.tooltip = minetest.formspec_escape(action.description)
|
||||||
fs[#fs + 1] = button(btn)
|
fs[#fs + 1] = button(btn)
|
||||||
|
|
||||||
|
|
1
init.lua
1
init.lua
|
@ -13,6 +13,7 @@ end
|
||||||
dofile(minetest.get_modpath("classroom") .. "/api.lua")
|
dofile(minetest.get_modpath("classroom") .. "/api.lua")
|
||||||
dofile(minetest.get_modpath("classroom") .. "/gui_dash.lua")
|
dofile(minetest.get_modpath("classroom") .. "/gui_dash.lua")
|
||||||
dofile(minetest.get_modpath("classroom") .. "/gui_group.lua")
|
dofile(minetest.get_modpath("classroom") .. "/gui_group.lua")
|
||||||
|
dofile(minetest.get_modpath("classroom") .. "/freeze.lua")
|
||||||
dofile(minetest.get_modpath("classroom") .. "/actions.lua")
|
dofile(minetest.get_modpath("classroom") .. "/actions.lua")
|
||||||
|
|
||||||
-- Privileges
|
-- Privileges
|
||||||
|
|
Loading…
Reference in New Issue