52 lines
1.8 KiB
GDScript
52 lines
1.8 KiB
GDScript
extends Node
|
|
signal changed_resource
|
|
|
|
@export var resources := {}
|
|
|
|
func _on_gained_resource(res: GameResource) -> void:
|
|
print("Gained Resource: %s" % res)
|
|
var changed_resources := {
|
|
res: res.pickup_value
|
|
}
|
|
changed_resource.emit(ResourceChangedSignal.new(changed_resources))
|
|
|
|
func pickup(resource: GameResource) -> void:
|
|
if not resources.has(resource):
|
|
resources[resource] = 0
|
|
var pickup_amount = min(resource.pickup_value, get_resource_limit(resource) - resources[resource])
|
|
if pickup_amount > 0:
|
|
resources[resource] += pickup_amount
|
|
var changed_resources := {
|
|
resource: pickup_amount
|
|
}
|
|
changed_resource.emit(ResourceChangedSignal.new(changed_resources))
|
|
|
|
func has_amount(res: GameResource, amount: int) -> bool:
|
|
return resources[res] >= amount if resources.has(res) else false
|
|
|
|
func has_resources(cost: Dictionary) -> bool:
|
|
return cost.keys().reduce(func(accum, res): return accum and has_amount(res, cost[res]), true)
|
|
|
|
func use_resources(cost: Dictionary) -> void:
|
|
var changed_resources := {
|
|
}
|
|
for res in cost.keys():
|
|
resources[res] -= cost[res]
|
|
changed_resources[res] = -cost[res]
|
|
changed_resource.emit(ResourceChangedSignal.new(changed_resources))
|
|
|
|
func get_resource_limit(resource: GameResource) -> int:
|
|
return resource.storage_max * (1 + BuildingManager.get_storage_count_for_resource(resource))
|
|
|
|
#func _on_timer_timeout() -> void:
|
|
#var corrupted_resources := Grid.get_corrupted_resources()
|
|
#if corrupted_resources.size() > 0:
|
|
#var changed_resources := {}
|
|
#for corrupted_resource: CellData in corrupted_resources:
|
|
#var res: GameResource = corrupted_resource.get_resource()
|
|
#if not resources.has(res):
|
|
#resources[res] = 0
|
|
#resources[res] += res.pickup_value
|
|
#changed_resources[res] = resources[res]
|
|
#changed_resource.emit(ResourceChangedSignal.new(changed_resources))
|