Add waiting key, fixes #16

This commit is contained in:
Yohann D'ANELLO 2020-12-12 18:12:37 +01:00
parent 5eefe1937a
commit 7971a1f70e
9 changed files with 90 additions and 62 deletions

View File

@ -48,5 +48,5 @@ class Sunflower(FriendlyEntity):
super().__init__(name="sunflower", maxhealth=maxhealth, *args, **kwargs)
@property
def dialogue_option(self):
def dialogue_option(self) -> list:
return [_("Flower power!!"), _("The sun is warm today")]

View File

@ -46,6 +46,7 @@ class KeyValues(Enum):
DROP = auto()
SPACE = auto()
CHAT = auto()
WAIT = auto()
@staticmethod
def translate_key(key: str, settings: Settings) -> Optional["KeyValues"]:
@ -78,4 +79,6 @@ class KeyValues(Enum):
return KeyValues.SPACE
elif key == settings.KEY_CHAT:
return KeyValues.CHAT
elif key == settings.KEY_WAIT:
return KeyValues.WAIT
return None

View File

@ -128,6 +128,8 @@ class Game:
elif key == KeyValues.CHAT:
# Wait for the direction of the friendly entity
self.waiting_for_friendly_key = True
elif key == KeyValues.WAIT:
self.map.tick()
def handle_friendly_entity_chat(self, key: KeyValues) -> None:
"""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: squirrelbattle 3.14.1\n"
"Report-Msgid-Bugs-To: squirrel-battle@crans.org\n"
"POT-Creation-Date: 2020-12-12 17:24+0100\n"
"POT-Creation-Date: 2020-12-12 18:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -58,11 +58,11 @@ msgstr "Die Bombe explodiert."
msgid "{player} exchanged its body with {entity}."
msgstr "{player} täuscht seinem Körper mit {entity} aus."
#: squirrelbattle/game.py:203 squirrelbattle/tests/game_test.py:573
#: squirrelbattle/game.py:205 squirrelbattle/tests/game_test.py:573
msgid "You do not have enough money"
msgstr "Sie haben nicht genug Geld"
#: squirrelbattle/game.py:247
#: squirrelbattle/game.py:249
msgid ""
"Some keys are missing in your save file.\n"
"Your save seems to be corrupt. It got deleted."
@ -70,7 +70,7 @@ msgstr ""
"In Ihrer Speicherdatei fehlen einige Schlüssel.\n"
"Ihre Speicherung scheint korrupt zu sein. Es wird gelöscht."
#: squirrelbattle/game.py:255
#: squirrelbattle/game.py:257
msgid ""
"No player was found on this map!\n"
"Maybe you died?"
@ -78,7 +78,7 @@ msgstr ""
"Auf dieser Karte wurde kein Spieler gefunden!\n"
"Vielleicht sind Sie gestorben?"
#: squirrelbattle/game.py:275
#: squirrelbattle/game.py:277
msgid ""
"The JSON file is not correct.\n"
"Your save seems corrupted. It got deleted."
@ -193,57 +193,61 @@ msgid "Key used to talk to a friendly entity"
msgstr "Taste um mit einer friedlicher Entität zu sprechen"
#: squirrelbattle/tests/translations_test.py:55
msgid "Key used to wait"
msgstr "Wartentaste"
#: squirrelbattle/tests/translations_test.py:56
msgid "Texture pack"
msgstr "Textur-Packung"
#: squirrelbattle/tests/translations_test.py:56
#: squirrelbattle/tests/translations_test.py:57
msgid "Language"
msgstr "Sprache"
#: squirrelbattle/tests/translations_test.py:59
#: squirrelbattle/tests/translations_test.py:60
msgid "player"
msgstr "Spieler"
#: squirrelbattle/tests/translations_test.py:61
#: squirrelbattle/tests/translations_test.py:62
msgid "hedgehog"
msgstr "Igel"
#: squirrelbattle/tests/translations_test.py:62
#: squirrelbattle/tests/translations_test.py:63
msgid "merchant"
msgstr "Kaufmann"
#: squirrelbattle/tests/translations_test.py:63
#: squirrelbattle/tests/translations_test.py:64
msgid "rabbit"
msgstr "Kanninchen"
#: squirrelbattle/tests/translations_test.py:64
#: squirrelbattle/tests/translations_test.py:65
msgid "sunflower"
msgstr "Sonnenblume"
#: squirrelbattle/tests/translations_test.py:65
#: squirrelbattle/tests/translations_test.py:66
msgid "teddy bear"
msgstr "Teddybär"
#: squirrelbattle/tests/translations_test.py:66
#: squirrelbattle/tests/translations_test.py:67
msgid "tiger"
msgstr "Tiger"
#: squirrelbattle/tests/translations_test.py:68
#: squirrelbattle/tests/translations_test.py:69
msgid "body snatch potion"
msgstr "Leichenfleddererzaubertrank"
#: squirrelbattle/tests/translations_test.py:69
#: squirrelbattle/tests/translations_test.py:70
msgid "bomb"
msgstr "Bombe"
#: squirrelbattle/tests/translations_test.py:70
#: squirrelbattle/tests/translations_test.py:71
msgid "explosion"
msgstr "Explosion"
#: squirrelbattle/tests/translations_test.py:71
#: squirrelbattle/tests/translations_test.py:72
msgid "heart"
msgstr "Herz"
#: squirrelbattle/tests/translations_test.py:72
#: squirrelbattle/tests/translations_test.py:73
msgid "sword"
msgstr "schwert"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: squirrelbattle 3.14.1\n"
"Report-Msgid-Bugs-To: squirrel-battle@crans.org\n"
"POT-Creation-Date: 2020-12-12 17:24+0100\n"
"POT-Creation-Date: 2020-12-12 18:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -57,11 +57,11 @@ msgstr "La bomba está explotando."
msgid "{player} exchanged its body with {entity}."
msgstr "{player} intercambió su cuerpo con {entity}."
#: squirrelbattle/game.py:203 squirrelbattle/tests/game_test.py:573
#: squirrelbattle/game.py:205 squirrelbattle/tests/game_test.py:573
msgid "You do not have enough money"
msgstr "No tienes suficiente dinero"
#: squirrelbattle/game.py:247
#: squirrelbattle/game.py:249
msgid ""
"Some keys are missing in your save file.\n"
"Your save seems to be corrupt. It got deleted."
@ -69,7 +69,7 @@ msgstr ""
"Algunas claves faltan en su archivo de guarda.\n"
"Su guarda parece a ser corruptido. Fue eliminado."
#: squirrelbattle/game.py:255
#: squirrelbattle/game.py:257
msgid ""
"No player was found on this map!\n"
"Maybe you died?"
@ -77,7 +77,7 @@ msgstr ""
"No jugador encontrado sobre la carta !\n"
"¿ Quizas murió ?"
#: squirrelbattle/game.py:275
#: squirrelbattle/game.py:277
msgid ""
"The JSON file is not correct.\n"
"Your save seems corrupted. It got deleted."
@ -192,57 +192,61 @@ msgid "Key used to talk to a friendly entity"
msgstr "Tecla para hablar con una entidad amiga"
#: squirrelbattle/tests/translations_test.py:55
msgid "Key used to wait"
msgstr "Tecla para espera"
#: squirrelbattle/tests/translations_test.py:56
msgid "Texture pack"
msgstr "Paquete de texturas"
#: squirrelbattle/tests/translations_test.py:56
#: squirrelbattle/tests/translations_test.py:57
msgid "Language"
msgstr "Languaje"
#: squirrelbattle/tests/translations_test.py:59
#: squirrelbattle/tests/translations_test.py:60
msgid "player"
msgstr "jugador"
#: squirrelbattle/tests/translations_test.py:61
#: squirrelbattle/tests/translations_test.py:62
msgid "hedgehog"
msgstr "erizo"
#: squirrelbattle/tests/translations_test.py:62
#: squirrelbattle/tests/translations_test.py:63
msgid "merchant"
msgstr "comerciante"
#: squirrelbattle/tests/translations_test.py:63
#: squirrelbattle/tests/translations_test.py:64
msgid "rabbit"
msgstr "conejo"
#: squirrelbattle/tests/translations_test.py:64
#: squirrelbattle/tests/translations_test.py:65
msgid "sunflower"
msgstr "girasol"
#: squirrelbattle/tests/translations_test.py:65
#: squirrelbattle/tests/translations_test.py:66
msgid "teddy bear"
msgstr "osito de peluche"
#: squirrelbattle/tests/translations_test.py:66
#: squirrelbattle/tests/translations_test.py:67
msgid "tiger"
msgstr "tigre"
#: squirrelbattle/tests/translations_test.py:68
#: squirrelbattle/tests/translations_test.py:69
msgid "body snatch potion"
msgstr "poción de intercambio"
#: squirrelbattle/tests/translations_test.py:69
#: squirrelbattle/tests/translations_test.py:70
msgid "bomb"
msgstr "bomba"
#: squirrelbattle/tests/translations_test.py:70
#: squirrelbattle/tests/translations_test.py:71
msgid "explosion"
msgstr "explosión"
#: squirrelbattle/tests/translations_test.py:71
#: squirrelbattle/tests/translations_test.py:72
msgid "heart"
msgstr "corazón"
#: squirrelbattle/tests/translations_test.py:72
#: squirrelbattle/tests/translations_test.py:73
msgid "sword"
msgstr "espada"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: squirrelbattle 3.14.1\n"
"Report-Msgid-Bugs-To: squirrel-battle@crans.org\n"
"POT-Creation-Date: 2020-12-12 17:24+0100\n"
"POT-Creation-Date: 2020-12-12 18:02+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -58,11 +58,11 @@ msgstr "La bombe explose."
msgid "{player} exchanged its body with {entity}."
msgstr "{player} a échangé son corps avec {entity}."
#: squirrelbattle/game.py:203 squirrelbattle/tests/game_test.py:573
#: squirrelbattle/game.py:205 squirrelbattle/tests/game_test.py:573
msgid "You do not have enough money"
msgstr "Vous n'avez pas assez d'argent"
#: squirrelbattle/game.py:247
#: squirrelbattle/game.py:249
msgid ""
"Some keys are missing in your save file.\n"
"Your save seems to be corrupt. It got deleted."
@ -70,7 +70,7 @@ msgstr ""
"Certaines clés de votre ficher de sauvegarde sont manquantes.\n"
"Votre sauvegarde semble corrompue. Elle a été supprimée."
#: squirrelbattle/game.py:255
#: squirrelbattle/game.py:257
msgid ""
"No player was found on this map!\n"
"Maybe you died?"
@ -78,7 +78,7 @@ msgstr ""
"Aucun joueur n'a été trouvé sur la carte !\n"
"Peut-être êtes-vous mort ?"
#: squirrelbattle/game.py:275
#: squirrelbattle/game.py:277
msgid ""
"The JSON file is not correct.\n"
"Your save seems corrupted. It got deleted."
@ -193,57 +193,61 @@ msgid "Key used to talk to a friendly entity"
msgstr "Touche pour parler à une entité pacifique"
#: squirrelbattle/tests/translations_test.py:55
msgid "Key used to wait"
msgstr "Touche pour attendre"
#: squirrelbattle/tests/translations_test.py:56
msgid "Texture pack"
msgstr "Pack de textures"
#: squirrelbattle/tests/translations_test.py:56
#: squirrelbattle/tests/translations_test.py:57
msgid "Language"
msgstr "Langue"
#: squirrelbattle/tests/translations_test.py:59
#: squirrelbattle/tests/translations_test.py:60
msgid "player"
msgstr "joueur"
#: squirrelbattle/tests/translations_test.py:61
#: squirrelbattle/tests/translations_test.py:62
msgid "hedgehog"
msgstr "hérisson"
#: squirrelbattle/tests/translations_test.py:62
#: squirrelbattle/tests/translations_test.py:63
msgid "merchant"
msgstr "marchand"
#: squirrelbattle/tests/translations_test.py:63
#: squirrelbattle/tests/translations_test.py:64
msgid "rabbit"
msgstr "lapin"
#: squirrelbattle/tests/translations_test.py:64
#: squirrelbattle/tests/translations_test.py:65
msgid "sunflower"
msgstr "tournesol"
#: squirrelbattle/tests/translations_test.py:65
#: squirrelbattle/tests/translations_test.py:66
msgid "teddy bear"
msgstr "nounours"
#: squirrelbattle/tests/translations_test.py:66
#: squirrelbattle/tests/translations_test.py:67
msgid "tiger"
msgstr "tigre"
#: squirrelbattle/tests/translations_test.py:68
#: squirrelbattle/tests/translations_test.py:69
msgid "body snatch potion"
msgstr "potion d'arrachage de corps"
#: squirrelbattle/tests/translations_test.py:69
#: squirrelbattle/tests/translations_test.py:70
msgid "bomb"
msgstr "bombe"
#: squirrelbattle/tests/translations_test.py:70
#: squirrelbattle/tests/translations_test.py:71
msgid "explosion"
msgstr ""
#: squirrelbattle/tests/translations_test.py:71
#: squirrelbattle/tests/translations_test.py:72
msgid "heart"
msgstr "cœur"
#: squirrelbattle/tests/translations_test.py:72
#: squirrelbattle/tests/translations_test.py:73
msgid "sword"
msgstr "épée"

View File

@ -32,6 +32,7 @@ class Settings:
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_CHAT = ['t', 'Key used to talk to a friendly entity']
self.KEY_WAIT = ['w', 'Key used to wait']
self.TEXTURE_PACK = ['ascii', 'Texture pack']
self.LOCALE = [locale.getlocale()[0][:2], 'Language']

View File

@ -8,7 +8,7 @@ from ..bootstrap import Bootstrap
from ..display.display import Display
from ..display.display_manager import DisplayManager
from ..entities.friendly import Merchant, Sunflower
from ..entities.items import Bomb, Heart, Sword
from ..entities.items import Bomb, Heart, Sword, Explosion
from ..entities.player import Player
from ..enums import DisplayActions
from ..game import Game, KeyValues, GameMode
@ -140,6 +140,9 @@ class TestGame(unittest.TestCase):
self.assertEqual(KeyValues.translate_key(
self.game.settings.KEY_DROP, self.game.settings),
KeyValues.DROP)
self.assertEqual(KeyValues.translate_key(
self.game.settings.KEY_WAIT, self.game.settings),
KeyValues.WAIT)
self.assertEqual(KeyValues.translate_key(' ', self.game.settings),
KeyValues.SPACE)
self.assertEqual(KeyValues.translate_key('plop', self.game.settings),
@ -227,6 +230,12 @@ class TestGame(unittest.TestCase):
self.assertEqual(new_y, y)
self.assertEqual(new_x, x - 1)
explosion = Explosion()
self.game.map.add_entity(explosion)
self.assertIn(explosion, self.game.map.entities)
self.game.handle_key_pressed(KeyValues.WAIT)
self.assertNotIn(explosion, self.game.map.entities)
self.game.handle_key_pressed(KeyValues.SPACE)
self.assertEqual(self.game.state, GameMode.MAINMENU)
@ -297,13 +306,13 @@ class TestGame(unittest.TestCase):
self.game.handle_key_pressed(KeyValues.ENTER)
self.assertEqual(self.game.state, GameMode.SETTINGS)
# Define the "move up" key to 'w'
# Define the "move up" key to 'h'
self.assertFalse(self.game.settings_menu.waiting_for_key)
self.game.handle_key_pressed(KeyValues.ENTER)
self.assertTrue(self.game.settings_menu.waiting_for_key)
self.game.handle_key_pressed(None, 'w')
self.game.handle_key_pressed(None, 'h')
self.assertFalse(self.game.settings_menu.waiting_for_key)
self.assertEqual(self.game.settings.KEY_UP_PRIMARY, 'w')
self.assertEqual(self.game.settings.KEY_UP_PRIMARY, 'h')
# Navigate to "move left"
self.game.handle_key_pressed(KeyValues.DOWN)
@ -324,7 +333,7 @@ class TestGame(unittest.TestCase):
self.assertEqual(self.game.settings.KEY_LEFT_PRIMARY, 'a')
# Navigate to "texture pack"
for ignored in range(10):
for ignored in range(11):
self.game.handle_key_pressed(KeyValues.DOWN)
# Change texture pack
@ -496,8 +505,8 @@ class TestGame(unittest.TestCase):
self.assertEqual(self.game.state, GameMode.PLAY)
self.assertTrue(self.game.logs.messages)
# Ensure that the message is a good message
self.assertIn(self.game.logs.messages[1][16:],
Sunflower().dialogue_option)
self.assertTrue(any(self.game.logs.messages[1].endswith(msg)
for msg in Sunflower().dialogue_option))
# Test all directions to detect the friendly entity
self.game.player.move(3, 6)

View File

@ -52,6 +52,7 @@ class TestTranslations(unittest.TestCase):
"Touche pour jeter un objet de l'inventaire")
self.assertEqual(_("Key used to talk to a friendly entity"),
"Touche pour parler à une entité pacifique")
self.assertEqual(_("Key used to wait"), "Touche pour attendre")
self.assertEqual(_("Texture pack"), "Pack de textures")
self.assertEqual(_("Language"), "Langue")