ld52_olive_harvest/ui/Scheduler.gd

113 lines
2.8 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 slug_o_clock = 0.7
var slug_chance_per_roll = 0.5
var slug_roll_rate = 10
var max_slugs_per_group = 3
var day_num = 0
var time_of_day = 0.0
signal ran_out_of_time
func _start_schedule():
# schedule all events for the day...
for day in range(days_on_this_level):
var days_left = days_on_this_level - day
$Calendar/LabelDays.text = "|".repeat(days_left)
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)
_slug_spawner(parent)
$Timer.start(1 / DAY_PER_SEC)
yield($Timer, "timeout")
$Calendar/LabelDays.text = "end..."
$Timer.start(0.01 / DAY_PER_SEC)
yield($Timer, "timeout")
# Lose due to no time
emit_signal("ran_out_of_time")
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 _slug_spawner(parent: Node2D):
var timer = Timer.new()
timer.one_shot = true
$Timer.add_child(timer)
timer.start(slug_o_clock / DAY_PER_SEC); yield(timer, "timeout")
var num_rolls = ceil((1.0 - slug_o_clock) * slug_roll_rate)
print("num rolls = ", num_rolls)
var interval = 1 / (DAY_PER_SEC * slug_roll_rate)
print("interval = ", interval)
for _roll_num in range(num_rolls):
# wait for our next roll
timer.start(interval); yield(timer, "timeout")
if rand_range(0.0, 1.0) > slug_chance_per_roll:
print("miss.")
continue
var num_slugs = floor(rand_range(0.0, max_slugs_per_group)) + 1
print("lucky you! ", num_slugs)
for slug_num in num_slugs:
var y_coord = -5
if rand_range(0.0, 1.0) < 0.5:
y_coord = 910
var slug_pos = Vector2(rand_range(0.0, 1600.0), y_coord)
var new_slug = preload("res://characters/pests/Slug.tscn").instance()
new_slug.position = slug_pos
parent.add_child(new_slug)
pass
$Timer.remove_child(timer)
func _process(delta):
time_of_day += delta * DAY_PER_SEC
$Clock/ClockHand.rotation = 2 * PI * fmod(time_of_day, 1.0)