Merge branch 'master' into 'mouse_interaction'
# Conflicts: # squirrelbattle/display/display_manager.py # squirrelbattle/display/menudisplay.py # squirrelbattle/entities/items.py
This commit is contained in:
@ -24,6 +24,7 @@ class Game:
|
||||
"""
|
||||
map: Map
|
||||
player: Player
|
||||
screen: Any
|
||||
# display_actions is a display interface set by the bootstrapper
|
||||
display_actions: callable
|
||||
|
||||
@ -32,6 +33,7 @@ class Game:
|
||||
Init the game.
|
||||
"""
|
||||
self.state = GameMode.MAINMENU
|
||||
self.waiting_for_friendly_key = False
|
||||
self.settings = Settings()
|
||||
self.settings.load_settings()
|
||||
self.settings.write_settings()
|
||||
@ -40,6 +42,7 @@ class Game:
|
||||
self.settings_menu = menus.SettingsMenu()
|
||||
self.settings_menu.update_values(self.settings)
|
||||
self.inventory_menu = menus.InventoryMenu()
|
||||
self.store_menu = menus.StoreMenu()
|
||||
self.logs = Logs()
|
||||
self.message = None
|
||||
|
||||
@ -87,13 +90,19 @@ class Game:
|
||||
return
|
||||
|
||||
if self.state == GameMode.PLAY:
|
||||
self.handle_key_pressed_play(key)
|
||||
if self.waiting_for_friendly_key:
|
||||
# The player requested to talk with a friendly entity
|
||||
self.handle_friendly_entity_chat(key)
|
||||
else:
|
||||
self.handle_key_pressed_play(key)
|
||||
elif self.state == GameMode.INVENTORY:
|
||||
self.handle_key_pressed_inventory(key)
|
||||
elif self.state == GameMode.MAINMENU:
|
||||
self.handle_key_pressed_main_menu(key)
|
||||
elif self.state == GameMode.SETTINGS:
|
||||
self.settings_menu.handle_key_pressed(key, raw_key, self)
|
||||
elif self.state == GameMode.STORE:
|
||||
self.handle_key_pressed_store(key)
|
||||
self.display_actions(DisplayActions.REFRESH)
|
||||
|
||||
def handle_key_pressed_play(self, key: KeyValues) -> None:
|
||||
@ -116,6 +125,42 @@ class Game:
|
||||
self.state = GameMode.INVENTORY
|
||||
elif key == KeyValues.SPACE:
|
||||
self.state = GameMode.MAINMENU
|
||||
elif key == KeyValues.CHAT:
|
||||
# Wait for the direction of the friendly entity
|
||||
self.waiting_for_friendly_key = True
|
||||
|
||||
def handle_friendly_entity_chat(self, key: KeyValues) -> None:
|
||||
"""
|
||||
If the player is talking to a friendly entity, we get the direction
|
||||
where the entity is, then we interact with it.
|
||||
"""
|
||||
if not self.waiting_for_friendly_key:
|
||||
return
|
||||
self.waiting_for_friendly_key = False
|
||||
|
||||
if key == KeyValues.UP:
|
||||
xp = self.player.x
|
||||
yp = self.player.y - 1
|
||||
elif key == KeyValues.DOWN:
|
||||
xp = self.player.x
|
||||
yp = self.player.y + 1
|
||||
elif key == KeyValues.LEFT:
|
||||
xp = self.player.x - 1
|
||||
yp = self.player.y
|
||||
elif key == KeyValues.RIGHT:
|
||||
xp = self.player.x + 1
|
||||
yp = self.player.y
|
||||
else:
|
||||
return
|
||||
if self.map.entity_is_present(yp, xp):
|
||||
for entity in self.map.entities:
|
||||
if entity.is_friendly() and entity.x == xp and \
|
||||
entity.y == yp:
|
||||
msg = entity.talk_to(self.player)
|
||||
self.logs.add_message(msg)
|
||||
if entity.is_merchant():
|
||||
self.state = GameMode.STORE
|
||||
self.store_menu.update_merchant(entity)
|
||||
|
||||
def handle_key_pressed_inventory(self, key: KeyValues) -> None:
|
||||
"""
|
||||
@ -140,6 +185,27 @@ class Game:
|
||||
len(self.inventory_menu.values)
|
||||
- 1)
|
||||
|
||||
def handle_key_pressed_store(self, key: KeyValues) -> None:
|
||||
"""
|
||||
In a store menu, we can buy items or close the menu.
|
||||
"""
|
||||
if key == KeyValues.SPACE:
|
||||
self.state = GameMode.PLAY
|
||||
elif key == KeyValues.UP:
|
||||
self.store_menu.go_up()
|
||||
elif key == KeyValues.DOWN:
|
||||
self.store_menu.go_down()
|
||||
if self.store_menu.values and not self.player.dead:
|
||||
if key == KeyValues.ENTER:
|
||||
item = self.store_menu.validate()
|
||||
flag = item.be_sold(self.player, self.store_menu.merchant)
|
||||
if not flag:
|
||||
self.message = _("You do not have enough money")
|
||||
self.display_actions(DisplayActions.UPDATE)
|
||||
# Ensure that the cursor has a good position
|
||||
self.store_menu.position = min(self.store_menu.position,
|
||||
len(self.store_menu.values) - 1)
|
||||
|
||||
def handle_key_pressed_main_menu(self, key: KeyValues) -> None:
|
||||
"""
|
||||
In the main menu, we can navigate through options.
|
||||
|
Reference in New Issue
Block a user