Asciifarm/asciifarm/server/components/equipment.py

62 lines
1.6 KiB
Python

from .component import Component
from .. import gameobjects
class Equipment(Component):
def __init__(self, slots=None):
if slots is None:
slots = {}
self.slots = {key: None for key in slots}
self.owner = None
for slot, item in slots.items():
self.equip(slot, item)
def attach(self, obj):
self.owner = obj
def getBonus(self, skill):
return sum(item.getComponent("item").getStat(skill) for item in self.slots.values() if item)
def equip(self, slot, item):
if slot in self.slots:
oldItem = self.slots[slot]
if oldItem:
self.owner.trigger("take", oldItem)
self.slots[slot] = item
if self.owner:
self.owner.trigger("equipmentchange")
else:
# todo: better exception
raise Exception("No such slot")
def unEquip(self, slot):
if slot in self.slots:
self.slots[slot] = None
if self.owner:
self.owner.trigger("equipmentchange")
def getSlots(self):
return self.slots.copy()
def canEquip(self, item):
return item.getSlot() in self.slots
def toJSON(self):
return {
slotName: item.serialize() if item else None
for slotName, item in self.slots.items()
}
@classmethod
def fromJSON(cls, slots):
return cls({
slotname: gameobjects.createEntity(item) if item else None
for slotname, item in slots.items()
})