Update to 0.2

This commit is contained in:
BlockMen 2013-06-28 23:03:54 +02:00
parent d3e8f7134a
commit a22a08f06d
5 changed files with 103 additions and 31 deletions

@ -1,6 +1,6 @@
Minetest mod "Better HUD" Minetest mod "Better HUD"
========================= =========================
version: 0.1 Beta version: 0.2 Beta
License of source code: WTFPL License of source code: WTFPL
----------------------------- -----------------------------
@ -35,3 +35,11 @@ This mod changes the HUD of Minetest. It adds a costum crosshair, a improved hea
Also it adds hunger to the game and and hunger bar to the HUD. Also it adds hunger to the game and and hunger bar to the HUD.
Furthermore it disables the current way of drowning (credits go to PilzAdam) and it will have an LUA-based drowing next versions. Furthermore it disables the current way of drowning (credits go to PilzAdam) and it will have an LUA-based drowing next versions.
You can create a "hud.conf" to costumize the positions of health and hunger bar. Take a look at "hud.conf.example" to get more infos.
Hunger:
This mod adds hunger to the game. You can disable this by setting "HUD_HUNGER_ENABLE = false" in "hud.conf".
Currently only apples and bread from farmin is supported. One apple fills up the hunger bar by 1 bread, 1 bread (from farming) 2 breads in bar.

7
changelog.txt Normal file

@ -0,0 +1,7 @@
0.2 Beta
--------
- added support of costum config files
- you can eat max. 50% more than before (although it isnt shown in hunger bar)
- you get healed with 8 breads and more (in hunger bar) now
- a bread (from farming) == 2 breads in hunger bar

38
hud.conf.example Normal file

@ -0,0 +1,38 @@
--##Better HUD example config file##
------------------------------------
-- This example moves the health bar in the top left corner and the hunger bar in the top right corner
--
-- general settings
--
HUD_ENABLE_HUNGER = true --enables/disables hunger
HUD_HUNGER_TICK = 300 --sets time for loosing 1/2 bread (of 10) (in seconds)
HUD_DISABLE_DROWNING = true --needed for costum breath bar postion
--
-- crosshair
--
HUD_CROSSHAIR_POS = {x=0.5, y=0.5} --recommended to be 0.5,0.5 (centered)
--!NOTICE!--
-- >>if damage is disabled neither health bar nor hunger bar is shown
--
-- health bar
--
HUD_HEALTH_POS = {x=0,y=0} --min 0, max 1
HUD_HEALTH_OFFSET = {x=5,y=30} --offset in pixel
--
-- hunger bar
--
HUD_HUNGER_POS = {x=1,y=0} --min 0, max 1
HUD_HUNGER_OFFSET = {x=-175,y=30} --offset in pixel
--
-- breath bar
--

@ -1,10 +1,12 @@
function hud.item_eat(hunger_change, replace_with_item) function hud.item_eat(hunger_change, replace_with_item)
minetest.chat_send_all("eat")
return function(itemstack, user, pointed_thing) return function(itemstack, user, pointed_thing)
if itemstack:take_item() ~= nil then if itemstack:take_item() ~= nil then
local h = tonumber(hud.hunger[user:get_player_name()]) local h = tonumber(hud.hunger[user:get_player_name()])
h=h+hunger_change h=h+hunger_change
if h>20 then h=20 end if h>30 then h=30 end
hud.hunger[user:get_player_name()]=h hud.hunger[user:get_player_name()]=h
hud.save_hunger(user)
itemstack:add_item(replace_with_item) -- note: replace_with_item is optional itemstack:add_item(replace_with_item) -- note: replace_with_item is optional
--sound:eat --sound:eat
end end
@ -30,5 +32,5 @@ end
overwrite("default:apple", 2, true) overwrite("default:apple", 2, true)
if minetest.get_modpath("farming") ~= nil then if minetest.get_modpath("farming") ~= nil then
overwrite("farming:bread", 6, false) overwrite("farming:bread", 4, false)
end end

