diff --git a/README.txt b/README.txt index fcfd25f..2a58f71 100644 --- a/README.txt +++ b/README.txt @@ -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. diff --git a/changelog.txt b/changelog.txt new file mode 100644 index 0000000..71c43c2 --- /dev/null +++ b/changelog.txt @@ -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 \ No newline at end of file diff --git a/hud.conf.example b/hud.conf.example new file mode 100644 index 0000000..bb4a927 --- /dev/null +++ b/hud.conf.example @@ -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 +-- \ No newline at end of file diff --git a/hunger.lua b/hunger.lua index 9e0f7ff..36f2ddd 100644 --- a/hunger.lua +++ b/hunger.lua @@ -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 diff --git a/init.lua b/init.lua index d4a7506..ceda859 100644 --- a/init.lua +++ b/init.lua @@ -8,65 +8,77 @@ 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 + 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 + --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 + end 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