Test merchants
This commit is contained in:
parent
657f4e5209
commit
19b82ff71a
|
@ -16,7 +16,7 @@ class Merchant(FriendlyEntity):
|
||||||
"""
|
"""
|
||||||
Returns a friendly entitie's specific attributes
|
Returns a friendly entitie's specific attributes
|
||||||
"""
|
"""
|
||||||
return ["maxhealth", "health", "inventory", "hazel"]
|
return super().keys() + ["inventory", "hazel"]
|
||||||
|
|
||||||
def __init__(self, name: str = "merchant", inventory: list = None,
|
def __init__(self, name: str = "merchant", inventory: list = None,
|
||||||
hazel: int = 75, *args, **kwargs):
|
hazel: int = 75, *args, **kwargs):
|
||||||
|
|
|
@ -50,7 +50,7 @@ class Item(Entity):
|
||||||
self.held = True
|
self.held = True
|
||||||
self.held_by = player
|
self.held_by = player
|
||||||
self.map.remove_entity(self)
|
self.map.remove_entity(self)
|
||||||
player.inventory.append(self)
|
player.add_to_inventory(self)
|
||||||
|
|
||||||
def save_state(self) -> dict:
|
def save_state(self) -> dict:
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -43,7 +43,7 @@ class KeyValues(Enum):
|
||||||
EQUIP = auto()
|
EQUIP = auto()
|
||||||
DROP = auto()
|
DROP = auto()
|
||||||
SPACE = auto()
|
SPACE = auto()
|
||||||
T = auto()
|
CHAT = auto()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def translate_key(key: str, settings: Settings) -> Optional["KeyValues"]:
|
def translate_key(key: str, settings: Settings) -> Optional["KeyValues"]:
|
||||||
|
@ -74,6 +74,6 @@ class KeyValues(Enum):
|
||||||
return KeyValues.DROP
|
return KeyValues.DROP
|
||||||
elif key == ' ':
|
elif key == ' ':
|
||||||
return KeyValues.SPACE
|
return KeyValues.SPACE
|
||||||
elif key == 't':
|
elif key == settings.KEY_CHAT:
|
||||||
return KeyValues.T
|
return KeyValues.CHAT
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -66,7 +66,6 @@ class Game:
|
||||||
We wait for the player's action, then we do what that should be done
|
We wait for the player's action, then we do what that should be done
|
||||||
when the given key gets pressed.
|
when the given key gets pressed.
|
||||||
"""
|
"""
|
||||||
self.screen = screen
|
|
||||||
while True: # pragma no cover
|
while True: # pragma no cover
|
||||||
screen.erase()
|
screen.erase()
|
||||||
screen.refresh()
|
screen.refresh()
|
||||||
|
@ -122,7 +121,7 @@ class Game:
|
||||||
self.state = GameMode.INVENTORY
|
self.state = GameMode.INVENTORY
|
||||||
elif key == KeyValues.SPACE:
|
elif key == KeyValues.SPACE:
|
||||||
self.state = GameMode.MAINMENU
|
self.state = GameMode.MAINMENU
|
||||||
elif key == KeyValues.T:
|
elif key == KeyValues.CHAT:
|
||||||
# Wait for the direction of the friendly entity
|
# Wait for the direction of the friendly entity
|
||||||
self.waiting_for_friendly_key = True
|
self.waiting_for_friendly_key = True
|
||||||
|
|
||||||
|
|
|
@ -481,4 +481,4 @@ class FriendlyEntity(FightingEntity):
|
||||||
"""
|
"""
|
||||||
Returns a friendly entity's specific attributes
|
Returns a friendly entity's specific attributes
|
||||||
"""
|
"""
|
||||||
return ["maxhealth", "health", "dialogue_option"]
|
return ["maxhealth", "health"]
|
||||||
|
|
|
@ -31,6 +31,7 @@ class Settings:
|
||||||
self.KEY_USE = ['u', 'Key used to use an item in the inventory']
|
self.KEY_USE = ['u', 'Key used to use an item in the inventory']
|
||||||
self.KEY_EQUIP = ['e', 'Key used to equip an item in the inventory']
|
self.KEY_EQUIP = ['e', 'Key used to equip an item in the inventory']
|
||||||
self.KEY_DROP = ['r', 'Key used to drop an item in the inventory']
|
self.KEY_DROP = ['r', 'Key used to drop an item in the inventory']
|
||||||
|
self.KEY_CHAT = ['t', 'Key used to talk to a friendly entity']
|
||||||
self.TEXTURE_PACK = ['ascii', 'Texture pack']
|
self.TEXTURE_PACK = ['ascii', 'Texture pack']
|
||||||
self.LOCALE = [locale.getlocale()[0][:2], 'Language']
|
self.LOCALE = [locale.getlocale()[0][:2], 'Language']
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@ import unittest
|
||||||
from ..bootstrap import Bootstrap
|
from ..bootstrap import Bootstrap
|
||||||
from ..display.display import Display
|
from ..display.display import Display
|
||||||
from ..display.display_manager import DisplayManager
|
from ..display.display_manager import DisplayManager
|
||||||
from ..entities.friendly import Sunflower, Merchant
|
from ..entities.friendly import Merchant, Sunflower
|
||||||
from ..entities.items import Bomb
|
from ..entities.items import Bomb, Sword
|
||||||
from ..entities.player import Player
|
from ..entities.player import Player
|
||||||
from ..enums import DisplayActions
|
from ..enums import DisplayActions
|
||||||
from ..game import Game, KeyValues, GameMode
|
from ..game import Game, KeyValues, GameMode
|
||||||
|
@ -35,8 +35,11 @@ class TestGame(unittest.TestCase):
|
||||||
"""
|
"""
|
||||||
bomb = Bomb()
|
bomb = Bomb()
|
||||||
self.game.map.add_entity(bomb)
|
self.game.map.add_entity(bomb)
|
||||||
# Add an item in the inventory to check that it is well loaded
|
sword = Sword()
|
||||||
|
self.game.map.add_entity(sword)
|
||||||
|
# Add items in the inventory to check that it is well loaded
|
||||||
bomb.hold(self.game.player)
|
bomb.hold(self.game.player)
|
||||||
|
sword.hold(self.game.player)
|
||||||
|
|
||||||
# Ensure that merchants can be saved
|
# Ensure that merchants can be saved
|
||||||
merchant = Merchant()
|
merchant = Merchant()
|
||||||
|
@ -125,6 +128,9 @@ class TestGame(unittest.TestCase):
|
||||||
self.assertEqual(KeyValues.translate_key(
|
self.assertEqual(KeyValues.translate_key(
|
||||||
self.game.settings.KEY_INVENTORY, self.game.settings),
|
self.game.settings.KEY_INVENTORY, self.game.settings),
|
||||||
KeyValues.INVENTORY)
|
KeyValues.INVENTORY)
|
||||||
|
self.assertEqual(KeyValues.translate_key(
|
||||||
|
self.game.settings.KEY_CHAT, self.game.settings),
|
||||||
|
KeyValues.CHAT)
|
||||||
self.assertEqual(KeyValues.translate_key(
|
self.assertEqual(KeyValues.translate_key(
|
||||||
self.game.settings.KEY_USE, self.game.settings),
|
self.game.settings.KEY_USE, self.game.settings),
|
||||||
KeyValues.USE)
|
KeyValues.USE)
|
||||||
|
@ -288,7 +294,7 @@ class TestGame(unittest.TestCase):
|
||||||
self.assertEqual(self.game.settings.KEY_LEFT_PRIMARY, 'a')
|
self.assertEqual(self.game.settings.KEY_LEFT_PRIMARY, 'a')
|
||||||
|
|
||||||
# Navigate to "texture pack"
|
# Navigate to "texture pack"
|
||||||
for ignored in range(9):
|
for ignored in range(10):
|
||||||
self.game.handle_key_pressed(KeyValues.DOWN)
|
self.game.handle_key_pressed(KeyValues.DOWN)
|
||||||
|
|
||||||
# Change texture pack
|
# Change texture pack
|
||||||
|
@ -433,8 +439,16 @@ class TestGame(unittest.TestCase):
|
||||||
sunflower.move(2, 6)
|
sunflower.move(2, 6)
|
||||||
self.game.map.add_entity(sunflower)
|
self.game.map.add_entity(sunflower)
|
||||||
|
|
||||||
|
# Does nothing
|
||||||
|
self.assertIsNone(self.game.handle_friendly_entity_chat(KeyValues.UP))
|
||||||
|
|
||||||
# Talk to sunflower... or not
|
# Talk to sunflower... or not
|
||||||
self.game.handle_key_pressed(KeyValues.T)
|
self.game.handle_key_pressed(KeyValues.CHAT)
|
||||||
|
self.assertTrue(self.game.waiting_for_friendly_key)
|
||||||
|
# Wrong key
|
||||||
|
self.game.handle_key_pressed(KeyValues.EQUIP)
|
||||||
|
self.assertFalse(self.game.waiting_for_friendly_key)
|
||||||
|
self.game.handle_key_pressed(KeyValues.CHAT)
|
||||||
self.assertTrue(self.game.waiting_for_friendly_key)
|
self.assertTrue(self.game.waiting_for_friendly_key)
|
||||||
self.game.handle_key_pressed(KeyValues.UP)
|
self.game.handle_key_pressed(KeyValues.UP)
|
||||||
self.assertFalse(self.game.waiting_for_friendly_key)
|
self.assertFalse(self.game.waiting_for_friendly_key)
|
||||||
|
@ -442,7 +456,7 @@ class TestGame(unittest.TestCase):
|
||||||
self.assertFalse(len(self.game.logs.messages) > 1)
|
self.assertFalse(len(self.game.logs.messages) > 1)
|
||||||
|
|
||||||
# Talk to sunflower
|
# Talk to sunflower
|
||||||
self.game.handle_key_pressed(KeyValues.T)
|
self.game.handle_key_pressed(KeyValues.CHAT)
|
||||||
self.assertTrue(self.game.waiting_for_friendly_key)
|
self.assertTrue(self.game.waiting_for_friendly_key)
|
||||||
self.game.handle_key_pressed(KeyValues.DOWN)
|
self.game.handle_key_pressed(KeyValues.DOWN)
|
||||||
self.assertFalse(self.game.waiting_for_friendly_key)
|
self.assertFalse(self.game.waiting_for_friendly_key)
|
||||||
|
@ -451,3 +465,55 @@ class TestGame(unittest.TestCase):
|
||||||
# Ensure that the message is a good message
|
# Ensure that the message is a good message
|
||||||
self.assertIn(self.game.logs.messages[1][21:],
|
self.assertIn(self.game.logs.messages[1][21:],
|
||||||
Sunflower.dialogue_option)
|
Sunflower.dialogue_option)
|
||||||
|
|
||||||
|
# Test all directions to detect the friendly entity
|
||||||
|
self.game.player.move(3, 6)
|
||||||
|
self.game.handle_key_pressed(KeyValues.CHAT)
|
||||||
|
self.game.handle_key_pressed(KeyValues.UP)
|
||||||
|
self.assertEqual(len(self.game.logs.messages), 3)
|
||||||
|
self.game.player.move(2, 7)
|
||||||
|
self.game.handle_key_pressed(KeyValues.CHAT)
|
||||||
|
self.game.handle_key_pressed(KeyValues.LEFT)
|
||||||
|
self.assertEqual(len(self.game.logs.messages), 4)
|
||||||
|
self.game.player.move(2, 5)
|
||||||
|
self.game.handle_key_pressed(KeyValues.CHAT)
|
||||||
|
self.game.handle_key_pressed(KeyValues.RIGHT)
|
||||||
|
self.assertEqual(len(self.game.logs.messages), 5)
|
||||||
|
|
||||||
|
def test_talk_to_merchant(self) -> None:
|
||||||
|
"""
|
||||||
|
Interact with merchants
|
||||||
|
"""
|
||||||
|
self.game.state = GameMode.PLAY
|
||||||
|
|
||||||
|
merchant = Merchant()
|
||||||
|
merchant.move(2, 6)
|
||||||
|
self.game.map.add_entity(merchant)
|
||||||
|
|
||||||
|
# Does nothing
|
||||||
|
self.assertIsNone(self.game.handle_friendly_entity_chat(KeyValues.UP))
|
||||||
|
|
||||||
|
# Talk to merchant
|
||||||
|
self.game.handle_key_pressed(KeyValues.CHAT)
|
||||||
|
self.assertTrue(self.game.waiting_for_friendly_key)
|
||||||
|
self.game.handle_key_pressed(KeyValues.DOWN)
|
||||||
|
self.assertFalse(self.game.waiting_for_friendly_key)
|
||||||
|
self.assertEqual(self.game.state, GameMode.STORE)
|
||||||
|
self.assertTrue(self.game.logs.messages)
|
||||||
|
|
||||||
|
# Navigate in the menu
|
||||||
|
self.game.handle_key_pressed(KeyValues.DOWN)
|
||||||
|
self.game.handle_key_pressed(KeyValues.DOWN)
|
||||||
|
self.game.handle_key_pressed(KeyValues.UP)
|
||||||
|
self.assertEqual(self.game.store_menu.position, 1)
|
||||||
|
|
||||||
|
# Buy the second item
|
||||||
|
item = self.game.store_menu.validate()
|
||||||
|
self.assertIn(item, merchant.inventory)
|
||||||
|
self.game.handle_key_pressed(KeyValues.ENTER)
|
||||||
|
self.assertIn(item, self.game.player.inventory)
|
||||||
|
self.assertNotIn(item, merchant.inventory)
|
||||||
|
|
||||||
|
# Exit the menu
|
||||||
|
self.game.handle_key_pressed(KeyValues.SPACE)
|
||||||
|
self.assertEqual(self.game.state, GameMode.PLAY)
|
||||||
|
|
Loading…
Reference in New Issue