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.