extends Control class_name Tutorial const STEP_SCENE = preload("res://gui/game/tutorial/step_gui/step_gui.tscn") var indicators : Array[InGameIndicator] @export var player : Player @export var region : Region @onready var steps : Array[Step] = [ Step.new( "USE_YOUR_DETECTOR_TO_FIND_THE_BATTERY", (func (): return player.position.distance_to(Vector2.ZERO) < 600) ), Step.new( "DIG_A_TALION_VEIN_WITH_SHOVEL", (func (): for e in region.entity_container.get_children(): if e is ItemObject and e.item is Seed: return true return false) ), Step.new( "TAKE_A_SEED", (func (): return player.data.inventory.items.find_custom( func(i:Item): return i is Seed ) != -1) ), Step.new( "PLANT_SEED_IN_FERTILE_ZONE", (func (): for e in region.entity_container.get_children(): if e is Plant: return true return false) ), Step.new( "RECHARGE_TO_PASS_DAYS", (func (): return region and region.data and region.data.charges != 10) ), Step.new( "GAIN_FIRST_PLANT_POINT", (func (): return region.data.get_score() != 0) ), Step.new( "HARVEST_MATURE_PLANTS_WITH_SHOVEL", (func (): for e in region.entity_container.get_children(): if e is Plant and e.harvested: return true return false) ) ] func _ready(): if region and region.data and "tutorial" in region.data.flags: setup_gui() show() else: hide() func setup_gui(): for s in %Steps.get_children(): s.queue_free() for s in steps: var new_step = STEP_SCENE.instantiate() as TutorialStepGui new_step.suceeded = false new_step.text = s.get_text() %Steps.add_child(new_step) func _process(_d): if region and region.data and "tutorial" in region.data.flags: for i in len(steps): var step := steps[i] var step_gui := %Steps.get_children()[i] as TutorialStepGui step.update_succeeded() step_gui.suceeded = step.succeeded class Step: var text : String : get = get_text var is_step_over_callable : Callable var succeeded = false func _init( _text : String = "", _is_step_over_callable : Callable = (func():return false) ): text = _text is_step_over_callable = _is_step_over_callable func get_text() -> String: return text func update_succeeded() -> bool: if not succeeded: succeeded = is_step_over_callable.call() return succeeded