diff --git a/LICENSE.md b/LICENSE.md index 650a3aa..d8d11e4 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ # MIT License -Copyright © 2014-2020 4aiman, Hugo Locurcio and contributors +Copyright © 2014-2020 Hugo Locurcio and contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index b309a9d..30a4651 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ Gauges requires Minetest 5.0.0 or newer to work as expected. ## License -Copyright © 2014-2020 4aiman, Hugo Locurcio and contributors +Copyright © 2014-2020 Hugo Locurcio and contributors - Code is licensed under the MIT license, see [`LICENSE.md`](LICENSE.md) for details. diff --git a/init.lua b/init.lua index 082c756..4559f8b 100644 --- a/init.lua +++ b/init.lua @@ -1,64 +1,48 @@ --- gauges: Adds health/breath bars above players --- --- Copyright © 2014-2020 4aiman, Hugo Locurcio and contributors - MIT License --- See `LICENSE.md` included in the source distribution for details. +if minetest.settings:get_bool("health_bars") == false +or not minetest.settings:get_bool("enable_damage") then + return +end -local hp_bar = { - physical = false, - collisionbox = {x = 0, y = 0, z = 0}, +local v_dist = vector.distance + +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 = 0.0625, z = 1}, -- Y value is (1 / 16) * 1 + textures = {"blank.png"}, -- The texture is changed later in the code + 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 wielder = self.wielder and self.wielder -function hp_bar:on_step(dtime) - local wielder = self.wielder and minetest.get_player_by_name(self.wielder) + if not wielder or v_dist(wielder: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 = wielder:get_hp() <= 20 and wielder:get_hp() or 20 + local breath = wielder:get_breath() <= 10 and wielder: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 ent = minetest.add_entity(player:get_pos(), "gauges:hp_bar") - self.object:set_properties({ - textures = { - "health_" .. tostring(hp) .. ".png^breath_" .. tostring(breath) .. ".png", - }, - }) + ent:set_attach(player, "", {x = 0, y = 19, z = 0}, {x = 0, y = 0, z = 0}) + ent: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