From 32ae6b3140e80908a1afe128907048b1ebce6fdb Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 8 Apr 2020 21:32:37 +0200 Subject: [PATCH] Add moon phases --- mods/ENVIRONMENT/mcl_moon/API.md | 15 +++++ mods/ENVIRONMENT/mcl_moon/init.lua | 54 ++++++++++++++++++ mods/ENVIRONMENT/mcl_moon/mod.conf | 2 + .../textures/mcl_moon_moon_phases.png | Bin 0 -> 1898 bytes 4 files changed, 71 insertions(+) create mode 100644 mods/ENVIRONMENT/mcl_moon/API.md create mode 100644 mods/ENVIRONMENT/mcl_moon/init.lua create mode 100644 mods/ENVIRONMENT/mcl_moon/mod.conf create mode 100644 mods/ENVIRONMENT/mcl_moon/textures/mcl_moon_moon_phases.png diff --git a/mods/ENVIRONMENT/mcl_moon/API.md b/mods/ENVIRONMENT/mcl_moon/API.md new file mode 100644 index 0000000000..553df0de65 --- /dev/null +++ b/mods/ENVIRONMENT/mcl_moon/API.md @@ -0,0 +1,15 @@ +# `mcl_moon` API +This API has one function: + +## `mcl_moon.get_moon_phase()` + +Returns current moon phase (0-7). + +* 0 = Full Moon +* 1 = Waning Gibbous +* 2 = Last Quarter +* 3 = Waning Crescent +* 4 = New Moon +* 5 = Waxing Crescent +* 6 = First Quarter +* 7 = Waxing Gibbous diff --git a/mods/ENVIRONMENT/mcl_moon/init.lua b/mods/ENVIRONMENT/mcl_moon/init.lua new file mode 100644 index 0000000000..df792651d1 --- /dev/null +++ b/mods/ENVIRONMENT/mcl_moon/init.lua @@ -0,0 +1,54 @@ +local MOON_PHASES = 8 +local MOON_PHASES_HALF = MOON_PHASES / 2 +local SHEET_W = 4 +local SHEET_H = 2 + +mcl_moon = {} +mcl_moon.MOON_PHASES = MOON_PHASES + +mcl_moon.get_moon_phase = function() + local after_midday = 0 + local tod = minetest.get_timeofday() + if tod > 0.5 then + after_midday = 1 + end + return (minetest.get_day_count() + after_midday) % MOON_PHASES +end + +local get_moon_texture = function() + local phase = mcl_moon.get_moon_phase() + local x = phase % MOON_PHASES_HALF + local y + if phase >= MOON_PHASES_HALF then + y = 1 + else + y = 0 + end + return "mcl_moon_moon_phases.png^[sheet:"..SHEET_W.."x"..SHEET_H..":"..x..","..y +end + +local timer = 0 +local last_reported_phase = nil +minetest.register_globalstep(function(dtime) + timer = timer + dtime + if timer < 5 then + return + end + timer = 0 + local phase = mcl_moon.get_moon_phase() + -- No-op when moon phase didn't change yet + if last_reported_phase == phase then + return + end + minetest.log("info", "[mcl_moon] New moon phase: "..phase) + last_reported_phase = phase + local moon_arg = {texture = get_moon_texture()} + local players = minetest.get_connected_players() + for p=1, #players do + players[p]:set_moon(moon_arg) + end +end) + +minetest.register_on_joinplayer(function(player) + player:set_moon({texture = get_moon_texture(), scale=3.75}) +end) diff --git a/mods/ENVIRONMENT/mcl_moon/mod.conf b/mods/ENVIRONMENT/mcl_moon/mod.conf new file mode 100644 index 0000000000..9ff8c04ba8 --- /dev/null +++ b/mods/ENVIRONMENT/mcl_moon/mod.conf @@ -0,0 +1,2 @@ +name = mcl_moon +description = Adds moon phases to the game diff --git a/mods/ENVIRONMENT/mcl_moon/textures/mcl_moon_moon_phases.png b/mods/ENVIRONMENT/mcl_moon/textures/mcl_moon_moon_phases.png new file mode 100644 index 0000000000000000000000000000000000000000..d2ee963a95817bff091ca8245cf2ea57f87602f8 GIT binary patch literal 1898 zcmb7_eK^$V8pogC?>FYnyr3}#6-luZ8D*uzVT8OU!Y;KmLM5fV6xK_>N^Fb9ON-bT zwVAV#EUlLe#$YAAkn(a^##j!ktx4oHvp;*C>zwQSd9Leo-Oqj9_j7%p`+NWMT=Q^u zq>{DB00649ll>t8AS?wa5y4__n4<-Dw0gLCJFHi+9s~mjfgl*dB8-89U?m8~!w3ce zMu;$uh+rs@5F81oM8@GUlyOQVB?3i>K*g;?Q6kdtL^_^C$KkOYOH}YARXiC(jew!N zfw&HXNMR7jssv>;uK+YK2#+VsLa4%_`l(HfL=yp=uc-RL$o>j|?yqmeGgYz5cTE|A+0auC7cA=V<`& z+Rpa2-m%c|4MM!kLWSGe6EPf`rZHZ3ES1(dKdZR-I%B`g`qJa_iqX&uy&pC|S=k@{ z_W~ik)FJ)7)%Bl5lEitQcg{@_IusLSV49IP<}U0#QyU-C8y+)8sA}`x+-+Uh@=RLG zy~Co&e%gHFcmJ_5r>Amupv`ye0!eN73}mh4ce?1z_a|15nMtlkI(Wr0oaR$d%j@Hh zDpHYRah`zXqOKXl98EF*=1A@zu@ySWFL6yXduu{UZfB@#hN$pAor?o89Z4+r(%xwb z!TM%$iOmJuOKJL_o1q$TAK#c>PJ38*u(X)jbGCZX?AFtgt>tP*^!q%B6zNs40=>BK zuiervi-7ytzfEj&{-Vqx;IeG@kUocJw}peAjR=_2j!IB92rZa!@XU3{IuTmXrd+{F zOBv?Dqq05!=8tZu4|bFj@uvsgy+0BR^WheL7GK7G*0p@T`qwjo z7lxjN`A>$bJDy}IBV>xyv-|B8?p)eEv!VWH$Kx$F^MxBkmZ$d|XngUKtwy!&?%1>o zb%aKAyWVTkhjPA~pG>d_7-{?Jdg_PLox2CN9+z)YKC6nEuoa)p3~7L77S=vD9pIch zlQw!=NJyAJu@rM`jafwE@KoGU1Ejo#Lqgmh;|{W$*Q%`|&=}*Q{8TIA0JX~BR}k`j zHdJL6AW^F~Z*Xvv{~#YMp7;?QUR_CDL^dPQOIsQ6FFyP6hSltps(x3(lEC|X)ow#UE2q6*b2`x>i(v>1se#aa8?d}BwY9UvPDE)r@g48 z3~CZVb5M;vI8a0uwC6xI-e_LcV9^v1p7CmW3|}>Xr`~%5<07J9wz(#XS=ZCXVT`QY zsNdA2xJw>4x;sAgnTvkLtlwhmjs(|~69}3I&R+Jh!KZFYpoAOjvtxX%$C%!|VM|Wm z!DNy503;AfY;$js3u}_tZ`AE*ppmu9C&@Hew%nfiCCw7dMGkl`O;rB4Bd^uW{^YeD z#$Dr)MP70btJU+Dah87NV_vpod#Y!ZPnps2&^NP2Zk4-QUoyg?jNGgK)-@X)HS+;T zw}}gNb*|{|`$596yYU~H=j$p92#X(OgRVdm2VCaox49iw`uHww=6vB-q{5Nho^Jl^ z{`Q1B!J2m_1G`TB?ig2gs>!D&-DjaP#C&8;eQm8tA{eH}Qov*x2P{8vsr6lDckBiS-XWQDc-`es2$)C`_o|8`RUx$L;VXY9tm*te z%`h@5s_FAT)d9G#R)BsZ#EGDA>viP0u)uidGFG5-UmiuK9st7y