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 000000000..553df0de6 --- /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 000000000..df792651d --- /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 000000000..9ff8c04ba --- /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 zcmb7FdpMN&9{;`XJM+%WYc6Pvp+ZvZL`JN1au~PVMc9)p5h`7jOJUvK%4G|UON-bT z+RWKVEe@)|7_6iVDREc^JC0UclgKr*kA2Q_&U5}e-{M>E z6%=cK-j` z?&|8wvT%L_0J_oH-o_^m8o5SFn6Oahb@xS%glDQxHXX^JchAo%QeI{6o3Og@sJdn> z{CxjMt;Z|-BK}$|WK=q2eXzXxlSq;@ALNsNU4#$EM(dko7mj-f`%gC}#P&zTj+1IT ze6)J4O4^=E8+kX`)QO+8uKgA;KJN5H&Iz{uj#DgYjF^F}H2qGMp8o#W>Jc-^)hGw= zIHuElI==VnVPc64TZ*w72?@KdW9UkBtF{aRE8 zNv2BEzzX#I{J%`4Jr;p?@_v98I*$ZiW4KNA@^w=p_VML)b)=HOM} zkb5k=xI?LiotZuo1dmPZ{`>2$WN}FIi5u$Yev!UBmwR_dH5olM`2K@`D9nf3___QE z&eNXdb9KL*4n9Bp^kl$PxSHc}wi1F-rCz=7F7f6vZ<`IjetI;)LW?ilAliFsw|n#R z7aUcZO>fucUAQAOs?+m9gE5@{-TYLdMc`=1*H<$>R_-(%+kKoYiO2#6hg~TjvWx_xE?n4dgIO(aY zHvbHR(~K2{`-#01mjTDPv|LBNx)h@#Oz3Eh=e}K;x5`%UzyIC@vT{^wX_;*O?2)ze z-?u5WpglX$CntA_E1#K^&m6QB$T#ZZEJYh6H}0Ld&Pz&4ud+msFBFLx!k*9o^NIP^ z!YL9v`C_zpO}@-*?z-SLdO=b~G!|>8EH9~>TjKQR47{o1BRFJ<1{wB#Th|6S#xRwq z%o8)=JcypdO-qHysDbC=C8-Q%^9qIVv|Ja*_ZYzjBBq!&MB@ZDhT@Z-{t?t@5OWt! zvwkcxz@eCU4$k63dS79JSzU1srNS45x`Db=(H-6G?5GQp!x3?jbgH1+8>){}0euhG zMYBr1a$XN_)sX()bSIi=$#3F~k440Pfp7n>_k?jnmn%mXZh?oDP8ELBL$(6B3$UaR zde_4ik#(H*;F2n+MFh=34fepj6ccpjLk&K7VeL@qG!UNlZg~W!>BG|>e1K6YSuoq$ z5Y1}p>)soc_W^FMHN+v3*CPYx*$+F9c^U`dXtIn-i%K`nGn= zZ*-Y&OgC)FAK0HN@)?8#LWxbm4XmUgne$f7jt-jHyL^*PLMN6xbN)u(3+AE*eU@bR ze%w*mZf1Y{av$@S(dc4OY9G7Z>*qJXIVhl{Ag=@1(LbD%+GIgJ4F2SK6B<= z$=8&U(Sp8S{_MWa#G9cSH>ZMoPWY67o6ImGoQK$gtY#G6EK5#>26;9N$~8DTgfy#ue4z?D&w&YOJj>>D6g zmAc=%%x`N`ut!{VLvwGCmlhbG@-Y8Up=9mzrDmobYpK(7d9989I5=}P$|6#Mr<09L ziYw|nH)>~bHA5^O$8EYqU}?A=82pv%615)wogtZDku(`BAO}lABJ*DP6$t&x6i{cw V?To$5R-g3;