We can equip items
This commit is contained in:
@ -4,7 +4,6 @@
|
||||
from random import choice, randint
|
||||
from typing import Optional
|
||||
|
||||
from .player import Player
|
||||
from ..interfaces import Entity, FightingEntity, Map, InventoryHolder
|
||||
from ..translations import gettext as _
|
||||
|
||||
@ -45,15 +44,26 @@ class Item(Entity):
|
||||
"""
|
||||
Indicates what should be done when the item is equipped.
|
||||
"""
|
||||
if self.held_by.equipped_item:
|
||||
self.held_by.equipped_item.unequip()
|
||||
self.held_by.equipped_item = self
|
||||
self.held_by.remove_from_inventory(self)
|
||||
|
||||
def hold(self, player: InventoryHolder) -> None:
|
||||
def unequip(self) -> None:
|
||||
"""
|
||||
Indicates what should be done when the item is unequipped.
|
||||
"""
|
||||
self.held_by.add_to_inventory(self)
|
||||
self.held_by.equipped_item = None
|
||||
|
||||
def hold(self, holder: InventoryHolder) -> None:
|
||||
"""
|
||||
The item is taken from the floor and put into the inventory
|
||||
"""
|
||||
self.held = True
|
||||
self.held_by = player
|
||||
self.held_by = holder
|
||||
self.held_by.map.remove_entity(self)
|
||||
player.add_to_inventory(self)
|
||||
holder.add_to_inventory(self)
|
||||
|
||||
def save_state(self) -> dict:
|
||||
"""
|
||||
@ -116,7 +126,7 @@ class Bomb(Item):
|
||||
"""
|
||||
damage: int = 5
|
||||
exploding: bool
|
||||
owner: Optional["Player"]
|
||||
owner: Optional["InventoryHolder"]
|
||||
tick: int
|
||||
|
||||
def __init__(self, name: str = "bomb", damage: int = 5,
|
||||
|
@ -4,8 +4,9 @@
|
||||
from functools import reduce
|
||||
from queue import PriorityQueue
|
||||
from random import randint
|
||||
from typing import Dict, Tuple
|
||||
from typing import Dict, Optional, Tuple
|
||||
|
||||
from .items import Item
|
||||
from ..interfaces import FightingEntity, InventoryHolder
|
||||
|
||||
|
||||
@ -16,12 +17,15 @@ class Player(InventoryHolder, FightingEntity):
|
||||
current_xp: int = 0
|
||||
max_xp: int = 10
|
||||
paths: Dict[Tuple[int, int], Tuple[int, int]]
|
||||
equipped_item: Optional[Item]
|
||||
equipped_armor: Optional[Item]
|
||||
|
||||
def __init__(self, name: str = "player", maxhealth: int = 20,
|
||||
strength: int = 5, intelligence: int = 1, charisma: int = 1,
|
||||
dexterity: int = 1, constitution: int = 1, level: int = 1,
|
||||
current_xp: int = 0, max_xp: int = 10, inventory: list = None,
|
||||
hazel: int = 42, *args, **kwargs) \
|
||||
hazel: int = 42, equipped_item: Optional[Item] = None,
|
||||
equipped_armor: Optional[Item] = None, *args, **kwargs) \
|
||||
-> None:
|
||||
super().__init__(name=name, maxhealth=maxhealth, strength=strength,
|
||||
intelligence=intelligence, charisma=charisma,
|
||||
@ -32,6 +36,12 @@ class Player(InventoryHolder, FightingEntity):
|
||||
self.inventory = self.translate_inventory(inventory or [])
|
||||
self.paths = dict()
|
||||
self.hazel = hazel
|
||||
if isinstance(equipped_item, dict):
|
||||
equipped_item = self.dict_to_item(equipped_item)
|
||||
if isinstance(equipped_armor, dict):
|
||||
equipped_armor = self.dict_to_item(equipped_armor)
|
||||
self.equipped_item = equipped_item
|
||||
self.equipped_armor = equipped_armor
|
||||
|
||||
def move(self, y: int, x: int) -> None:
|
||||
"""
|
||||
|
Reference in New Issue
Block a user