From 77f6c3695ced35b8b215d75c282d5ded41879d25 Mon Sep 17 00:00:00 2001 From: Till Affeldt Date: Fri, 24 Apr 2020 01:38:13 +0200 Subject: [PATCH] Improve classic textures, imprive Climate API compatability, store less data overall --- README.md | 4 +- ca_weathers/moon_phases.lua | 106 ++++++++++++++++++++++++++++ init.lua | 137 ++++++++++++++++++++++-------------- mod.conf | 2 +- settingtypes.txt | 2 +- textures/moon_1_classic.png | Bin 610 -> 5980 bytes textures/moon_2_classic.png | Bin 638 -> 6044 bytes textures/moon_3_classic.png | Bin 576 -> 6044 bytes textures/moon_4_classic.png | Bin 269 -> 5959 bytes textures/moon_5_classic.png | Bin 545 -> 6030 bytes textures/moon_6_classic.png | Bin 602 -> 6029 bytes textures/moon_7_classic.png | Bin 620 -> 5994 bytes textures/moon_8_classic.png | Bin 75 -> 5850 bytes 13 files changed, 195 insertions(+), 56 deletions(-) create mode 100644 ca_weathers/moon_phases.lua diff --git a/README.md b/README.md index 4860b09..d4d298b 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,7 @@ Make sure you have the latest version installed or [update your game](https://ww ## Dependencies This mod has no hard dependencies whatsoever, so you can use it as you will. -However, I do recommend using the [skylayer](https://gitlab.com/rautars/skylayer) mod. -With the Minetest's new sky API it is likely for more mods to change the sky configuration, -possibly resulting in conflict. This utility mod can help circumvent these issues if both mods use it. +If you are also using *climate_api* then it will use the included skybox registration instead of overriding the player configuration. Thus, moon_phases will will be compatible with your weather packs. ## Commands This mod comes with two commands to print or change the current moon phase. diff --git a/ca_weathers/moon_phases.lua b/ca_weathers/moon_phases.lua new file mode 100644 index 0000000..4645873 --- /dev/null +++ b/ca_weathers/moon_phases.lua @@ -0,0 +1,106 @@ +local name = "moon_phases:phase" +local mod_climate_api = minetest.get_modpath("climate_api") ~= nil + +local GSCYCLE = 0.5 -- global step cycle +local DEFAULT_LENGTH = 4 -- default cycle length +local DEFAULT_STYLE = "realistic" -- default texture style +local PHASE_COUNT = 8 -- number of phases to go through + +-- retrieve mod configuration +local PHASE_LENGTH = minetest.settings:get("moon_phases_cycle") or DEFAULT_LENGTH +local TEXTURE_STYLE = minetest.settings:get("moon_phases_style") or DEFAULT_STYLE + +local moon_phases = {} +local state = minetest.get_mod_storage() +local phase = 1 + +-- return the current moon phase +function moon_phases.get_phase() + return phase +end + +-- set the current moon phase +-- @param phase int Phase between 1 and PHASE_COUNT +function moon_phases.set_phase(nphase) + phase = math.floor(tonumber(nphase)) + if (not nphase) or nphase < 1 or nphase > PHASE_COUNT then + return false + end + local day = params.day_count + local date_offset = state:get_int("date_offset") + local progress = (day + date_offset - 1) % PHASE_LENGTH + 1 + local phase_offset = (nphase - phase + PHASE_COUNT) % PHASE_COUNT + local add_offset = (phase_offset * PHASE_LENGTH) - progress + if add_offset == 0 then add_offset = nil end + phase = nphase + state:set_int("date_offset", add_offset) +end + +-- set the moon's texture style for the given player +function moon_phases.set_style(player, style) + if style ~= "classic" and style ~= "realistic" then + return false + end + local meta_data = player:get_meta() + if style == DEFAULT_STYLE then style = nil end + meta_data:set_string("moon_phases:texture_style", style) + return true +end + +-- calculate the current sky layout for a given player +local function generate_effects(params) + local override = {} + + local time = params.time + local day = params.day_count + local date_offset = state:get_int("date_offset") + day = day + date_offset + if time > 0.5 then + day = day + 1 + end + + local meta_data = params.player:get_meta() + local style = meta_data:get_string("moon_phases:texture_style") + if style ~= "classic" and style ~= "realistic" then + style = TEXTURE_STYLE + end + + phase = ((math.ceil(day / PHASE_LENGTH) - 1) % PHASE_COUNT) + 1 + override["climate_api:skybox"] = { + moon_data = { + texture = "moon_" .. phase .. "_" .. style .. ".png", + scale = 0.8 + } + } + return override +end + +local function update_sky(player) + local params = {} + params.time = minetest.get_timeofday() + params.day_count = minetest.get_day_count() + params.player = player + local sky = generate_effects(params) + player:set_moon(sky.moon_data) +end + +local timer = 0 +local function handle_time_progression(dtime) + timer = timer + dtime + if timer < GSCYCLE then return end + for _, player in ipairs(minetest.get_connected_players()) do + update_sky(player) + end + timer = 0 +end + +if mod_climate_api then + -- register moon cycles as weather preset + climate_api.register_weather(name, {}, generate_effects) +else + -- set the moon texture of newly joined player + minetest.register_on_joinplayer(update_sky) + + -- check for changes and update player skies + minetest.register_globalstep(handle_time_progression) +end \ No newline at end of file diff --git a/init.lua b/init.lua index 5f19121..4b070d0 100644 --- a/init.lua +++ b/init.lua @@ -1,96 +1,132 @@ +local mod_climate_api = minetest.get_modpath("climate_api") ~= nil local mod_skylayer = minetest.get_modpath("skylayer") ~= nil local modpath = minetest.get_modpath("moon_phases"); local GSCYCLE = 0.5 -- global step cycle local DEFAULT_LENGTH = 4 -- default cycle length -local DEFAULT_STYLE = "realistic" -- default texture style +local DEFAULT_STYLE = "classic" -- default texture style +local PHASE_COUNT = 8 -- number of phases to go through + +-- retrieve mod configuration +local PHASE_LENGTH = 4--minetest.settings:get("moon_phases_cycle") or DEFAULT_LENGTH +local TEXTURE_STYLE = minetest.settings:get("moon_phases_style") or DEFAULT_STYLE + +local sky_color = { + "#1d293aff", + "#1c4b8dff", + nil, + "#579dffff", + nil, + "#1c4b8dff", + "#1d293aff", + "#000000ff" +} + +local horizon_color = { + "#243347ff", + "#235fb3ff", + nil, + "#73aeffff", + nil, + "#3079dfff", + "#173154ff", + "#000000ff" +} moon_phases = {} local state = minetest.get_mod_storage() -if not state:contains("day") then - state:from_table({fields = { - day = 1, - phase = 1, - change_time = 1 - }}) + +-- calculate current moon phase from date +-- and stored date offset +local function calculate_phase() + local time = minetest.get_timeofday() + local day = minetest.get_day_count() + state:get_int("date_offset") + if time > 0.5 then + day = day + 1 + end + return ((math.ceil(day / PHASE_LENGTH) - 1) % PHASE_COUNT) + 1 end --- retrieve mod configuration -local PHASE_LENGTH = minetest.settings:get("moon_phases_cycle") or DEFAULT_LENGTH -local TEXTURE_STYLE = minetest.settings:get("moon_phases_style") or DEFAULT_STYLE +local phase = 1 + +-- return the current moon phase +function moon_phases.get_phase() + return phase +end -- set the moon texture of a player to the given phase local function set_texture(player, phase) - local sl = {} + if not player.get_stars then return end -- check for new sky API local meta_data = player:get_meta() local style = meta_data:get_string("moon_phases:texture_style") if style ~= "classic" and style ~= "realistic" then style = TEXTURE_STYLE end local texture = "moon_" .. phase .. "_" .. style .. ".png" - sl.name = "moon_phases:custom" - sl.moon_data = { + local name = "moon_phases:cycle" + local sky = {} + sky.sky_data = { + type = "regular", + sky_color = { + night_sky = sky_color[phase], + night_horizon = horizon_color[phase] + } + } + sky.moon_data = { visible = true, texture = texture, scale = 0.8 } - if mod_skylayer then - skylayer.add_layer(player:get_player_name(), sl) + local playername = player:get_player_name() + if mod_climate_api then + sky.priority = 0 + climate_api.skybox.add_layer(playername, name, sky) + elseif mod_skylayer then + sky.name = name + skylayer.add_layer(playername, sky) else - player:set_moon(sl.moon_data) - end -end - --- update moon textures of all online players -local function update_textures() - local phase = state:get_int("phase") - for _, player in ipairs(minetest.get_connected_players()) do - set_texture(player, phase) + player:set_sky(sky.sky_data) + player:set_moon(sky.moon_data) end end -- check for day changes local function handle_time_progression() - local time = minetest.get_timeofday() - local day = state:get_int("day") - local phase = state:get_int("phase") - local change_time = state:get_int("change_time") == 1 - if time >= 0.5 and change_time then - day = day + 1 - state:set_int("day", day) - if day % PHASE_LENGTH == 0 then - state:set_int("phase", (phase % 8) + 1) - state:set_int("change_time", 0) - update_textures() + local n_phase = calculate_phase() + if n_phase ~= phase then + phase = n_phase + minetest.log(dump2(phase, "htp: phase")) + minetest.log(dump2(n_phase, "htp: n_phase")) + for _, player in ipairs(minetest.get_connected_players()) do + set_texture(player, phase) end - elseif time < 0.5 and not change_time then - state:set_int("change_time", 1) end end --- return the current moon phase -function moon_phases.get_phase() - return state:get_int("phase") -end - -- set the current moon phase --- @param phase int Phase between 1 and 8 -function moon_phases.set_phase(phase) - phase = math.floor(tonumber(phase)) - if (not phase) or phase < 1 or phase > 8 then +-- @param phase int Phase between 1 and PHASE_COUNT +function moon_phases.set_phase(nphase) + nphase = math.floor(tonumber(nphase)) + if (not nphase) or nphase < 1 or nphase > PHASE_COUNT then return false end - state:set_int("phase", phase) - update_textures() + local day = minetest.get_day_count() + local date_offset = state:get_int("date_offset") + local progress = (day + date_offset) % PHASE_LENGTH + local phase_offset = (nphase - phase + PHASE_COUNT) % PHASE_COUNT + local add_offset = ((phase_offset * PHASE_LENGTH) + date_offset - progress) + state:set_int("date_offset", add_offset) + handle_time_progression() return true end -- set the moon's texture style for the given player function moon_phases.set_style(player, style) - if style ~= "classic" and style ~= "realistic" then + if style ~= nil and style ~= "classic" and style ~= "realistic" then return false end + --if style == DEFAULT_STYLE then style = nil end local meta_data = player:get_meta() meta_data:set_string("moon_phases:texture_style", style) set_texture(player, state:get_int("phase")) @@ -99,12 +135,11 @@ end -- set the moon texture of newly joined player minetest.register_on_joinplayer(function(player) - local phase = state:get_int("phase") set_texture(player, phase) end) -- check for day changes and call handlers -local timer = 0 +local timer = math.huge minetest.register_globalstep(function(dtime) timer = timer + dtime if timer < GSCYCLE then return end diff --git a/mod.conf b/mod.conf index 61b692a..994f734 100644 --- a/mod.conf +++ b/mod.conf @@ -10,4 +10,4 @@ square vanilla themed 16x16px textures Requires at least Minetest 5.2.0 """ -optional_depends = skylayer \ No newline at end of file +optional_depends = climate_api, skylayer \ No newline at end of file diff --git a/settingtypes.txt b/settingtypes.txt index 55cf151..5272e6e 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -1,2 +1,2 @@ moon_phases_cycle (Change moon phase every X days) int 4 -moon_phases_style (Choose a default texture style) enum realistic classic,realistic \ No newline at end of file +moon_phases_style (Choose a default texture style) enum classic classic,realistic \ No newline at end of file diff --git a/textures/moon_1_classic.png b/textures/moon_1_classic.png index 2fd3f1bba38d225ea4819b8cd49c6ef2a0d3e46f..2b67cc9ae6313570ac3c63203f08aa5292d6e50c 100644 GIT binary patch literal 5980 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 delta 614 zcmV-s0-61sFa89OBYy%#NklCa`1;53W9c@qhN-$4{TDz208mwp}}l zq9_c*FbKmim&?2yjqI9t%Ka8U21i|cVwmg$DvoanGZxYaToquYzO08By(=>z-XUdt$n1SuM zQU{Iz3os@@(==ILUdFa<+U+)$Wf24cQ4}3lG9CxMH-TDw{C5W5_ZbWZ zv|26J*VozE*R;+At#4oZn_Jt)WRy40bXy3NQYfVW$mMdB%Vipk2K`?v?>;nFh7*D>n!oh~ zXaGeZ8~;cJ%m6apAL^1lBgOmK>sK~n1O5+x08C%m(ag8&2><{907*qoM6N<$g7KUq AVE_OC diff --git a/textures/moon_3_classic.png b/textures/moon_3_classic.png index e38175e50ce744a1f332db999eed01cbfecb8242..402ed45996bbf71922eb58ebb2008d8bcdfc77e7 100644 GIT binary patch literal 6044 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 qzt8|C(jh~umz7ZpWO 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 delta 242 zcmVBTLZK)hS9GVh=lLF~t`aSj7wFPY|qif_)STf@_VYu2ur_IG~gY4gz+& zZS-WbYoWzYf?&}Jo}(m*fJr=#zRb`Dyx=xLFv*MZHRMJ46eWF`b}hg|g5V9hU%1QW s;~_5MU2G%609!H90H1ir4etF1zvLe<9gLpl5&!@I07*qoM6N<$g36q1djJ3c diff --git a/textures/moon_5_classic.png b/textures/moon_5_classic.png index 4536a3ab1d4bcbf3e4ee1cc826b0445730dd6ef9..36abdd1c4aa944091e4c1e52def44e69771aaeaa 100644 GIT binary patch literal 6030 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 UP;}>XusR7DUIFxydC?jF0)Pz`%m4rY delta 578 zcmV-I0=@l>FWLldEvQUcP-fPOg^kZq zBqqKEh=B=-5hjGh2S99fx6SU`q#_eedA@UTr@=91bx}6DcK9N`w#yAuc2o>igcqM^9fHK+rsF=Lf+y zuIsY8x=J>iWqEm-QmI6-SR|LrkxHdzIj*+7O-q0N?7_8+D<&1N%sjS+ArUc7vz z27^=Uobb;$IXR(PttJUPKo@`TUeOCY*}{3vNCf3TEhI9-n?I0TMrE&&gZgEIvu}wHX0emPo6U;qFB diff --git a/textures/moon_7_classic.png b/textures/moon_7_classic.png index 14a3abe8aef44c5e1228ccc9de2ae58a09b70795..0b44ad7ac3874fd7d12a3bb316207e79c69eb86f 100644 GIT binary patch literal 5994 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 delta 46 zcmcbm>pekPgF(pC#WBR*55F9wrV31{MJZ##Z}PMGQdT>FVdQ&MBb@03O>5 A*#H0l