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 = {}
|
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)
|
function lib_utils.make_saveload(tab, storage, itemarraykey, registername, class)
|
||||||
assert(tab)
|
assert(tab)
|
||||||
assert(storage)
|
assert(storage)
|
||||||
|
|
Loading…
Reference in New Issue