65 lines
1.9 KiB
Lua
65 lines
1.9 KiB
Lua
|
|
local options = {
|
|
reverse_projection = false,
|
|
hpbar = {
|
|
bg = 0x13131355,
|
|
fg = 0xef787878,
|
|
txt = 0xffffffff
|
|
}
|
|
}
|
|
|
|
local function entityBox(ent)
|
|
local cube = canvas3d.addBox(ent.x - 0.25, ent.y - 0.25, ent.z - 0.25)
|
|
local hpbar = canvas3d.addFrame({ ent.x - 0.25, ent.y + 0.25, ent.z - 0.25 })
|
|
cube.setAlpha(0x20)
|
|
cube.setDepthTested(false)
|
|
hpbar.setDepthTested(false)
|
|
|
|
local hp_rect_bg = hpbar.addRectangle(-1, -0.25, 2, 0.25, options.hpbar.bg)
|
|
local hp_rect_fg = hpbar.addRectangle(-1, -0.25, 0, 0.25, options.hpbar.fg)
|
|
local hp_txt = hpbar.addText({ -1, -0.2 }, ent.name, options.hpbar.txt)
|
|
|
|
return {
|
|
_cube = cube,
|
|
_hpbar = hpbar,
|
|
_hp_rect_bg = hp_rect_bg,
|
|
_hp_rect_fg = hp_rect_fg,
|
|
_hp_txt = hp_txt,
|
|
update = function(self, entity)
|
|
self._cube.setPosition(entity.x - 0.25, entity.y - 0.25, entity.z - 0.25)
|
|
self._hpbar.setPosition(entity, entity.y + 0.5, entity.z)
|
|
self._hp_rect_fg.setSize(2 * entity.health / entity.maxHealth, 0.25)
|
|
self._hp_txt.setText(string.format("%s (%.1f/%.1f)", entity.name, entity.health, entity.maxHealth))
|
|
end,
|
|
destroy = function(self)
|
|
self._cube.remove()
|
|
self._hpbar.remove()
|
|
end
|
|
}
|
|
end
|
|
|
|
return function()
|
|
local cache = {}
|
|
while _G._running do
|
|
for uuid in table.keys(cache) do
|
|
if surroundings.entitiesByUUID[uuid] == nil then
|
|
cache[uuid]:destroy()
|
|
cache[uuid] = nil
|
|
end
|
|
end
|
|
|
|
for uuid, entity in pairs(surroundings.entitiesByUUID) do
|
|
if cache[uuid] == nil then
|
|
cache[uuid] = entityBox(entity)
|
|
else
|
|
cache[uuid]:update(entity)
|
|
end
|
|
end
|
|
os.sleep(0.05)
|
|
end
|
|
|
|
for uuid in table.keys(cache) do
|
|
cache[uuid]:destroy()
|
|
end
|
|
end
|