xp_redo/entities.lua

94 lines
1.9 KiB
Lua
Raw Normal View History

2018-07-04 07:17:16 -07:00
local get_entity_name = function(rank)
2018-11-16 04:20:29 -08:00
return minetest.get_current_modname() .. ":xp" .. rank.xp
2018-07-04 07:17:16 -07:00
end
2019-10-21 01:17:49 -07:00
xp_redo.create_entity_properties = function(rank)
return {
visual = "cube",
visual_size = {x=0.5,y=0.5},
textures = {
rank.icon,
rank.icon,
rank.icon,
rank.icon,
rank.icon,
rank.icon
},
physical = false,
collide_with_objects = false,
pointable = false,
static_save = false
}
end
2018-11-16 04:20:29 -08:00
xp_redo.register_rank_entity = function(rank)
rank.entityname = get_entity_name(rank)
minetest.register_entity(rank.entityname, {
2019-10-21 01:17:49 -07:00
initial_properties = xp_redo.create_entity_properties(rank),
2019-10-07 05:54:55 -07:00
on_step = function(self)
2018-07-24 02:38:41 -07:00
if self.object.get_attach and not self.object:get_attach() then
self.object:remove()
end
end,
2018-07-04 07:17:16 -07:00
attached = nil
});
end
2018-07-04 07:48:40 -07:00
local player_data = {}
2018-07-04 07:17:16 -07:00
xp_redo.remove_rank_entity = function(player)
local playername = player:get_player_name()
2018-07-04 07:48:40 -07:00
local data = player_data[playername]
if not data then
return
end
local entity = data.entity
2018-07-04 07:17:16 -07:00
if entity then
entity:set_detach()
entity:remove()
end
2018-07-04 07:48:40 -07:00
player_data[playername] = nil
2018-07-04 07:17:16 -07:00
end
minetest.register_on_leaveplayer(function(player)
xp_redo.remove_rank_entity(player)
end)
xp_redo.update_rank_entity = function(player, rank)
if not player or not player:is_player() or not rank then
2018-07-04 07:17:16 -07:00
return
end
local state = player:get_meta():get(xp_redo.HUD_DISPLAY_STATE_NAME)
if state == "off" then return end
2018-07-04 07:17:16 -07:00
local playername = player:get_player_name()
2018-07-04 07:48:40 -07:00
local data = player_data[playername]
2018-07-04 07:17:16 -07:00
-- TODO: check new rank
2018-07-04 07:48:40 -07:00
if not data then
2019-08-31 20:28:57 -07:00
local pos = player:get_pos()
2018-07-04 07:17:16 -07:00
2018-11-16 04:20:29 -08:00
local entity = minetest.add_entity(pos, rank.entityname)
2018-07-04 07:17:16 -07:00
2019-03-19 08:26:33 -07:00
entity:set_attach(player, "", {x=0,y=25,z=0}, {x=0,y=0,z=0})
2018-07-04 07:17:16 -07:00
2018-07-04 07:48:40 -07:00
data = {
entity = entity,
rank = rank
}
player_data[playername] = data
end
if data.rank.xp ~= rank.xp then
-- rank changed, remove entity
xp_redo.remove_rank_entity(player)
2018-07-04 07:17:16 -07:00
end
2019-03-19 08:26:33 -07:00
end