From 960ca02e42b6b5c3f4c2ef5a3d5711ede1dfb538 Mon Sep 17 00:00:00 2001 From: MoNTE48 Date: Tue, 21 Jan 2020 22:52:07 +0100 Subject: [PATCH] Readd Gauges when a player is lost --- init.lua | 78 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/init.lua b/init.lua index f82acd2..840f582 100644 --- a/init.lua +++ b/init.lua @@ -7,48 +7,12 @@ if minetest.settings:get_bool("health_bars") == false or not minetest.settings:get_bool("enable_damage") then return end --- Localize the vector distance function for better performance, as it's called --- on every step +-- Localize the vector distance function for better performance, +-- as it's called on every step local vector_distance = vector.distance -minetest.register_entity("gauges:hp_bar", { - visual = "sprite", - visual_size = {x=1, y=1/16, z=1}, - -- The texture is changed later in the code - textures = {"blank.png"}, - collisionbox = {0}, - physical = false, - - on_step = function(self) - local player = self.wielder - local gauge = self.object - - if not player or - not minetest.is_player(player) or - vector_distance(player:get_pos(), gauge:get_pos()) > 3 - then - gauge:remove() - return - end - - 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 - gauge:set_properties({ - textures = { - "health_"..tostring(hp)..".png^".. - "breath_"..tostring(breath)..".png" - } - }) - self.hp = hp - self.breath = breath - end - end -}) - local function add_gauge(player) - if player and minetest.is_player(player) then + if player and player:is_player() then local entity = minetest.add_entity(player:get_pos(), "gauges:hp_bar") local height = 19 @@ -63,6 +27,42 @@ local function add_gauge(player) end end +minetest.register_entity("gauges:hp_bar", { + visual = "sprite", + visual_size = {x=1, y=1/16, z=1}, + textures = {"blank.png"}, + collisionbox = {0}, + physical = false, + + on_step = function(self) + local player = self.wielder + local gauge = self.object + + if not player or not player:is_player() then + gauge:remove() + return + elseif vector_distance(player:get_pos(), gauge:get_pos()) > 3 then + gauge:remove() + add_gauge(player) + return + end + + 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 + gauge:set_properties({ + textures = { + "health_"..hp..".png^".. + "breath_"..breath..".png" + } + }) + self.hp = hp + self.breath = breath + end + end +}) + minetest.register_on_joinplayer(function(player) minetest.after(1, add_gauge, player) end)