TowerGame/scripts/building_components/producer.gd

54 lines
1.2 KiB
GDScript

extends BuildingPart
class_name Producer
@export var produced_item: Item
@export var output_period: float = 0.1
@export var max_outputs: int = 1
@export var consumers: Array[Consumer]
var last_consumer_idx: int = 0
#var output_timer: float = 0.0
#var output_item: Item
#func _process(delta: float) -> void:
#output_timer += delta
#if output_timer >= output_period:
#output_timer -= output_period
#output()
func can_produce() -> bool:
return can_send_item(produced_item)
func produce() -> bool:
return send_item(produced_item)
func can_send_item(item: Item) -> bool:
if !enabled:
return false
for consumer in consumers:
if consumer.can_accept_item(item):
return true
return false
func send_item(item: Item) -> bool:
if !enabled:
return false
if consumers.is_empty():
return false
var start_idx: int = last_consumer_idx
var first_try: bool = true
var idx: int = start_idx
while idx != start_idx or first_try:
idx += 1
if idx >= consumers.size():
idx = 0
first_try = false
var consumer: Consumer = consumers[idx]
var accepted: bool = consumer.offer_item(item)
if accepted:
last_consumer_idx = idx
return true
return false