@ -8,65 +8,77 @@ local air_hud = {}
local SAVE_INTERVAL = 0.5*60--currently useless local SAVE_INTERVAL = 0.5*60--currently useless
local ENABLE_HUNGER = minetest.setting_getbool("enable_damage") -- set to false if no hunger wanted --default settings
local NO_HUNGER_TIME = 300 --=5min (so 1h playing == hunger) HUD_DISABLE_DROWNING = true
HUD_ENABLE_HUNGER = minetest.setting_getbool("enable_damage")
HUD_HUNGER_TICK = 300
HUD_CROSSHAIR_POS = {x=0.5, y=0.5}
HUD_HEALTH_POS = {x=0.5,y=1}
HUD_HEALTH_OFFSET = {x=-175,y=-60}
HUD_HUNGER_POS = {x=0.5,y=1}
HUD_HUNGER_OFFSET = {x=15,y=-60}
--load costum settings
local set = io.open(minetest.get_modpath("hud").."/hud.conf", "r")
if set then dofile(minetest.get_modpath("hud").."/hud.conf") end
--minetest.after(SAVE_INTERVAL, timer, SAVE_INTERVAL) --minetest.after(SAVE_INTERVAL, timer, SAVE_INTERVAL)
local function hide_builtin(player) local function hide_builtin(player)
player:hud_set_flags({crosshair = false, hotbar = true, healthbar = false, wielditem = true, breathbar = false}) player:hud_set_flags({crosshair = false, hotbar = true, healthbar = false, wielditem = true, breathbar = DISABLE_DROWNING})
end end
local function costum_hud(player) local function costum_hud(player)
--crosshair --crosshair
player:hud_add({ player:hud_add({
hud_elem_type = "image", hud_elem_type = "image",
text = "hud_cross.png", text = "hud_cross.png",
position = {x=0.5, y=0.5}, position = HUD_CROSSHAIR_POS,
scale = {x=1, y=1}, scale = {x=1, y=1},
}) })
if minetest.setting_getbool("enable_damage") then if minetest.setting_getbool("enable_damage") then
--hunger --hunger
player:hud_add({ player:hud_add({
hud_elem_type = "statbar", hud_elem_type = "statbar",
position = {x=0.5,y=1}, position = HUD_HUNGER_POS,
scale = {x=1, y=1}, scale = {x=1, y=1},
text = "hud_hunger_bg.png", text = "hud_hunger_bg.png",
number = 20, number = 20,
alignment = {x=-1,y=-1}, alignment = {x=-1,y=-1},
offset = {x=15,y=-60}, offset = HUD_HUNGER_OFFSET,
}) })
hunger_hud[player:get_player_name()] = player:hud_add({ hunger_hud[player:get_player_name()] = player:hud_add({
hud_elem_type = "statbar", hud_elem_type = "statbar",
position = {x=0.5,y=1}, position = HUD_HUNGER_POS,
scale = {x=1, y=1}, scale = {x=1, y=1},
text = "hud_hunger_fg.png", text = "hud_hunger_fg.png",
number = 20, number = 20,
alignment = {x=-1,y=-1}, alignment = {x=-1,y=-1},
offset = {x=15,y=-60}, offset = HUD_HUNGER_OFFSET,
}) })
--health --health
player:hud_add({ player:hud_add({
hud_elem_type = "statbar", hud_elem_type = "statbar",
position = {x=0.5,y=1}, position = HUD_HEALTH_POS,
scale = {x=1, y=1}, scale = {x=1, y=1},
text = "hud_heart_bg.png", text = "hud_heart_bg.png",
number = 20, number = 20,
alignment = {x=-1,y=-1}, alignment = {x=-1,y=-1},
offset = {x=-175,y=-60}, offset = HUD_HEALTH_OFFSET,
}) })
health_hud[player:get_player_name()] = player:hud_add({ health_hud[player:get_player_name()] = player:hud_add({
hud_elem_type = "statbar", hud_elem_type = "statbar",
position = {x=0.5,y=1}, position = HUD_HEALTH_POS,
scale = {x=1, y=1}, scale = {x=1, y=1},
text = "hud_heart_fg.png", text = "hud_heart_fg.png",
number = player:get_hp(), number = player:get_hp(),
alignment = {x=-1,y=-1}, alignment = {x=-1,y=-1},
offset = {x=-175,y=-60}, offset = HUD_HEALTH_OFFSET,
}) })
end end
end end
@ -75,11 +87,13 @@ local function update_hud(player)
--health --health
player:hud_change(health_hud[player:get_player_name()], "number", player:get_hp()) player:hud_change(health_hud[player:get_player_name()], "number", player:get_hp())
--hunger --hunger
player:hud_change(hunger_hud[player:get_player_name()], "number", hud.hunger[player:get_player_name()]) local h = tonumber(hud.hunger[player:get_player_name()])
if h>20 then h=20 end
player:hud_change(hunger_hud[player:get_player_name()], "number", h)
end end
local function save_hunger(player) function hud.save_hunger(player)
local file = io.open(minetest.get_worldpath().."/hud_"..player:get_player_name().."_hunger", "w+") local file = io.open(minetest.get_worldpath().."/hud_"..player:get_player_name().."_hunger", "w+")
if file then if file then
file:write(hud.hunger[player:get_player_name()]) file:write(hud.hunger[player:get_player_name()])
@ -89,7 +103,7 @@ end
local function timer(interval, player) local function timer(interval, player)
if interval > 0 then if interval > 0 then
save_hunger(player) hud.save_hunger(player)
minetest.after(interval, timer, interval, player) minetest.after(interval, timer, interval, player)
end end
end end
@ -113,43 +127,46 @@ minetest.register_on_joinplayer(function(player)
hud.hunger[player:get_player_name()] = 20 hud.hunger[player:get_player_name()] = 20
end end
minetest.after(0.5, function() minetest.after(0.5, function()
save_hunger(player) hud.save_hunger(player)
hide_builtin(player) hide_builtin(player)
costum_hud(player) costum_hud(player)
end) end)
end) end)
local tick = 0
local timer = 0 local timer = 0
local timer2 = 0 local timer2 = 0
minetest.after(2.5, function() minetest.after(2.5, function()
if minetest.setting_getbool("enable_damage") then if minetest.setting_getbool("enable_damage") then
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
tick = tick + dtime
--if tick<0.5 then return end
--tick = 0
timer = timer + dtime timer = timer + dtime
timer2 = timer2 + dtime timer2 = timer2 + dtime
for _,player in ipairs(minetest.get_connected_players()) do for _,player in ipairs(minetest.get_connected_players()) do
local h = tonumber(hud.hunger[player:get_player_name()]) local h = tonumber(hud.hunger[player:get_player_name()])
if ENABLE_HUNGER and timer > 4 then if HUD_ENABLE_HUNGER and timer > 4 then
if h>=18 then if h>=16 then
player:set_hp(player:get_hp()+1) player:set_hp(player:get_hp()+1)
elseif h==1 and minetest.setting_getbool("enable_damage") then elseif h==1 and minetest.setting_getbool("enable_damage") then
if player:get_hp()-1 >= 1 then player:set_hp(player:get_hp()-1) end if player:get_hp()-1 >= 1 then player:set_hp(player:get_hp()-1) end
end end
end end
if ENABLE_HUNGER and timer2>NO_HUNGER_TIME then if HUD_ENABLE_HUNGER and timer2>HUD_HUNGER_TICK then
--local h = tonumber(hunger[player:get_player_name()])
if h>1 then if h>1 then
h=h-1 h=h-1
hud.hunger[player:get_player_name()]=h hud.hunger[player:get_player_name()]=h
save_hunger(player) hud.save_hunger(player)
end end
end end
update_hud(player) update_hud(player)
end end
if timer>4 then timer=0 end if timer>4 then timer=0 end
if timer2>NO_HUNGER_TIME then timer2=0 end if timer2>HUD_HUNGER_TICK then timer2=0 end
end) end)
end end
end) end)
if ENABLE_HUNGER then dofile(minetest.get_modpath("hud").."/hunger.lua") end if HUD_ENABLE_HUNGER then dofile(minetest.get_modpath("hud").."/hunger.lua") end
dofile(minetest.get_modpath("hud").."/no_drowning.lua") if HUD_DISABLE_DROWNING then dofile(minetest.get_modpath("hud").."/no_drowning.lua") end