summaryrefslogtreecommitdiff
path: root/init.lua
blob: d4a75067ea5334e7610b456a67b4c55775ee5106 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
hud = {}

local health_hud = {}
hud.hunger = {}
local hunger_hud = {}
hud.air = {}
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)

--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})
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},
            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},
		scale = {x=1, y=1},
		text = "hud_hunger_bg.png",
		number = 20,
		alignment = {x=-1,y=-1},
		offset = {x=15,y=-60},
	})

	hunger_hud[player:get_player_name()] = player:hud_add({
		hud_elem_type = "statbar",
		position = {x=0.5,y=1},
		scale = {x=1, y=1},
		text = "hud_hunger_fg.png",
		number = 20,
		alignment = {x=-1,y=-1},
		offset = {x=15,y=-60},
	})
--health
        player:hud_add({
		hud_elem_type = "statbar",
		position = {x=0.5,y=1},
		scale = {x=1, y=1},
		text = "hud_heart_bg.png",
		number = 20,
		alignment = {x=-1,y=-1},
		offset = {x=-175,y=-60},
	})

	health_hud[player:get_player_name()] = player:hud_add({
		hud_elem_type = "statbar",
		position = {x=0.5,y=1},
		scale = {x=1, y=1},
		text = "hud_heart_fg.png",
		number = player:get_hp(),
		alignment = {x=-1,y=-1},
		offset = {x=-175,y=-60},
	})
end

end


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()])
end


local function 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()])
		file:close()
	end
end

local function timer(interval, player)
	if interval > 0 then
		save_hunger(player)
		minetest.after(interval, timer, interval, player)
	end
end

local function load_hunger(player)
	local file = io.open(minetest.get_worldpath().."/hud_"..player:get_player_name().."_hunger", "r")
	if file then
		hud.hunger[player:get_player_name()] = file:read("*all")
		file:close()
		return hud.hunger[player:get_player_name()]
	else
		return
	end
	
end


minetest.register_on_joinplayer(function(player)
	hud.hunger[player:get_player_name()] = load_hunger(player)
	if hud.hunger[player:get_player_name()] == nil then
		hud.hunger[player:get_player_name()] = 20
	end
	minetest.after(0.5, function()
		save_hunger(player)
		hide_builtin(player)
		costum_hud(player)
	end)
end)

local timer = 0
local timer2 = 0
minetest.after(2.5, function()
if minetest.setting_getbool("enable_damage") then
	minetest.register_globalstep(function(dtime)
	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
					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 h>1 then
					h=h-1
					hud.hunger[player:get_player_name()]=h
					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
	end)
end
end)

if ENABLE_HUNGER then dofile(minetest.get_modpath("hud").."/hunger.lua") end
dofile(minetest.get_modpath("hud").."/no_drowning.lua")