Merge branch 'map_generation' into 'master'

Map generation

Closes #5

See merge request ynerant/squirrel-battle!35
This commit is contained in:
2021-01-10 23:54:28 +01:00
11 changed files with 562 additions and 46 deletions

View File

@ -5,7 +5,6 @@ import curses
import json
from json import JSONDecodeError
import os
from random import randint
import sys
from typing import Any, List, Optional
@ -13,6 +12,7 @@ from . import menus
from .entities.player import Player
from .enums import DisplayActions, GameMode, KeyValues
from .interfaces import Logs, Map
from .mapgeneration import broguelike
from .resources import ResourceManager
from .settings import Settings
from .translations import gettext as _, Translator
@ -55,16 +55,14 @@ class Game:
"""
Creates a new game on the screen.
"""
# TODO generate a new map procedurally
self.maps = []
self.map_index = 0
self.map = Map.load(ResourceManager.get_asset_path("example_map.txt"))
self.map = broguelike.Generator().run()
self.map.logs = self.logs
self.logs.clear()
self.player = Player()
self.map.add_entity(self.player)
self.player.move(self.map.start_y, self.map.start_x)
self.map.spawn_random_entities(randint(3, 10))
self.inventory_menu.update_player(self.player)
@property
@ -201,9 +199,9 @@ class Game:
self.map_index = 0
return
while self.map_index >= len(self.maps):
# TODO: generate a new map
self.maps.append(Map.load(ResourceManager.get_asset_path(
"example_map_2.txt")))
m = broguelike.Generator().run()
m.logs = self.logs
self.maps.append(m)
new_map = self.map
new_map.floor = self.map_index
old_map.remove_entity(self.player)
@ -420,10 +418,13 @@ class Game:
try:
self.map_index = d["map_index"]
self.maps = [Map().load_state(map_dict) for map_dict in d["maps"]]
for i, m in enumerate(self.maps):
m.floor = i
m.logs = self.logs
except KeyError as error:
self.message = _("Some keys are missing in your save file.\n"
"Your save seems to be corrupt. It got deleted.")\
+ f"\n{error}"
+ f"\n{error}"
os.unlink(ResourceManager.get_config_path("save.json"))
self.display_actions(DisplayActions.UPDATE)
return