extends Damageable signal gen_started signal gen_finished enum EState {IDLE, WORKING, BLOCKED, BROKEN, NUM_STATES} const States = { EState.IDLE : preload("res://scripts/item_generator/state/idle.gd"), EState.WORKING : preload("res://scripts/item_generator/state/working.gd"), EState.BLOCKED : preload("res://scripts/item_generator/state/blocked.gd"), EState.BROKEN : preload("res://scripts/item_generator/state/broken.gd") } export var gen_item : Resource export var gen_time : float = 5.0 export var gen_count : int = 2 onready var coin_machine = $"%coin_machine" onready var gen_timer = $"%gen_timer" onready var item_dump = $"%item_dump" onready var status_light = $"%status_light" onready var progress_text = $"%progress_text" var state = null var item_slots func _ready(): assert(gen_item != null) item_slots = get_tree().get_nodes_in_group("conveyor_item_slots") assert(item_slots != null) for item_slot in item_slots: item_slot.connect("item_changed", self, "_on_item_slot_item_changed") gen_timer.wait_time = gen_time gen_timer.one_shot = true state = States[EState.BROKEN].new() if start_broken else States[EState.IDLE].new() state.ctx = self state.enter_from(null) print("item_generator: NULL -> ", state.NAME) func _process(delta): state.update(delta) func change_state(new_state): print("crafting_station: ", state.NAME, " -> ", new_state.NAME) new_state.ctx = self state.exit_to(new_state) new_state.enter_from(state) state = new_state func _on_coin_machine_coin_requirement_met(player): state.on_coin_machine_coin_requirement_met(player) func _on_gen_timer_timeout(): state.on_gen_timer_timeout() #Note(asr): dynamically connect item_changed signal #on all nodes in the "item_slots" group. See _ready() func _on_item_slot_item_changed(item): state.on_item_slot_item_changed(item) func _on_item_dump_item_dump_completed(): state.on_item_dump_item_dump_completed() func take_damage(damage : int = 1): .take_damage(damage) state.on_damage_taken()