TowerGameProto/scripts/Citizen.gd

62 lines
1.6 KiB
GDScript3
Raw Normal View History

2025-04-16 22:56:14 +01:00
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