63 lines
1.5 KiB
GDScript
63 lines
1.5 KiB
GDScript
extends Control
|
|
|
|
|
|
var DAY_PER_SEC = 0.02
|
|
|
|
|
|
func _ready():
|
|
# TODO set up calendar
|
|
|
|
# set up clock
|
|
call_deferred("_real_ready")
|
|
|
|
|
|
func _real_ready():
|
|
_set_up_postie_clock()
|
|
|
|
_start_schedule()
|
|
|
|
|
|
func _set_up_postie_clock():
|
|
for start_time in postie_times:
|
|
var end_time = start_time + postie_length
|
|
var start_segment = round(10 * start_time)
|
|
var end_segment = round(10 * end_time)
|
|
for i in range(start_segment, end_segment):
|
|
$Clock/PostieRegions.get_child(i % 10).visible = true
|
|
|
|
var days_on_this_level = 5
|
|
var postie_times = [0.1]
|
|
var postie_length = .3
|
|
|
|
var day_num = 0
|
|
var time_of_day = 0.0
|
|
|
|
|
|
func _start_schedule():
|
|
# schedule all events for the day...
|
|
for _day in range(days_on_this_level):
|
|
var parent = find_parent("Level*").get_node("World/YSort")
|
|
for postie_time in postie_times:
|
|
# 5s early so the postie has time to drive there.
|
|
_postie_in(parent, (postie_time / DAY_PER_SEC) - 5.0, postie_length / DAY_PER_SEC)
|
|
|
|
$Timer.start(1 / DAY_PER_SEC)
|
|
yield($Timer, "timeout")
|
|
|
|
|
|
func _postie_in(parent: Node2D, time: float, idling_time: float):
|
|
var timer = Timer.new()
|
|
timer.one_shot = true
|
|
$Timer.add_child(timer)
|
|
timer.start(time); yield(timer, "timeout")
|
|
$Timer.remove_child(timer)
|
|
var new_postie = preload("res://vehicles/Postie.tscn").instance()
|
|
new_postie.position = Vector2(-500, 0)
|
|
new_postie.idling_time = idling_time
|
|
parent.add_child(new_postie)
|
|
|
|
|
|
func _process(delta):
|
|
time_of_day += delta * DAY_PER_SEC
|
|
$Clock/ClockHand.rotation = 2 * PI * fmod(time_of_day, 1.0)
|