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 00000000..553df0de --- /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 00000000..df792651 --- /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 00000000..9ff8c04b --- /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 zcmeAS@N?(olHy`uVBq!ia0y~yU}RumU})fAW?*2rob7JGz`$@gz$e5NB+9_Zz{teF z$jr#d#K_3Z$i&RZ#KOqL%E-jV#LULT%+AEj!NkJB%)-IU%E`>a$->IT!p6nI#?8XY z$;!^d%FfFILOiS-d~6*2Y@GZoY&@(Wh5#FL*Fb4>UaPWw*a|yC@ z3vuv>a`1?8@``ctigWTwaPdj7bBl2CNpkT^aq&rU@=9i zba4!+V7xPhz50=bfWyg)g?BQ$#UJlTYUexo_0#|QtG#ZI>>5w3S$99P?DA*1Q@`Ev zY-cU!U*_8L(WY+|zKoyjb0^cltxW<(G4}SC?PTD}Tto=}3s&1-sb? z&pz1huvmiU(MGu`uVNoQ^f>cDE75+c)~rL@^IkLBNk!(&%bk<{C&}bcUy*BYg^0)3 zwg&6I$Gg_GGtWOTeSw6RsARI({Wi0X=xJ{&*2%YAV%hiFa$D-cMZKbusRI3f3o04P zkJm}~ExY`Zhuv;w%R>7y$Hs0IQ8O%=TY4U+iN3<{u_=&n#44BNVN2 zEr5gPK`X;=#`9&*jUSx0h+8}9$x~I&u+&F0K(&&z$wt zHE^2i#PrNrN4VEXbhq6}V7mXve8u(SbqA97X3Z5Zz5C!w>BRNgYdF|)ZoK~(ox;@5 zbg+M7|0Aulr+<}hzMGp^cKd90?6XW!_Y4VcW-guwffwF2JACP0Wpexa*|cg4x&GzC zd#rQJefOTfq$R}bc;UFLQG+|Xt&|G!MiCoVnOPhNsOCJ;tmPzG~4a!^I^${oAaNpWQh9nyZr~V z9COJ}Wf7)hp>Av%o3+|n{y5%BWop&`uj9{p;ZY}pmj1kj3LpObED>B@ePn;7!JFS- z?Rv#8?|g5_Xy-1vZ{OqnfBky&pla)R6D;-E&SV=MSa!~E;p+&e1s|l98pQq|Wc;9i z;n7To+S<0&Hf$N+XB^;PemW)A?9tc#)1R?R)HM|cubceTBR@7h6YPrCXGEJ2Y7GtYQ=3&X?Xl?Yr=MolJ!ij_NVq}G%%J_YBh-UGpdAf zE%>B#U;^i&P&USs4B{R$)+(t<6g3`-&#Nfp<5_Srm~l&mAj8GoAWM7Z1x~nrTUqkK z+Z}6*MQr+aI6SchVXm!LmjWKwC_t9b}#c-6#3$&(}E9P3^trB7eIl%heN@` zvfL9m_kv-0Zt%VnOs(onFFuAa=+5I<@M-_H zVzC_;j~IyD`#oi+?7sg?xgP5*ef&bxOQrWy%PV0@RGatiV38TYvu5~G zbR*>F(+w-Nryn+P$>_W&vQ+opkA#+s5{CniJ(f_}a3W#SA+`3vO`)rG(lXzC((&0~ zboi1;cCn7%Cacq*N{U~9W_X}_V77vMvx?J_Ln6*o;KrN-nev@kqQBU_;Wy(`U$3uU zRehpZzrF8%T{=64bN0Py7ccaGayweHI7M>tv&7R`uiPtFXYC8!))V@DL#o-mf1>~X z?b{Q%b5G>2$L6~P;@920ysI3qD|L~=~N-bAIk^O_C3_gJp z43&usqp!_aUMO?TfT8Oi1Iy1<@9Lf7XGAW_Vh6;IiO>B0Ne+*kZ`=w9Y}Q zVaJ{~%mQER7(C~*DBR)qV7_qedM!iOJ$8kclNrucF?FVdQ&MBb@0J{DRb^rhX literal 0 HcmV?d00001