root/2d/moon.gd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
extends Node2D

# Declare member variables here. Examples:
# var a = 2
# var b = "text"

# Called when the node enters the scene tree for the first time.
func _ready():
	pass # Replace with function body.
	get_node("Node2D/Polygon2D").setIt(moon_phase())

func moon_phase():
	# https://www.subsystems.us/uploads/9/8/9/4/98948044/moonphase.pdf
	var y = 2019.0
	var m = 12.0
	var d = 26.0
	
	var a = y/100.0
	var b = a/4.0
	var c = 2.0-a+b
	var e = 365.25 * (y + 4716.0)
	var f = 30.6001 * (m+1.0)
	var jd = c+d+e+f-1524.5
	var daysSince = jd - 2451549.5
	var cycles = daysSince / 29.53
	# 0.25 is local format offset
	var offset = 0.5
	var currentCycle = cycles - offset - floor(cycles - offset)
	return currentCycle