extends Spatial signal game_over signal got_treasure(item_type) const LootTable = preload("res://scripts/loot_table.gd") const RockScene = preload("res://scenes/rock.tscn") const GeodeResource = preload("res://item_types/geode.tres") onready var timer : Timer = $Timer onready var rover = $"%rover" onready var level_arrow = $"%LevelArrow" export var play_time: float = 20.0 export var arrow_viz_distance = 10.0 export var geode_loot_count_per_chance = {} var loot_table : SimpleLootTable = null func _ready(): loot_table = LootTable.new(geode_loot_count_per_chance) timer.start(play_time) spawn_rocks(4) func spawn_rocks(count: int): var locations: Array = get_tree().get_nodes_in_group("rock_spawn_location") locations.shuffle() for i in range(min(count, locations.size())): var location = locations[i] var rock = RockScene.instance() rock.treasure_count = loot_table.roll_for_loot() location.add_child(rock) func _on_collection_area_area_entered(area): if area.has_meta("owner"): area = area.get_meta("owner") for i in area.treasure_count: emit_signal("got_treasure", GeodeResource) area.queue_free() func _process(delta): $"%progress_bar".value = timer.time_left * 100.0 / timer.wait_time var distance = rover.transform.origin.z - level_arrow.transform.origin.z var pct = 0.0 if distance <= arrow_viz_distance else ((distance - arrow_viz_distance) / arrow_viz_distance) level_arrow.get_active_material(0).set_shader_param("alpha", min(pct, 1.0)) func _on_Timer_timeout(): emit_signal("game_over") func _on_rover_rover_exit_level(): timer.stop() emit_signal("game_over")