From 9aa684fb7741e3fc3c188d9ff42bb4db853e07c8 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Fri, 18 Dec 2020 17:57:42 +0100 Subject: [PATCH] Use directly equipped items outside the inventory --- squirrelbattle/entities/items.py | 4 ++-- squirrelbattle/entities/player.py | 11 +++++++++++ squirrelbattle/game.py | 2 ++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/squirrelbattle/entities/items.py b/squirrelbattle/entities/items.py index 5564cb0..4da4a8c 100644 --- a/squirrelbattle/entities/items.py +++ b/squirrelbattle/entities/items.py @@ -29,7 +29,7 @@ class Item(Entity): The item is dropped from the inventory onto the floor """ if self.held: - self.held_by.inventory.remove(self) + self.held_by.remove_from_inventory(self) self.held_by.map.add_entity(self) self.move(self.held_by.y, self.held_by.x) self.held = False @@ -46,8 +46,8 @@ class Item(Entity): """ 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) + self.held_by.equipped_item = self def unequip(self) -> None: """ diff --git a/squirrelbattle/entities/player.py b/squirrelbattle/entities/player.py index a370264..89f16c7 100644 --- a/squirrelbattle/entities/player.py +++ b/squirrelbattle/entities/player.py @@ -75,6 +75,17 @@ class Player(InventoryHolder, FightingEntity): self.current_xp += xp self.level_up() + def remove_from_inventory(self, obj: Item) -> None: + """ + Remove the given item from the inventory, even if the item is equipped. + """ + if obj == self.equipped_item: + self.equipped_item = None + elif obj == self.equipped_armor: + self.equipped_armor = None + else: + return super().remove_from_inventory(obj) + # noinspection PyTypeChecker,PyUnresolvedReferences def check_move(self, y: int, x: int, move_if_possible: bool = False) \ -> bool: diff --git a/squirrelbattle/game.py b/squirrelbattle/game.py index e0f3df9..d0aaf84 100644 --- a/squirrelbattle/game.py +++ b/squirrelbattle/game.py @@ -127,6 +127,8 @@ class Game: elif key == KeyValues.INVENTORY: self.state = GameMode.INVENTORY self.display_actions(DisplayActions.UPDATE) + elif key == KeyValues.USE and self.player.equipped_item: + self.player.equipped_item.use() elif key == KeyValues.SPACE: self.state = GameMode.MAINMENU elif key == KeyValues.CHAT: