Files
2026-08-29 11:42:54 +02:00

49 lines
1.2 KiB
GDScript

class_name Pool
extends RefCounted
## Geteilter Avatar-Pool. Alle 8 Spieler kaufen aus demselben Vorrat.
## Welche Elemente ein Spieler im Shop sieht, steht in PlayerState.unlocked.
var element_left: Array[int] = []
func _init() -> void:
for i in Data.ELEMENT_COUNT:
element_left.append(Data.POOL_PER_ELEMENT)
func available(element: int) -> bool:
return element < 0 or element_left[element] > 0
func take(element: int) -> bool:
if element < 0:
# Der neutrale Standard-Avatar ist unbegrenzt, nur Elemente sind knapp.
return true
if element_left[element] <= 0:
return false
element_left[element] -= 1
return true
func give_back(element: int, amount: int = 1) -> void:
if element < 0:
return
else:
element_left[element] = mini(Data.POOL_PER_ELEMENT, element_left[element] + amount)
## Gibt alle Bausteine eines Avatars zurück in den Pool.
func return_avatar(a: Avatar) -> void:
if a.is_elementless():
give_back(-1)
return
# Basis-Avatar plus verbrauchtes Futter.
give_back(a.elements[0])
if a.star >= 2:
give_back(a.elements[0], 2)
if a.star >= 3:
for e in a.elements:
give_back(e, 3)
# Zusätzlich gewählte Elemente kosten keinen Pool-Slot.