From 00f843754a2372abfe06d9c8796a574e86c204a2 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Thu, 19 Nov 2020 02:49:59 +0100 Subject: [PATCH] Use a ResourceManager to find assets --- squirrelbattle/display/menudisplay.py | 3 ++- squirrelbattle/game.py | 3 ++- squirrelbattle/resources.py | 13 +++++++++++++ squirrelbattle/tests/entities_test.py | 3 ++- squirrelbattle/tests/interfaces_test.py | 3 ++- 5 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 squirrelbattle/resources.py diff --git a/squirrelbattle/display/menudisplay.py b/squirrelbattle/display/menudisplay.py index 97fb789..fca1ddf 100644 --- a/squirrelbattle/display/menudisplay.py +++ b/squirrelbattle/display/menudisplay.py @@ -2,6 +2,7 @@ from typing import List from squirrelbattle.menus import Menu, MainMenu from .display import Display +from ..resources import ResourceManager class MenuDisplay(Display): @@ -74,7 +75,7 @@ class MainMenuDisplay(Display): super().__init__(*args) self.menu = menu - with open("squirrelbattle/assets/ascii_art.txt", "r") as file: + with open(ResourceManager.get_asset_path("ascii_art.txt"), "r") as file: self.title = file.read().split("\n") self.pad = self.newpad(max(self.rows, len(self.title) + 30), diff --git a/squirrelbattle/game.py b/squirrelbattle/game.py index 05da3e8..b22c4ed 100644 --- a/squirrelbattle/game.py +++ b/squirrelbattle/game.py @@ -7,6 +7,7 @@ import sys from .entities.player import Player from .enums import GameMode, KeyValues, DisplayActions from .interfaces import Map +from .resources import ResourceManager from .settings import Settings from . import menus from typing import Callable @@ -38,7 +39,7 @@ class Game: Create a new game on the screen. """ # TODO generate a new map procedurally - self.map = Map.load("squirrelbattle/assets/example_map_2.txt") + self.map = Map.load(ResourceManager.get_asset_path("example_map_2.txt")) self.player = Player() self.map.add_entity(self.player) self.player.move(self.map.start_y, self.map.start_x) diff --git a/squirrelbattle/resources.py b/squirrelbattle/resources.py new file mode 100644 index 0000000..c71c267 --- /dev/null +++ b/squirrelbattle/resources.py @@ -0,0 +1,13 @@ +from pathlib import Path + + +class ResourceManager: + """ + The ResourceManager loads resources at their right place, + and stores files in config directory. + """ + BASE_DIR = Path(__file__).resolve().parent / 'assets' + + @classmethod + def get_asset_path(cls, filename: str) -> str: + return str(cls.BASE_DIR / filename) diff --git a/squirrelbattle/tests/entities_test.py b/squirrelbattle/tests/entities_test.py index 6cf2fe4..5cd6ad5 100644 --- a/squirrelbattle/tests/entities_test.py +++ b/squirrelbattle/tests/entities_test.py @@ -4,6 +4,7 @@ from squirrelbattle.entities.items import Bomb, Heart, Item from squirrelbattle.entities.monsters import Beaver, Hedgehog, Rabbit, TeddyBear from squirrelbattle.entities.player import Player from squirrelbattle.interfaces import Entity, Map +from squirrelbattle.resources import ResourceManager class TestEntities(unittest.TestCase): @@ -11,7 +12,7 @@ class TestEntities(unittest.TestCase): """ Load example map that can be used in tests. """ - self.map = Map.load("squirrelbattle/assets/example_map.txt") + self.map = Map.load(ResourceManager.get_asset_path("example_map.txt")) self.player = Player() self.map.add_entity(self.player) self.player.move(self.map.start_y, self.map.start_x) diff --git a/squirrelbattle/tests/interfaces_test.py b/squirrelbattle/tests/interfaces_test.py index a55a7b3..62f2092 100644 --- a/squirrelbattle/tests/interfaces_test.py +++ b/squirrelbattle/tests/interfaces_test.py @@ -2,6 +2,7 @@ import unittest from squirrelbattle.display.texturepack import TexturePack from squirrelbattle.interfaces import Map, Tile +from squirrelbattle.resources import ResourceManager class TestInterfaces(unittest.TestCase): @@ -18,7 +19,7 @@ class TestInterfaces(unittest.TestCase): """ Try to load a map from a file. """ - m = Map.load("squirrelbattle/assets/example_map.txt") + m = Map.load(ResourceManager.get_asset_path("example_map.txt")) self.assertEqual(m.width, 52) self.assertEqual(m.height, 17)