extends Unit class_name Citizen signal task_available(task: CitizenManager.Task) var task: CitizenManager.Task = null var carried_item: ItemNode = null const item_node_scene: PackedScene = preload("res://objects/resource.tscn") func _process(delta: float) -> void: super(delta) $Body.flip_h = !(facing >= PI/2 or facing <= -PI/2) $Arms.flip_h = !(facing >= PI/2 or facing <= -PI/2) $Body.z_index = 0 if (facing > 0) else 1 $Body.frame = 0 if (facing > 0) else 1 #target = get_global_mouse_position() func assign_task(t: CitizenManager.Task): task = t var ok: bool = await task.execute(self) if !ok: task_available.emit(task) task = null func pickup_item_from_building(item: Item, building: Machine) -> bool: if building.fetch_item_from_storage(item, 1): var item_node: ItemNode = item_node_scene.instantiate() pickup_item_node(item_node) item_node.item_type = item return true return false func store_item_in_contruction_site(construction_site: Building) -> bool: if carried_item == null: return false construction_site.add_build_material(carried_item) return true func store_item_in_machine(machine: Machine) -> bool: if carried_item == null: return false if !machine.can_accept_item(carried_item.item_type): return false return machine.offer_item(carried_item) func pickup_item_node(item_node: ItemNode): $Arms.add_child(item_node) #item_node.z_index = -1 item_node.position = Vector2(0,0) carried_item = item_node func drop_item_node(): if carried_item == null: return carried_item.reparent(get_parent()) carried_item = null func is_idle() -> bool: return task == null