Add date time mod
parent
5bd40f6d62
commit
297352dcdc
|
@ -0,0 +1,80 @@
|
|||
function gametime.get()
|
||||
local days = minetest.get_day_count()
|
||||
local years = math.floor(days / 360)
|
||||
days = days - years * 360
|
||||
local months = math.floor(days / 12)
|
||||
days = days - months * 12
|
||||
assert(days < 30)
|
||||
|
||||
return {
|
||||
year = years + 1900,
|
||||
month = months + 1,
|
||||
day = days + 1,
|
||||
}
|
||||
end
|
||||
|
||||
local MONTH_NAMES = {
|
||||
"January",
|
||||
"February",
|
||||
"March",
|
||||
"April",
|
||||
"May",
|
||||
"June",
|
||||
"July",
|
||||
"August",
|
||||
"September",
|
||||
"October",
|
||||
"November",
|
||||
"December",
|
||||
}
|
||||
|
||||
function gametime.get_formatted()
|
||||
local date = gametime.get()
|
||||
local month_name = MONTH_NAMES[date.month]
|
||||
return ("%02d-%s-%04d"):format(date.day, month_name, date.year)
|
||||
end
|
||||
|
||||
local _registered_on_day_change = {}
|
||||
local _registered_on_month_change = {}
|
||||
local _registered_on_year_change = {}
|
||||
|
||||
function gametime.register_on_day_change(func)
|
||||
table.insert(_registered_on_day_change, func)
|
||||
end
|
||||
|
||||
function gametime.register_on_month_change(func)
|
||||
table.insert(_registered_on_month_change, func)
|
||||
end
|
||||
function gametime.register_on_year_change(func)
|
||||
table.insert(_registered_on_year_change, func)
|
||||
end
|
||||
|
||||
local _lastcount = minetest.get_day_count()
|
||||
|
||||
local function on_interval()
|
||||
local cur = minetest.get_day_count()
|
||||
if _lastcount == cur then
|
||||
return
|
||||
end
|
||||
|
||||
_lastcount = cur
|
||||
|
||||
local curdate = gametime.get()
|
||||
for i=1, #_registered_on_day_change do
|
||||
_registered_on_day_change[i](cur, curdate)
|
||||
end
|
||||
|
||||
if curdate.day == 1 then
|
||||
for i=1, #_registered_on_month_change do
|
||||
_registered_on_month_change[i](cur, curdate)
|
||||
end
|
||||
|
||||
if curdate.month == 1 then
|
||||
for i=1, #_registered_on_year_change do
|
||||
_registered_on_year_change[i](cur, curdate)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
lib_utils.interval(2, on_interval)
|
|
@ -0,0 +1,31 @@
|
|||
local hud = hudkit()
|
||||
|
||||
local function update_datetime(player)
|
||||
local date = gametime.get_formatted()
|
||||
local tod = minetest.get_timeofday()
|
||||
local hours = math.floor(tod * 24)
|
||||
local minutes = math.floor(tod * 1440 - hours * 60)
|
||||
local datetime = ("%s %02d:%02d"):format(date, hours, minutes)
|
||||
|
||||
if not hud:exists(player, "gametime:datetime") then
|
||||
hud:add(player, "gametime:datetime", {
|
||||
hud_elem_type = "text",
|
||||
position = {x = 0.5, y = 0},
|
||||
scale = {x = 100, y = 100},
|
||||
text = datetime,
|
||||
number = 0xFFFFFF,
|
||||
offset = {x = 0, y = 20},
|
||||
alignment = {x = 0, y = 0}
|
||||
})
|
||||
else
|
||||
hud:change(player, "gametime:datetime", "text", datetime)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(update_datetime)
|
||||
lib_utils.interval(1, function()
|
||||
local players = minetest.get_connected_players()
|
||||
for i=1, #players do
|
||||
update_datetime(players[i])
|
||||
end
|
||||
end)
|
|
@ -0,0 +1,6 @@
|
|||
gametime = {}
|
||||
|
||||
dofile(minetest.get_modpath("gametime") .. "/api.lua")
|
||||
dofile(minetest.get_modpath("gametime") .. "/gui.lua")
|
||||
|
||||
minetest.settings:set("time_speed", "51.429")
|
|
@ -0,0 +1,2 @@
|
|||
name = gametime
|
||||
depends = lib_utils, hudkit
|
|
@ -0,0 +1,89 @@
|
|||
function hudkit()
|
||||
return {
|
||||
players = {},
|
||||
|
||||
-- set = function(self, player, id, def)
|
||||
-- local name = player:get_player_name()
|
||||
-- local elements = self.players[name]
|
||||
|
||||
-- if not elements then
|
||||
-- self.players[name] = {}
|
||||
-- elements = self.players[name]
|
||||
-- end
|
||||
|
||||
-- if elements[id] then
|
||||
-- for key, value in pairs(def) do
|
||||
-- if elements[id].def[key] ~= value then
|
||||
|
||||
-- end
|
||||
-- end
|
||||
|
||||
-- else
|
||||
-- self:add(self, player, id, def)
|
||||
-- end
|
||||
|
||||
-- end,
|
||||
|
||||
add = function(self, player, id, def)
|
||||
local name = player:get_player_name()
|
||||
local elements = self.players[name]
|
||||
|
||||
if not elements then
|
||||
self.players[name] = {}
|
||||
elements = self.players[name]
|
||||
end
|
||||
|
||||
elements[id] = {
|
||||
id = player:hud_add(def),
|
||||
def = def
|
||||
}
|
||||
return true
|
||||
end,
|
||||
|
||||
exists = function(self, player, id)
|
||||
if not player then
|
||||
return false
|
||||
end
|
||||
|
||||
local name = player:get_player_name()
|
||||
local elements = self.players[name]
|
||||
|
||||
if not elements or not elements[id] then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end,
|
||||
|
||||
change = function(self, player, id, stat, value)
|
||||
if not player then
|
||||
return false
|
||||
end
|
||||
|
||||
local name = player:get_player_name()
|
||||
local elements = self.players[name]
|
||||
|
||||
if not elements or not elements[id] or not elements[id].id then
|
||||
return false
|
||||
end
|
||||
|
||||
if elements[id].def[stat] ~= value then
|
||||
elements[id].def[stat] = value
|
||||
player:hud_change(elements[id].id, stat, value)
|
||||
end
|
||||
return true
|
||||
end,
|
||||
|
||||
remove = function(self, player, id)
|
||||
local name = player:get_player_name()
|
||||
local elements = self.players[name]
|
||||
|
||||
if not elements or not elements[id] or not elements[id].id then
|
||||
return false
|
||||
end
|
||||
|
||||
player:hud_remove(elements[id].id)
|
||||
elements[id] = nil
|
||||
return true
|
||||
end,
|
||||
}
|
||||
end
|
|
@ -1,5 +1,13 @@
|
|||
lib_utils = {}
|
||||
|
||||
function lib_utils.interval(time, func, ...)
|
||||
local function tick(...)
|
||||
func(...)
|
||||
minetest.after(time, tick, ...)
|
||||
end
|
||||
minetest.after(time, tick, ...)
|
||||
end
|
||||
|
||||
function lib_utils.make_saveload(tab, storage, itemarraykey, registername, class)
|
||||
assert(tab)
|
||||
assert(storage)
|
||||
|
|
Loading…
Reference in New Issue