Use a ResourceManager to find assets
This commit is contained in:
		@@ -2,6 +2,7 @@ from typing import List
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from squirrelbattle.menus import Menu, MainMenu
 | 
					from squirrelbattle.menus import Menu, MainMenu
 | 
				
			||||||
from .display import Display
 | 
					from .display import Display
 | 
				
			||||||
 | 
					from ..resources import ResourceManager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MenuDisplay(Display):
 | 
					class MenuDisplay(Display):
 | 
				
			||||||
@@ -74,7 +75,7 @@ class MainMenuDisplay(Display):
 | 
				
			|||||||
        super().__init__(*args)
 | 
					        super().__init__(*args)
 | 
				
			||||||
        self.menu = menu
 | 
					        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.title = file.read().split("\n")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.pad = self.newpad(max(self.rows, len(self.title) + 30),
 | 
					        self.pad = self.newpad(max(self.rows, len(self.title) + 30),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ import sys
 | 
				
			|||||||
from .entities.player import Player
 | 
					from .entities.player import Player
 | 
				
			||||||
from .enums import GameMode, KeyValues, DisplayActions
 | 
					from .enums import GameMode, KeyValues, DisplayActions
 | 
				
			||||||
from .interfaces import Map
 | 
					from .interfaces import Map
 | 
				
			||||||
 | 
					from .resources import ResourceManager
 | 
				
			||||||
from .settings import Settings
 | 
					from .settings import Settings
 | 
				
			||||||
from . import menus
 | 
					from . import menus
 | 
				
			||||||
from typing import Callable
 | 
					from typing import Callable
 | 
				
			||||||
@@ -38,7 +39,7 @@ class Game:
 | 
				
			|||||||
        Create a new game on the screen.
 | 
					        Create a new game on the screen.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        # TODO generate a new map procedurally
 | 
					        # 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.player = Player()
 | 
				
			||||||
        self.map.add_entity(self.player)
 | 
					        self.map.add_entity(self.player)
 | 
				
			||||||
        self.player.move(self.map.start_y, self.map.start_x)
 | 
					        self.player.move(self.map.start_y, self.map.start_x)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								squirrelbattle/resources.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								squirrelbattle/resources.py
									
									
									
									
									
										Normal file
									
								
							@@ -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)
 | 
				
			||||||
@@ -4,6 +4,7 @@ from squirrelbattle.entities.items import Bomb, Heart, Item
 | 
				
			|||||||
from squirrelbattle.entities.monsters import Beaver, Hedgehog, Rabbit, TeddyBear
 | 
					from squirrelbattle.entities.monsters import Beaver, Hedgehog, Rabbit, TeddyBear
 | 
				
			||||||
from squirrelbattle.entities.player import Player
 | 
					from squirrelbattle.entities.player import Player
 | 
				
			||||||
from squirrelbattle.interfaces import Entity, Map
 | 
					from squirrelbattle.interfaces import Entity, Map
 | 
				
			||||||
 | 
					from squirrelbattle.resources import ResourceManager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestEntities(unittest.TestCase):
 | 
					class TestEntities(unittest.TestCase):
 | 
				
			||||||
@@ -11,7 +12,7 @@ class TestEntities(unittest.TestCase):
 | 
				
			|||||||
        """
 | 
					        """
 | 
				
			||||||
        Load example map that can be used in tests.
 | 
					        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.player = Player()
 | 
				
			||||||
        self.map.add_entity(self.player)
 | 
					        self.map.add_entity(self.player)
 | 
				
			||||||
        self.player.move(self.map.start_y, self.map.start_x)
 | 
					        self.player.move(self.map.start_y, self.map.start_x)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@ import unittest
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from squirrelbattle.display.texturepack import TexturePack
 | 
					from squirrelbattle.display.texturepack import TexturePack
 | 
				
			||||||
from squirrelbattle.interfaces import Map, Tile
 | 
					from squirrelbattle.interfaces import Map, Tile
 | 
				
			||||||
 | 
					from squirrelbattle.resources import ResourceManager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestInterfaces(unittest.TestCase):
 | 
					class TestInterfaces(unittest.TestCase):
 | 
				
			||||||
@@ -18,7 +19,7 @@ class TestInterfaces(unittest.TestCase):
 | 
				
			|||||||
        """
 | 
					        """
 | 
				
			||||||
        Try to load a map from a file.
 | 
					        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.width, 52)
 | 
				
			||||||
        self.assertEqual(m.height, 17)
 | 
					        self.assertEqual(m.height, 17)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user