first commit
This commit is contained in:
48
scripts/core/Pool.gd
Normal file
48
scripts/core/Pool.gd
Normal file
@@ -0,0 +1,48 @@
|
||||
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.
|
||||
Reference in New Issue
Block a user