Item & Inventory

This commit is contained in:
KuMiShi
2026-01-23 17:10:04 +01:00
parent 831cbef7fa
commit 1c9d5fd4a8
5 changed files with 61 additions and 12 deletions

View File

@@ -1,7 +1,20 @@
from .serializable import Serializable
from enum import Enum, IntEnum
class Action(Enum):
ATTACK = 'strength' # Physical Battle action
FORCE = 'strength' # Actions that requires physical effort
SPELL = 'intelligence' # Many kind of spell (battle or not)
SCAN = 'wisdom' # Danger in environment or NPC's lies
SPEECH = 'charisma' # To persuade or deceive
AGILE = 'dexterity' # Avoid traps or incoming attacks & spell
class BonusAction(IntEnum):
EQUIP_ITEM = 0
USE_CONSUMMABLE = 1
class Entity(Serializable):
def __init__(self, name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed):
def __init__(self, name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, equipped_item=None):
self.name =name
self.strength = strength
self.dexterity = dexterity
@@ -11,3 +24,7 @@ class Entity(Serializable):
self.hp =hp
self.armor = armor
self.speed = speed
self.equipped_item = equipped_item
def make_a_turn(self, action:Action, bonus_action:BonusAction):
pass

View File

@@ -1,5 +1,31 @@
from .serializable import Serializable
from .item import Item
class Inventory(Serializable):
def __init__(self):
def __init__(self, max_capacity:float = 50.0):
super().__init__()
self.items:list[Item] = []
self.max_capacity = max_capacity # Weight (kg)
def current_capacity(self):
return sum([item.weight for item in self.items])
def list_items(self):
s_items = ''
for item in self.items:
s_items += item.__str__() + '; '
return s_items
def add_item(self, added_item:Item):
if added_item.weight + self.current_capacity() > self.max_capacity:
return f'{added_item.name} is too heavy to fit inside the inventory: {added_item.weight + self.current_capacity() - self.max_capacity}kg in surplus!'
else:
self.items.append(added_item)
return f'{added_item.name} added to inventory. Current items load: {self.current_capacity()}kg'
def remove_item(self, r_item):
if r_item in self.items:
self.items.remove(r_item)
return f'{r_item.name} was removed from the inventory'
else:
return f'{r_item.name} is not present within the inventory'

View File

@@ -1,5 +1,11 @@
from .serializable import Serializable
class Item(Serializable):
def __init__(self):
def __init__(self,name:str, description:str, weight:float = 10.0):
super().__init__()
self.name = name
self.description = description
self.weight = weight
def __str__(self):
return self.name + '(' + self.weight + ' kg)' + ': ' + self.description

5
npc.py
View File

@@ -1,6 +1,5 @@
from .entity import Entity
class NPC(Entity):
def __init__(self, name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, item=None):
super().__init__(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed)
self.item = item
def __init__(self, name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, equipped_item=None):
super().__init__(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, equipped_item)

View File

@@ -1,6 +1,7 @@
from .entity import Entity
from .inventory import Inventory
class Player(Entity):
def __init__(self, name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, item=None):
super().__init__(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed)
self.item = item
def __init__(self, name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, equipped_item=None):
super().__init__(name, strength, dexterity, intelligence, wisdom, charisma, hp, armor, speed, equipped_item)
self.inventory = Inventory(max_capacity=50)