Combine slowFoodTickTimer and fastFoodTickTimer to a single food_tick_timer

This commit is contained in:
Dieter44 2021-11-08 15:33:53 +01:00
parent d0d60804a3
commit 976f522b9d
1 changed files with 27 additions and 42 deletions

View File

@ -136,57 +136,42 @@ end)
local fastFoodTickTimer = 0 -- 0.5 second cycle
local slowFoodTickTimer = 0 -- 4 second cycle local food_tick_timer = 0
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
fastFoodTickTimer = fastFoodTickTimer + dtime food_tick_timer = food_tick_timer + dtime
slowFoodTickTimer = slowFoodTickTimer + dtime
local fastTimerWrapped = false -- if the fastFoodTickTimer wrapped around and everything dependent should be updated for _,player in ipairs(minetest.get_connected_players()) do
local slowTimerWrapped = false
local player_name = player:get_player_name()
if fastFoodTickTimer > 0.5 then local food_level = mcl_hunger.get_hunger(player)
fastFoodTickTimer = 0 local food_saturation_level = mcl_hunger.get_saturation(player)
fastTimerWrapped = true local player_health = player:get_hp()
end
if slowFoodTickTimer > 4.0 then if food_tick_timer > 4.0 then
slowFoodTickTimer = 0 food_tick_timer = 0
slowTimerWrapped = true
end
if fastTimerWrapped or slowTimerWrapped then -- only update players if something must be updated
for _,player in ipairs(minetest.get_connected_players()) do
local playerName = player:get_player_name() if food_level >= 18 and player_health < 20 then --slow regenration
local foodLevel = mcl_hunger.get_hunger(player) food_tick_timer = 0
local foodSaturationLevel = mcl_hunger.get_saturation(player) player:set_hp(player_health+1)
local playerHealth = player:get_hp() mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN)
mcl_hunger.update_exhaustion_hud(player, mcl_hunger.get_exhaustion(player))
if playerHealth < 20 then elseif food_level == 0 then --starvation
if foodLevel == 20 and foodSaturationLevel >= 6 then -- fast regeneration (2 health per second) maximumStarvation = 1 --the amount of health at which a player will stop to get harmed by starvation (10 for Easy, 1 for Normal, 0 for Hard)
if fastTimerWrapped then
player:set_hp(playerHealth+1)
mcl_hunger.exhaust(playerName, mcl_hunger.EXHAUST_REGEN)
mcl_hunger.update_exhaustion_hud(player, mcl_hunger.get_exhaustion(player))
end
elseif foodLevel >= 18 then -- slow regeneration (1 health every 4 seconds)
if slowTimerWrapped then
player:set_hp(playerHealth+1)
mcl_hunger.exhaust(playerName, mcl_hunger.EXHAUST_REGEN)
mcl_hunger.update_exhaustion_hud(player, mcl_hunger.get_exhaustion(player))
end
end
end
if foodLevel == 0 then --starvation
maximumStarvation = 1 -- the amount of health at which a player will stop to get harmed by starvation (10 for Easy, 1 for Normal, 0 for Hard)
-- TODO: implement Minecraft-like difficulty modes and the update maximumStarvation here -- TODO: implement Minecraft-like difficulty modes and the update maximumStarvation here
if playerHealth > maximumStarvation and slowTimerWrapped then if player_health > maximumStarvation then
mcl_util.deal_damage(player, 1, {type = "starve"}) mcl_util.deal_damage(player, 1, {type = "starve"})
end end
end end
elseif food_tick_timer > 0.5 and food_level == 20 and food_saturation_level >= 6 then --fast regeneration
food_tick_timer = 0
player:set_hp(player_health+1)
mcl_hunger.exhaust(player_name, mcl_hunger.EXHAUST_REGEN)
mcl_hunger.update_exhaustion_hud(player, mcl_hunger.get_exhaustion(player))
end end
end end
end) end)