- CharacterClass mit Klassen (Krieger, Schurke, Magier) und unbewaffnetem Schaden - Equipment-System mit 7 Slots, Seltenheiten und Stats - Inventar-System mit 20 Slots und Gold - LootTable/LootEntry für Gegner-Drops - Character Panel (C) mit Stats und Equipment-Anzeige - Inventory Panel (I) mit Item-Grid und Tooltips - Klassenauswahl-Menü bei Spielstart - Waffenschaden in Equipment-Spalte, unbewaffnet klassenabhängig Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
77 lines
1.7 KiB
GDScript
77 lines
1.7 KiB
GDScript
# Inventory.gd
|
|
# Verwaltet das Spieler-Inventar mit Items und Gold
|
|
extends Resource
|
|
class_name Inventory
|
|
|
|
signal inventory_changed
|
|
signal gold_changed(new_amount: int)
|
|
|
|
const MAX_SLOTS = 20 # Maximale Inventarplätze
|
|
|
|
var items: Array[Equipment] = []
|
|
var gold: int = 0
|
|
|
|
func _init():
|
|
items = []
|
|
gold = 0
|
|
|
|
# Item hinzufügen - gibt true zurück wenn erfolgreich
|
|
func add_item(item: Equipment) -> bool:
|
|
if items.size() >= MAX_SLOTS:
|
|
print("Inventar voll!")
|
|
return false
|
|
items.append(item)
|
|
inventory_changed.emit()
|
|
print("Item erhalten: ", item.item_name)
|
|
return true
|
|
|
|
# Item an Index entfernen
|
|
func remove_item_at(index: int) -> Equipment:
|
|
if index < 0 or index >= items.size():
|
|
return null
|
|
var item = items[index]
|
|
items.remove_at(index)
|
|
inventory_changed.emit()
|
|
return item
|
|
|
|
# Item direkt entfernen
|
|
func remove_item(item: Equipment) -> bool:
|
|
var index = items.find(item)
|
|
if index == -1:
|
|
return false
|
|
items.remove_at(index)
|
|
inventory_changed.emit()
|
|
return true
|
|
|
|
# Gold hinzufügen
|
|
func add_gold(amount: int):
|
|
gold += amount
|
|
gold_changed.emit(gold)
|
|
print("+", amount, " Gold (Gesamt: ", gold, ")")
|
|
|
|
# Gold ausgeben - gibt true zurück wenn genug vorhanden
|
|
func spend_gold(amount: int) -> bool:
|
|
if gold < amount:
|
|
print("Nicht genug Gold!")
|
|
return false
|
|
gold -= amount
|
|
gold_changed.emit(gold)
|
|
return true
|
|
|
|
# Prüfen ob Inventar voll ist
|
|
func is_full() -> bool:
|
|
return items.size() >= MAX_SLOTS
|
|
|
|
# Anzahl freier Slots
|
|
func free_slots() -> int:
|
|
return MAX_SLOTS - items.size()
|
|
|
|
# Item an Index holen
|
|
func get_item(index: int) -> Equipment:
|
|
if index < 0 or index >= items.size():
|
|
return null
|
|
return items[index]
|
|
|
|
# Anzahl Items
|
|
func item_count() -> int:
|
|
return items.size()
|