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

View File

@ -1,6 +1,6 @@
Minetest mod "Better HUD"
=========================
version: 0.1 Beta
version: 0.2 Beta
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.
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
View 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
View 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
--

View File

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

View File

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