From 534e9813eff0445a30ef31c8620826d6a89d903c Mon Sep 17 00:00:00 2001 From: = Date: Sun, 28 Mar 2021 18:42:04 +0200 Subject: [PATCH] refactor --- survival/__init__.py | 33 ++++++++------------------------- survival/resource_generator.py | 30 ++++++++++++++++++++++++++++++ survival/systems/draw_system.py | 3 +-- survival/world_generator.py | 19 +++++++++++++++++++ 4 files changed, 58 insertions(+), 27 deletions(-) create mode 100644 survival/resource_generator.py create mode 100644 survival/world_generator.py diff --git a/survival/__init__.py b/survival/__init__.py index 27a0251..f51dd02 100644 --- a/survival/__init__.py +++ b/survival/__init__.py @@ -9,19 +9,13 @@ from survival.components.movement_component import MovementComponent from survival.components.position_component import PositionComponent from survival.components.sprite_component import SpriteComponent from survival.game_map import GameMap +from survival.resource_generator import ResourceGenerator from survival.systems.camera_system import CameraSystem from survival.systems.collision_system import CollisionSystem from survival.systems.draw_system import DrawSystem from survival.systems.input_system import InputSystem from survival.systems.movement_system import MovementSystem - - -def draw_game(delta): - win.fill((0, 0, 0)) - game_map.draw(camera) - world.process(delta) - pygame.display.update() - +from survival.world_generator import WorldGenerator if __name__ == '__main__': pygame.init() @@ -34,12 +28,7 @@ if __name__ == '__main__': game_map = GameMap(int(SCREEN_WIDTH / 32) * 2, 2 * int(SCREEN_HEIGHT / 32) + 1) camera = Camera(game_map.width * 32, game_map.height * 32, win) - world = esper.World() - world.add_processor(InputSystem()) - world.add_processor(CameraSystem(camera)) - world.add_processor(MovementSystem(), priority=1) - world.add_processor(CollisionSystem(game_map), priority=2) - world.add_processor(DrawSystem(win, camera)) + world = WorldGenerator().create_world(camera, game_map) player = world.create_entity() pos = PositionComponent([0, 0], [0, 0]) @@ -53,16 +42,7 @@ if __name__ == '__main__': sprite.set_scale(1) world.add_component(player, sprite) - apple = world.create_entity() - pos = PositionComponent([96, 96], [3, 3]) - world.add_component(apple, pos) - world.add_component(apple, SpriteComponent('apple.png')) - game_map.add_entity(apple, pos) - apple = world.create_entity() - pos = PositionComponent([128, 128], [4, 4]) - world.add_component(apple, pos) - world.add_component(apple, SpriteComponent('apple.png')) - game_map.add_entity(apple, pos) + ResourceGenerator(world, game_map).generate_resources() run = True @@ -78,4 +58,7 @@ if __name__ == '__main__': keys = pygame.key.get_pressed() - draw_game(ms) + win.fill((0, 0, 0)) + game_map.draw(camera) + world.process(ms) + pygame.display.update() diff --git a/survival/resource_generator.py b/survival/resource_generator.py new file mode 100644 index 0000000..3021ca2 --- /dev/null +++ b/survival/resource_generator.py @@ -0,0 +1,30 @@ +import random + +from survival.components.position_component import PositionComponent +from survival.components.sprite_component import SpriteComponent + + +class ResourceGenerator: + def __init__(self, world, game_map): + self.world = world + self.map = game_map + + def generate_resources(self): + for x in range(50): + obj = self.world.create_entity() + sprites = ['apple.png', 'water.png', 'wood.png', 'stone.png'] + + empty_grid_pos = self.get_empty_grid_position() + empty_pos = [empty_grid_pos[0] * 32, empty_grid_pos[1] * 32] + + pos = PositionComponent(empty_pos, empty_grid_pos) + sprite = SpriteComponent(random.choice(sprites)) + self.world.add_component(obj, pos) + self.world.add_component(obj, sprite) + self.map.add_entity(obj, pos) + + def get_empty_grid_position(self): + free_pos = [random.randrange(self.map.width), random.randrange(self.map.height)] + while self.map.is_colliding(free_pos): + free_pos = [random.randrange(self.map.width), random.randrange(self.map.height)] + return free_pos diff --git a/survival/systems/draw_system.py b/survival/systems/draw_system.py index 84fca83..cf70fe7 100644 --- a/survival/systems/draw_system.py +++ b/survival/systems/draw_system.py @@ -4,8 +4,7 @@ from survival.components.sprite_component import SpriteComponent class DrawSystem(esper.Processor): - def __init__(self, window, camera): - self.window = window + def __init__(self, camera): self.camera = camera def process(self, dt): diff --git a/survival/world_generator.py b/survival/world_generator.py new file mode 100644 index 0000000..02e75ff --- /dev/null +++ b/survival/world_generator.py @@ -0,0 +1,19 @@ +from survival import esper +from survival.systems.camera_system import CameraSystem +from survival.systems.collision_system import CollisionSystem +from survival.systems.draw_system import DrawSystem +from survival.systems.input_system import InputSystem +from survival.systems.movement_system import MovementSystem + + +class WorldGenerator: + + def create_world(self, camera, game_map): + world = esper.World() + world.add_processor(InputSystem()) + world.add_processor(CameraSystem(camera)) + world.add_processor(MovementSystem(), priority=1) + world.add_processor(CollisionSystem(game_map), priority=2) + world.add_processor(DrawSystem(camera)) + + return world