diff --git a/init.lua b/init.lua index 082c756..3a957b2 100644 --- a/init.lua +++ b/init.lua @@ -3,62 +3,52 @@ -- Copyright © 2014-2020 4aiman, Hugo Locurcio and contributors - MIT License -- See `LICENSE.md` included in the source distribution for details. -local hp_bar = { - physical = false, - collisionbox = {x = 0, y = 0, z = 0}, +if minetest.settings:get_bool("health_bars") == false or + not minetest.settings:get_bool("enable_damage") +then return end + +minetest.register_entity("gauges:hp_bar", { visual = "sprite", - textures = {"20.png"}, -- The texture is changed later in the code - visual_size = {x = 1.5, y = 0.09375, z = 1.5}, -- Y value is (1 / 16) * 1.5 - wielder = nil, -} + visual_size = {x=1, y=1/16, z = 1}, + -- The texture is changed later in the code + textures = {"blank.png"}, + collisionbox = {0}, + physical = false, -function vector.sqdist(a, b) - local dx = a.x - b.x - local dy = a.y - b.y - local dz = a.z - b.z - return dx * dx + dy * dy + dz * dz -end + on_step = function(self) + local player = self.wielder -function hp_bar:on_step(dtime) - local wielder = self.wielder and minetest.get_player_by_name(self.wielder) + if not player or + not minetest.is_player(player) or + vector.distance(player:get_pos(), self.object:get_pos()) > 3 + then + self.object:remove() + return + end - if - wielder == nil or - vector.sqdist(wielder:get_pos(), self.object:get_pos()) > 3 - then - self.object:remove() - return + local hp = player:get_hp() <= 20 and player:get_hp() or 20 + local breath = player:get_breath() <= 10 and player:get_breath() or 11 + + if self.hp ~= hp or self.breath ~= breath then + self.object:set_properties({ + textures = { + "health_"..tostring(hp)..".png^".. + "breath_"..tostring(breath)..".png" + } + }) + self.hp = hp + self.breath = breath + end end +}) - local hp = wielder:get_hp() - local breath = wielder:get_breath() +local function add_gauge(player) + local entity = minetest.add_entity(player:get_pos(), "gauges:hp_bar") - self.object:set_properties({ - textures = { - "health_" .. tostring(hp) .. ".png^breath_" .. tostring(breath) .. ".png", - }, - }) + entity:set_attach(player, "", {x=0, y=19, z=0}, {x=0, y=0, z=0}) + entity:get_luaentity().wielder = player end -minetest.register_entity("gauges:hp_bar", hp_bar) - -local function add_HP_gauge(name) - local player = minetest.get_player_by_name(name) - local pos = player:get_pos() - local ent = minetest.add_entity(pos, "gauges:hp_bar") - - if ent ~= nil then - ent:set_attach(player, "", {x = 0, y = 19, z = 0}, {x = 0, y = 0, z = 0}) - ent = ent:get_luaentity() - ent.wielder = player:get_player_name() - end -end - -if - minetest.settings:get_bool("enable_damage") and - minetest.settings:get_bool("health_bars") ~= false -then - minetest.register_on_joinplayer(function(player) - minetest.after(1, add_HP_gauge, player:get_player_name()) - end) -end +minetest.register_on_joinplayer(function(player) + minetest.after(1, add_gauge, player) +end) diff --git a/textures/breath_0.png b/textures/breath_0.png index 6aeb84e..655da8f 100644 Binary files a/textures/breath_0.png and b/textures/breath_0.png differ diff --git a/textures/breath_1.png b/textures/breath_1.png index 5182fc8..724d600 100644 Binary files a/textures/breath_1.png and b/textures/breath_1.png differ diff --git a/textures/breath_2.png b/textures/breath_2.png index 9ad96a8..1682014 100644 Binary files a/textures/breath_2.png and b/textures/breath_2.png differ diff --git a/textures/breath_3.png b/textures/breath_3.png index dc787df..19f0d5c 100644 Binary files a/textures/breath_3.png and b/textures/breath_3.png differ diff --git a/textures/breath_4.png b/textures/breath_4.png index f22fdac..7687f24 100644 Binary files a/textures/breath_4.png and b/textures/breath_4.png differ diff --git a/textures/breath_5.png b/textures/breath_5.png index bc7e23f..44921fc 100644 Binary files a/textures/breath_5.png and b/textures/breath_5.png differ diff --git a/textures/breath_6.png b/textures/breath_6.png index 3396ea6..1b29fc3 100644 Binary files a/textures/breath_6.png and b/textures/breath_6.png differ diff --git a/textures/breath_65535.png b/textures/breath_65535.png deleted file mode 100644 index 4b5b302..0000000 Binary files a/textures/breath_65535.png and /dev/null differ diff --git a/textures/breath_7.png b/textures/breath_7.png index 03dbd4a..7447afb 100644 Binary files a/textures/breath_7.png and b/textures/breath_7.png differ diff --git a/textures/breath_8.png b/textures/breath_8.png index 6c4b40c..5bae595 100644 Binary files a/textures/breath_8.png and b/textures/breath_8.png differ diff --git a/textures/breath_9.png b/textures/breath_9.png index 22edb2d..3ac93a0 100644 Binary files a/textures/breath_9.png and b/textures/breath_9.png differ diff --git a/textures/health_3.png b/textures/health_3.png index 1a43e74..89aa912 100644 Binary files a/textures/health_3.png and b/textures/health_3.png differ