|
1 | 1 | extends CanvasModulate |
2 | 2 |
|
| 3 | +const MINUTES_PER_DAY = 1440 |
| 4 | +const MINUTES_PER_HOUR = 60 |
| 5 | +const INGAME_TO_REAL_MINUTE_DURATION = (2 * PI) / MINUTES_PER_DAY |
| 6 | + |
3 | 7 |
|
4 | 8 | signal time_tick(day:int, hour:int, minute:int) |
5 | 9 |
|
6 | 10 |
|
7 | 11 | @export var gradient_texture:GradientTexture1D |
8 | | -@export var TIME_MULTIPLIER = 20.0 # speeds up the time |
9 | | -@export var INITIAL_HOUR = 12 # can be between 0-23 |
| 12 | +@export var INGAME_SPEED = 20.0 |
| 13 | +@export var INITIAL_HOUR = 12: |
| 14 | + set(h): |
| 15 | + INITIAL_HOUR = h |
| 16 | + time = INGAME_TO_REAL_MINUTE_DURATION * MINUTES_PER_HOUR * INITIAL_HOUR |
10 | 17 |
|
11 | 18 |
|
12 | | -# let us divide one full cycle by the minutes of a day! |
13 | | -var time_scale:float= ((2 * PI) / 1440) * TIME_MULTIPLIER |
14 | 19 | var time:float= 0.0 |
15 | 20 | var past_minute:int= -1 |
16 | | -var real_time_minute_duration:float |
17 | 21 |
|
18 | 22 |
|
19 | 23 | func _ready() -> void: |
20 | | - real_time_minute_duration = (2 * PI) / 1440 |
21 | | - time += real_time_minute_duration * 60 * INITIAL_HOUR |
| 24 | + time = INGAME_TO_REAL_MINUTE_DURATION * MINUTES_PER_HOUR * INITIAL_HOUR |
22 | 25 |
|
23 | 26 |
|
24 | 27 | func _process(delta: float) -> void: |
25 | | - time += delta * time_scale |
| 28 | + time += delta * INGAME_TO_REAL_MINUTE_DURATION * INGAME_SPEED |
26 | 29 |
|
27 | | - var value = (sin(time - PI / 2) + 1.0) / 2.0 |
| 30 | + var value = (sin(time - PI / 2.0) + 1.0) / 2.0 |
28 | 31 | self.color = gradient_texture.gradient.sample(value) |
29 | 32 |
|
30 | 33 | _recalculate_time() |
31 | 34 |
|
32 | 35 |
|
33 | 36 | func _recalculate_time() -> void: |
34 | | - var total_minutes = int(time / real_time_minute_duration) |
35 | | - var minutes_in_day = total_minutes % 1440 |
36 | | - var hours = int(minutes_in_day / 60.0) |
37 | | - var minutes = int(minutes_in_day % 60) |
38 | | - var day = int(total_minutes / 1440.0) |
39 | | - if past_minute != minutes: |
40 | | - past_minute = minutes |
41 | | - time_tick.emit(day, hours, minutes) |
| 37 | + var total_minutes = int(time / INGAME_TO_REAL_MINUTE_DURATION) |
| 38 | + |
| 39 | + var day = int(total_minutes / MINUTES_PER_DAY) |
| 40 | + |
| 41 | + var current_day_minutes = total_minutes % MINUTES_PER_DAY |
| 42 | + |
| 43 | + var hour = int(current_day_minutes / MINUTES_PER_HOUR) |
| 44 | + var minute = int(current_day_minutes % MINUTES_PER_HOUR) |
| 45 | + |
| 46 | + if past_minute != minute: |
| 47 | + past_minute = minute |
| 48 | + time_tick.emit(day, hour, minute) |
42 | 49 |
|
0 commit comments