diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e6b46da --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,21 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [1.0.1] - 2020-01-01 + +### Changed + +- Improve performance by localizing the `vector.distance()` function. + +## 1.0.0 - 2020-01-01 + +- Initial versioned release. + +[Unreleased]: https://github.com/minetest-mods/gauges/compare/v1.0.1...HEAD +[1.0.1]: https://github.com/minetest-mods/gauges/compare/v1.0.0...v1.0.1 diff --git a/LICENSE.md b/LICENSE.md index 0d79608..650a3aa 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ # MIT License -Copyright © 2014-2019 4aiman, Hugo Locurcio and contributors +Copyright © 2014-2020 4aiman, 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 0943b8c..89e326f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Gauges +![Preview](https://content.minetest.net/uploads/GBoKauWSou.png) + Gauges for [Minetest](https://www.minetest.net/), a free and open source infinite world block sandbox game. @@ -18,9 +20,7 @@ git clone https://github.com/minetest-mods/gauges.git You can also [download a ZIP archive](https://github.com/minetest-mods/gauges/archive/master.zip) -of Gauges. If you do so, you will need to extract the archive then rename -the resulting folder from `gauges-master` to `gauges` – this is -**absolutely** required, as the mod won't work otherwise. +of Gauges. ### Enable the mod @@ -60,11 +60,13 @@ on that line. ## Version compatibility -Gauges requires Minetest 5.0.0 or newer to work as expected. +Gauges is currently primarily tested with Minetest 5.1.0. It may or may not work +with newer or older versions. Issues arising in versions older than 5.0.0 +will generally not be fixed. ## License -Copyright © 2014-2019 4aiman, Hugo Locurcio and contributors +Copyright © 2014-2020 4aiman, 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 d5c8881..88775c4 100644 --- a/init.lua +++ b/init.lua @@ -1,66 +1,60 @@ -- gauges: Adds health/breath bars above players -- --- Copyright © 2014-2019 4aiman, Hugo Locurcio and contributors - MIT License +-- 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 + +-- 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", - 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) minetest.log("action", "[gauges] loaded.") 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