72 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
goal: realtime to in game time conversion
 | 
						|
There is no need to keep days
 | 
						|
 | 
						|
minecraft day is 0 - 24000 ticks
 | 
						|
where 6000 ticks is noon (peak sun) and 18000 is midnight (peak moon)
 | 
						|
 | 
						|
irl day is 0 - 86400 seconds
 | 
						|
 | 
						|
0. s = epoch % 86400 to get seconds since midnight
 | 
						|
            ^
 | 
						|
       (* scale) here
 | 
						|
1. t = s / 72.0 to fit into minecraft day
 | 
						|
2. t = t * 20 to convert that to ticks
 | 
						|
3. t = t - 6000 to align noon and midnight
 | 
						|
   this leaves us with negative time, so
 | 
						|
4. t = floorMod(t, 24000) to wrap if negative
 | 
						|
 | 
						|
example:
 | 
						|
epoch = 1713593340
 | 
						|
 | 
						|
0. getting seconds since midnight
 | 
						|
   s = epoch % 86400
 | 
						|
   s = 1713593340 % 86400
 | 
						|
   s = 22140
 | 
						|
 | 
						|
1. conversion to minecraft day length
 | 
						|
   gs = s / 72.0
 | 
						|
   gs = 22140 / 72.0
 | 
						|
   gs = 307.5
 | 
						|
   
 | 
						|
2. to ticks
 | 
						|
   t = gs * 20
 | 
						|
   t = 307.5 * 20
 | 
						|
   t = 6150
 | 
						|
   
 | 
						|
3. step 3
 | 
						|
   t = t - 6000
 | 
						|
   t = 6150 - 6000
 | 
						|
   t = 150
 | 
						|
 
 | 
						|
4. wrapping
 | 
						|
   t = floorMod(150, 24000)
 | 
						|
   t = 150
 | 
						|
   
 | 
						|
 
 | 
						|
goal: frequency of time update
 | 
						|
 | 
						|
t = 72 / scale
 | 
						|
t is the period, in ticks of course
 | 
						|
 | 
						|
to see how many irl seconds a tick represents:
 | 
						|
s = 3.6 * scale
 | 
						|
(from 1 / (1/72 * 20 * scale))
 | 
						|
 | 
						|
however, some scales result in fractions
 | 
						|
here's how many in game aligned seconds have passed at the end of a real day:
 | 
						|
  84000 / 72 * scale * floor(72/scale)
 | 
						|
for scale 0.99: 83160
 | 
						|
so we'll be 14 minutes behind
 | 
						|
 | 
						|
solution? for now let's warn and update time every tick
 | 
						|
to check:
 | 
						|
scale * floor(72/scale) == 72
 | 
						|
 | 
						|
 | 
						|
goal: offsetting by player position
 | 
						|
 | 
						|
t = (longitude / 15) * 1000 * scale
 | 
						|
 | 
						|
accounting for sunrise and sunset
 | 
						|
TODO, idk yet without 
 | 
						|
 |