From 080d20a9cf81765cac6622063410fabe9c331ff0 Mon Sep 17 00:00:00 2001 From: n0remac Date: Sun, 27 Sep 2020 18:26:19 -0700 Subject: [PATCH 01/10] Adding arcade.get_display_size() --- Core/GameInstance.py | 34 ++-------------------------------- 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/Core/GameInstance.py b/Core/GameInstance.py index 6333b19..9e2a1a5 100644 --- a/Core/GameInstance.py +++ b/Core/GameInstance.py @@ -1,15 +1,5 @@ - -import arcade -import math import arcade -from Constants.Game import SCREEN_WIDTH, SCREEN_HEIGHT -from Core.GameResources import GameResources -import ctypes -import platform -import subprocess - -from Constants.Physics import PLAYER_MOVEMENT_SPEED from Constants.Game import SCREEN_WIDTH, SCREEN_HEIGHT from Core.GameResources import GameResources @@ -38,27 +28,7 @@ def __init__(self, window): self.game_resources = GameResources(self) self.object_manager = ObjectManager(self.game_resources, self) - self.screensize = 1920,1080 - - # Fullscreen information get based on OS - if platform.system() == 'Linux': - print("This game expects linux users to be using a 1080p, 16:9 monitor. Other aspect ratios or resolutions on linux may cause issues.") - """ - cmd = ['xrandr'] - cmd2 = ['grep', '*'] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE) - p2 = subprocess.Popen(cmd2, stdin=p.stdout, stdout=subprocess.PIPE) - p.stdout.close() - resolution_string, junk = p2.communicate() - resolution = resolution_string.split()[0] - width, height = resolution.split('x') - self.screensize[0] = width - self.screensize[1] = height - """ - self.screensize = (1920, 1080) - elif platform.system() == 'Windows': - user32 = ctypes.windll.user32 - self.screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1) + self.screensize = arcade.get_display_size() # Physics engine self.physics_engine = setup_physics_engine(self.game_resources) @@ -86,7 +56,7 @@ def __init__(self, window): ) # dim the ambient lighting to make the player's light more vibrant - self.scene_renderer.light_renderer.ambient_light = (0.2, 0.2, 0.2) + self.scene_renderer.light_renderer.ambient_light = (0.1, 0.1, 0.1) #self.scene_renderer.light_renderer.ambient_light = (0.01, 0.01, 0.01) # Core game resources From 66d1e90488dfb2d160dda356b4cbd74a73a7360c Mon Sep 17 00:00:00 2001 From: n0remac Date: Sun, 27 Sep 2020 20:07:11 -0700 Subject: [PATCH 02/10] Removed unused code. --- Core/Enemy.py | 4 ++-- Core/GameInstance.py | 43 +++++++++++-------------------------------- Core/GameResources.py | 27 ++++----------------------- Core/ObjectManager.py | 9 +++------ 4 files changed, 20 insertions(+), 63 deletions(-) diff --git a/Core/Enemy.py b/Core/Enemy.py index b06cdb4..4fe9656 100644 --- a/Core/Enemy.py +++ b/Core/Enemy.py @@ -25,7 +25,7 @@ def __init__(self, barrier_list, game_resources): self.barrier_list = barrier_list - self.light = game_resources.game_instance.scene_renderer.light_renderer.create_point_light( + self.light = game_resources.scene_renderer.light_renderer.create_point_light( (-1000, -1000), (1.5, 0.5, 0.25), 196 ) self.barrier_list = barrier_list @@ -35,7 +35,7 @@ def draw(self): arcade.draw_line_strip(self.path, arcade.color.BLUE, 2) def on_death(self): - self.game_resources.game_instance.scene_renderer.light_renderer.destroy_light(self.light) + self.game_resources.scene_renderer.light_renderer.destroy_light(self.light) def calculate_astar(self): diff --git a/Core/GameInstance.py b/Core/GameInstance.py index 9e2a1a5..3721969 100644 --- a/Core/GameInstance.py +++ b/Core/GameInstance.py @@ -25,20 +25,10 @@ def __init__(self, window): self.scene_renderer = RendererFactory.create_renderer(window) # Core game resources - self.game_resources = GameResources(self) - self.object_manager = ObjectManager(self.game_resources, self) + self.game_resources = GameResources(self.scene_renderer) self.screensize = arcade.get_display_size() - # Physics engine - self.physics_engine = setup_physics_engine(self.game_resources) - - self.horizontal_key_list = [] - self.verticle_key_list = [] - - - - # bind rendering callbacks self.scene_renderer.draw_primary_callback = self.on_draw_scene self.scene_renderer.draw_emissive_callback = self.on_draw_emissive @@ -60,18 +50,11 @@ def __init__(self, window): #self.scene_renderer.light_renderer.ambient_light = (0.01, 0.01, 0.01) # Core game resources - self.game_resources = GameResources(self) - self.object_manager = ObjectManager(self.game_resources, self) - - # Physics engine - self.physics_engine = setup_physics_engine(self.game_resources) + self.game_resources = GameResources(self.scene_renderer) # create light sources self.light_list = [] - - - # torch particle system self.torch_particle_system = TorchSystem(window.ctx) self.game_resources.torch_particle_system = self.torch_particle_system @@ -90,17 +73,15 @@ def __init__(self, window): for light in self.game_resources.light_list: radius = radius_by_type.get(light.properties["type"]) - self.light_list.append( - self.scene_renderer.light_renderer.create_point_light( - (light.center_x, light.center_y), # Position - ( - 2.5, - 1.25, - 0.5, - ), # Color, 0 = black, 1 = white, 0.5 = grey, order is RGB This can go over 1.0 because of HDR - radius, - ) # Radius - ) + self.scene_renderer.light_renderer.create_point_light( + (light.center_x, light.center_y), # Position + ( + 2.5, + 1.25, + 0.5, + ), # Color, 0 = black, 1 = white, 0.5 = grey, order is RGB This can go over 1.0 because of HDR + radius, + ) # Radius if light.properties["type"] == "torch": self.torch_particle_system.add_torch((light.center_x, light.center_y)) @@ -170,8 +151,6 @@ def on_update(self, delta_time): self.game_resources.player_sprite.on_update(delta_time) self.game_resources.projectile_manager.projectile_physics.apply_impulse(self.game_resources.player_sprite, (x_force, y_force)) - # Move the player with the physics engine - # self.physics_engine.update() self.game_resources.enemy_manager.on_update(delta_time) diff --git a/Core/GameResources.py b/Core/GameResources.py index 44ae514..bf1c00d 100644 --- a/Core/GameResources.py +++ b/Core/GameResources.py @@ -27,9 +27,9 @@ class GameResources: Load arcade resources """ - def __init__(self, game_instance): + def __init__(self, scene_renderer): - self.game_instance = game_instance + self.scene_renderer = scene_renderer # Create the sprite lists self.sprite_list = arcade.SpriteList(use_spatial_hash=True) self.player_list = arcade.SpriteList() @@ -59,14 +59,6 @@ def __init__(self, game_instance): self.dead = False - # Static map for testing - # generated_map = generate_tiled_compatible_level(70, 70) - # place_room(Rect(1, 1, 5, 5), generated_map) - # place_room(Rect(10, 1, 10, 10), generated_map) - # place_room(Rect(1, 10, 8, 8), generated_map) - # place_tunnel(Rect(6, 3, 5, 1), generated_map) - # place_tunnel(Rect(3, 6, 1, 5), generated_map) - fake_walls_layer = TileLayer( id_=1, name="Walls", @@ -135,21 +127,10 @@ def __init__(self, game_instance): my_map, fake_floor_layer, scaling=SPRITE_SCALING_TILES, use_spatial_hash=True ) - # Uncomment if you want to actually load the level from the Tiled map. - # self.wall_list = arcade.tilemap.process_layer( - # my_map, "Walls", SPRITE_SCALING_TILES - # ) - # self.floor_list = arcade.tilemap.process_layer( - # my_map, "Floor", SPRITE_SCALING_TILES - # ) - # self.light_list = arcade.tilemap.process_layer( - # my_map, "Lighting", SPRITE_SCALING_TILES - # ) - self.start_location = generated_map["start_location"][0].location # Create player sprite - self.player_sprite = PlayerCharacter(convert_from_tiled_coordinates(my_map, generated_map["start_location"][0].location), self, game_instance.scene_renderer) + self.player_sprite = PlayerCharacter(convert_from_tiled_coordinates(my_map, generated_map["start_location"][0].location), self, self.scene_renderer) # Set player location i = random.randint(0, len(self.floor_list)) @@ -159,7 +140,7 @@ def __init__(self, game_instance): self.player_list.append(self.player_sprite) # Game managers - self.object_manager = ObjectManager(self, game_instance) + self.object_manager = ObjectManager(self, scene_renderer) self.enemy_manager = EnemyManager(self) self.enemy_manager.setup() self.projectile_manager = ProjectileManager(self) diff --git a/Core/ObjectManager.py b/Core/ObjectManager.py index 62671a2..baec27b 100644 --- a/Core/ObjectManager.py +++ b/Core/ObjectManager.py @@ -5,13 +5,10 @@ class ObjectManager: """ Creates objects in the dungeon. """ - def __init__(self, game_resources, game_instance): + def __init__(self, game_resources, scene_renderer): self.object_list = arcade.SpriteList() self.game_resources = game_resources - self.game_instance = game_instance - - - #for floor in + self.scene_renderer = scene_renderer def flask(self, x, y): obj = Item((x, y), 'Graphics/items/flasks/flasks_1', 'flask') @@ -25,7 +22,7 @@ def candle(self, x, y): obj = Item((x, y), 'Graphics/items/torch/candlestick_1', 'candle') self.object_list.append(obj) self.game_resources.torch_particle_system.add_candle((x,y)) - self.game_instance.scene_renderer.light_renderer.create_point_light( + self.scene_renderer.scene_renderer.light_renderer.create_point_light( (x,y), # Position ( 2.5, From 2e5bfa59ff0133c317082fa89143a2ceb1d5b3a1 Mon Sep 17 00:00:00 2001 From: n0remac Date: Sun, 27 Sep 2020 20:22:35 -0700 Subject: [PATCH 03/10] Code from Game_Instance to Game_Resource. --- Core/GameInstance.py | 16 ---------------- Core/GameResources.py | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/Core/GameInstance.py b/Core/GameInstance.py index 3721969..9118d7d 100644 --- a/Core/GameInstance.py +++ b/Core/GameInstance.py @@ -145,20 +145,4 @@ def on_draw_after_post(self): def on_update(self, delta_time): """ Movement and game logic """ - - x_force = self.game_resources.player_sprite.x_force - y_force = self.game_resources.player_sprite.y_force - self.game_resources.player_sprite.on_update(delta_time) - self.game_resources.projectile_manager.projectile_physics.apply_impulse(self.game_resources.player_sprite, (x_force, y_force)) - - - self.game_resources.enemy_manager.on_update(delta_time) - - # move projectiles - self.game_resources.projectile_manager.on_update(delta_time) - - - # update animations - self.game_resources.player_sprite.update_animation(delta_time) - self.game_resources.object_manager.on_update(delta_time) self.game_resources.on_update(delta_time) diff --git a/Core/GameResources.py b/Core/GameResources.py index bf1c00d..39386a3 100644 --- a/Core/GameResources.py +++ b/Core/GameResources.py @@ -166,6 +166,21 @@ def on_draw(self): self.enemy_manager.enemy_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) def on_update(self, delta_time): + + x_force = self.player_sprite.x_force + y_force = self.player_sprite.y_force + self.player_sprite.on_update(delta_time) + self.projectile_manager.projectile_physics.apply_impulse(self.player_sprite, + (x_force, y_force)) + self.enemy_manager.on_update(delta_time) + + # move projectiles + self.projectile_manager.on_update(delta_time) + + # update animations + self.player_sprite.update_animation(delta_time) + self.object_manager.on_update(delta_time) + if self.shake_remain > 0: self.shake_x = random.randrange(-self.shake_strength,self.shake_strength) self.shake_y = random.randrange(-self.shake_strength,self.shake_strength) From f59e68206cb091812865beadca81c795519c1717 Mon Sep 17 00:00:00 2001 From: n0remac Date: Sun, 27 Sep 2020 21:26:36 -0700 Subject: [PATCH 04/10] Remove old code. Enemy extends character. --- Core/Character.py | 14 ++------------ Core/Enemy.py | 12 +++++------- Core/GameInstance.py | 6 ------ Core/PlayerCharacter.py | 3 ++- run_game.spec | 40 ---------------------------------------- 5 files changed, 9 insertions(+), 66 deletions(-) delete mode 100644 run_game.spec diff --git a/Core/Character.py b/Core/Character.py index 1d31f89..8590aeb 100644 --- a/Core/Character.py +++ b/Core/Character.py @@ -1,7 +1,5 @@ import arcade -import math -from Constants.Physics import PLAYER_MOVEMENT_SPEED from Constants.Game import ( SPRITE_SCALING_PLAYER, DOWN_FACING, @@ -11,13 +9,11 @@ SPRITE_SIZE) from Constants.Animation import WALK_CYCLE_LENGTH, IDLE_CYCLE_LENGTH -# from Core.Projectiles.Projectile_Manager import angle - class Character(arcade.Sprite): """ Player Sprite""" - def __init__(self, position): + def __init__(self, main_path=''): # Set up parent class super().__init__() @@ -40,17 +36,11 @@ def __init__(self, position): # --- Load Textures --- - self.main_path = '' + self.main_path = main_path # Set the initial texture self.texture = None - grid_x = 20 - grid_y = 25 - self.center_x = SPRITE_SIZE * grid_x + SPRITE_SIZE / 2 - self.center_y = SPRITE_SIZE * grid_y + SPRITE_SIZE / 2 - - self.position = position def load_textures(self): # Load textures for idle standing diff --git a/Core/Enemy.py b/Core/Enemy.py index 4fe9656..0abfe74 100644 --- a/Core/Enemy.py +++ b/Core/Enemy.py @@ -1,20 +1,18 @@ -from typing import List, Union - import arcade -import random - from arcade import SpriteList +from typing import List, Union +from Core.Character import Character from Constants.Game import SPRITE_SIZE, SPRITE_SCALING_PLAYER, ENEMY_AWARENESS from Constants.Physics import PLAYER_MOVEMENT_SPEED -class Enemy(arcade.Sprite): +class Enemy(Character): def __init__(self, barrier_list, game_resources): super().__init__( - "Graphics/Character_animation/monsters_idle/skeleton1/v1/skeleton_v1_1.png", - SPRITE_SCALING_PLAYER, + "Graphics/Character_animation/monsters_idle/vampire/v2/vampire_v2", ) + self.load_textures() self.game_resources = game_resources self.speed = PLAYER_MOVEMENT_SPEED self.path = [ diff --git a/Core/GameInstance.py b/Core/GameInstance.py index 9118d7d..5d8aba6 100644 --- a/Core/GameInstance.py +++ b/Core/GameInstance.py @@ -24,9 +24,6 @@ def __init__(self, window): # This configures the post processing stack and default lighting self.scene_renderer = RendererFactory.create_renderer(window) - # Core game resources - self.game_resources = GameResources(self.scene_renderer) - self.screensize = arcade.get_display_size() # bind rendering callbacks @@ -52,9 +49,6 @@ def __init__(self, window): # Core game resources self.game_resources = GameResources(self.scene_renderer) - # create light sources - self.light_list = [] - # torch particle system self.torch_particle_system = TorchSystem(window.ctx) self.game_resources.torch_particle_system = self.torch_particle_system diff --git a/Core/PlayerCharacter.py b/Core/PlayerCharacter.py index 77ad702..098ef24 100644 --- a/Core/PlayerCharacter.py +++ b/Core/PlayerCharacter.py @@ -23,7 +23,8 @@ class PlayerCharacter(Character): def __init__(self, position, game_resources, scene_renderer): # Set up parent class - super().__init__(position) + super().__init__() + self.position = position self.game_resources = game_resources self.main_path = "Graphics/Character_animation/Acolyte/player_animation_down_idle" self.load_textures() diff --git a/run_game.spec b/run_game.spec deleted file mode 100644 index facc9e8..0000000 --- a/run_game.spec +++ /dev/null @@ -1,40 +0,0 @@ -# -*- mode: python ; coding: utf-8 -*- - -block_cipher = None - -import arcade -import pymunk -import os - -a = Analysis(['run_game.py'], - pathex=['/home/free/code/Pyweek'], - binaries=[ (pymunk.chipmunk_path, '.') ], - datas=[(os.path.abspath(arcade.__file__ + '/../'), 'arcade')], - hiddenimports=['arcade', 'pymunk'], - hookspath=[], - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) -pyz = PYZ(a.pure, a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, - a.scripts, - [], - exclude_binaries=True, - name='run_game', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - console=True ) -coll = COLLECT(exe, - a.binaries, - a.zipfiles, - a.datas, - strip=False, - upx=True, - upx_exclude=[], - name='run_game') From 4df360a724e267571e62032f9b232e81b84086b6 Mon Sep 17 00:00:00 2001 From: n0remac Date: Sun, 27 Sep 2020 21:58:59 -0700 Subject: [PATCH 05/10] Animate enemies. --- Core/Enemy.py | 1 + Core/GameResources.py | 4 ++-- Core/ObjectManager.py | 7 +++++-- Core/PlayerCharacter.py | 2 +- Core/Projectile_Manager.py | 14 ++++++++------ 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Core/Enemy.py b/Core/Enemy.py index 0abfe74..ac160d1 100644 --- a/Core/Enemy.py +++ b/Core/Enemy.py @@ -132,3 +132,4 @@ def on_update(self, delta_time): if arcade.get_distance(position[0], position[1], enemy.position[0], enemy.position[1]) < 500: enemy.calculate_astar() enemy.update_position() + enemy.update_animation(delta_time) diff --git a/Core/GameResources.py b/Core/GameResources.py index 39386a3..1078555 100644 --- a/Core/GameResources.py +++ b/Core/GameResources.py @@ -164,15 +164,15 @@ def on_draw(self): self.player_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) self.object_manager.object_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) self.enemy_manager.enemy_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) - def on_update(self, delta_time): x_force = self.player_sprite.x_force y_force = self.player_sprite.y_force self.player_sprite.on_update(delta_time) + self.enemy_manager.on_update(delta_time) + self.projectile_manager.projectile_physics.apply_impulse(self.player_sprite, (x_force, y_force)) - self.enemy_manager.on_update(delta_time) # move projectiles self.projectile_manager.on_update(delta_time) diff --git a/Core/ObjectManager.py b/Core/ObjectManager.py index baec27b..c2f842a 100644 --- a/Core/ObjectManager.py +++ b/Core/ObjectManager.py @@ -13,16 +13,18 @@ def __init__(self, game_resources, scene_renderer): def flask(self, x, y): obj = Item((x, y), 'Graphics/items/flasks/flasks_1', 'flask') self.object_list.append(obj) + return obj def candle_drop(self, x, y): obj = Item((x, y), 'Graphics/items/torch/candle_drop','candle_drop') self.object_list.append(obj) + return obj def candle(self, x, y): obj = Item((x, y), 'Graphics/items/torch/candlestick_1', 'candle') self.object_list.append(obj) self.game_resources.torch_particle_system.add_candle((x,y)) - self.scene_renderer.scene_renderer.light_renderer.create_point_light( + self.scene_renderer.light_renderer.create_point_light( (x,y), # Position ( 2.5, @@ -42,7 +44,8 @@ def on_update(self, delta_time): class Item(Character): def __init__(self, position, main_path, kind): - super().__init__(position) + super().__init__() + self.position = position self.main_path = main_path self.load_textures() self.kind = kind \ No newline at end of file diff --git a/Core/PlayerCharacter.py b/Core/PlayerCharacter.py index 098ef24..62ad428 100644 --- a/Core/PlayerCharacter.py +++ b/Core/PlayerCharacter.py @@ -38,7 +38,7 @@ def __init__(self, position, game_resources, scene_renderer): self.y_force = 0 self.speed = 40 - self.candles = 0 + self.candles = 5 self.walk_textures = [] walk_path = 'Graphics/Character_animation/Acolyte/player_animation_down_walk' diff --git a/Core/Projectile_Manager.py b/Core/Projectile_Manager.py index ea8248f..eae4ec7 100644 --- a/Core/Projectile_Manager.py +++ b/Core/Projectile_Manager.py @@ -195,17 +195,19 @@ def enemy_bullet_handler(_arbiter, _space, _data): enemy_sprite.remove_from_sprite_lists() will_drop = random.randint(0, 10) + obj = '' if will_drop > 6: - self.game_resources.object_manager.flask(enemy_sprite.center_x, enemy_sprite.center_y) + obj = self.game_resources.object_manager.flask(enemy_sprite.center_x, enemy_sprite.center_y) elif will_drop > 3: - self.game_resources.object_manager.candle_drop(enemy_sprite.center_x, enemy_sprite.center_y) - self.game_resources.object_manager.object_list - self.projectile_physics.add_sprite_list( - self.game_resources.object_manager.object_list, + obj = self.game_resources.object_manager.candle_drop(enemy_sprite.center_x, enemy_sprite.center_y) + + if obj != '': + self.projectile_physics.add_sprite( + obj, collision_type="object", body_type=arcade.PymunkPhysicsEngine.STATIC, - ) + ) enemy_sprite.on_death() if bullet_sprite: From 26215ab9ceb67848891c5c817aca77636a4396d1 Mon Sep 17 00:00:00 2001 From: n0remac Date: Sun, 27 Sep 2020 22:05:15 -0700 Subject: [PATCH 06/10] Add more enemy sprites. --- Core/Enemy.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Core/Enemy.py b/Core/Enemy.py index ac160d1..8fdc7ad 100644 --- a/Core/Enemy.py +++ b/Core/Enemy.py @@ -1,3 +1,5 @@ +import random + import arcade from arcade import SpriteList from typing import List, Union @@ -9,9 +11,8 @@ class Enemy(Character): def __init__(self, barrier_list, game_resources): - super().__init__( - "Graphics/Character_animation/monsters_idle/vampire/v2/vampire_v2", - ) + super().__init__() + self.randomize_enemy_sprite() self.load_textures() self.game_resources = game_resources self.speed = PLAYER_MOVEMENT_SPEED @@ -27,7 +28,15 @@ def __init__(self, barrier_list, game_resources): (-1000, -1000), (1.5, 0.5, 0.25), 196 ) self.barrier_list = barrier_list - + def randomize_enemy_sprite(self): + sprites = [ + "Graphics/Character_animation/monsters_idle/vampire/v2/vampire_v2", + "Graphics/Character_animation/monsters_idle/skull/v2/skull_v2", + "Graphics/Character_animation/monsters_idle/skeleton2/v2/skeleton2_v2", + "Graphics/Character_animation/monsters_idle/skeleton1/v2/skeleton_v2", + ] + choice = random.choice(sprites) + self.main_path = choice def draw(self): if self.path: arcade.draw_line_strip(self.path, arcade.color.BLUE, 2) From 7cafe3cb3bfee78c0f351e0464b6a5a17450b753 Mon Sep 17 00:00:00 2001 From: n0remac Date: Sun, 27 Sep 2020 22:08:09 -0700 Subject: [PATCH 07/10] Adding everything --- Core/Enemy.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Core/Enemy.py b/Core/Enemy.py index 8fdc7ad..a90a3e6 100644 --- a/Core/Enemy.py +++ b/Core/Enemy.py @@ -28,6 +28,7 @@ def __init__(self, barrier_list, game_resources): (-1000, -1000), (1.5, 0.5, 0.25), 196 ) self.barrier_list = barrier_list + def randomize_enemy_sprite(self): sprites = [ "Graphics/Character_animation/monsters_idle/vampire/v2/vampire_v2", @@ -37,6 +38,7 @@ def randomize_enemy_sprite(self): ] choice = random.choice(sprites) self.main_path = choice + def draw(self): if self.path: arcade.draw_line_strip(self.path, arcade.color.BLUE, 2) From c761577ee723d3b9bdef9f75787043607c15b6e5 Mon Sep 17 00:00:00 2001 From: n0remac Date: Mon, 28 Sep 2020 02:11:22 -0700 Subject: [PATCH 08/10] Testing enemy spawning --- Core/Enemy.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Core/Enemy.py b/Core/Enemy.py index a90a3e6..4c7948f 100644 --- a/Core/Enemy.py +++ b/Core/Enemy.py @@ -5,7 +5,7 @@ from typing import List, Union from Core.Character import Character -from Constants.Game import SPRITE_SIZE, SPRITE_SCALING_PLAYER, ENEMY_AWARENESS +from Constants.Game import SPRITE_SIZE, SPRITE_IMAGE_SIZE, ENEMY_AWARENESS from Constants.Physics import PLAYER_MOVEMENT_SPEED @@ -27,7 +27,6 @@ def __init__(self, barrier_list, game_resources): self.light = game_resources.scene_renderer.light_renderer.create_point_light( (-1000, -1000), (1.5, 0.5, 0.25), 196 ) - self.barrier_list = barrier_list def randomize_enemy_sprite(self): sprites = [ @@ -103,6 +102,21 @@ def spawn_enemy(self, barrier_list, position): return enemy + def spawn_random_enemy(self): + radius = self.game_resources.player_sprite.player_health.max_light_radius + player_pos = self.game_resources.player_sprite.position + rand_x = random.randint(player_pos[0]-radius, player_pos[0]+radius) + rand_y = random.randint(player_pos[1] - radius, player_pos[1] + radius) + + + for floor in self.game_resources.floor_list: + if floor.position[0] < rand_x + 100 and floor.position[0] > rand_x - 100 and floor.position[1] < rand_x + 100 and floor.position[1] > rand_x - 100: + self.spawn_enemy(self.make_barrier_list(), floor.position) + + def spawn_continual_enemies(self): + if len(self.enemy_list) < 10: + self.spawn_random_enemy() + def make_barrier_list(self): grid_size = SPRITE_SIZE @@ -137,7 +151,7 @@ def setup(self): pass def on_update(self, delta_time): - + self.spawn_continual_enemies() for enemy in self.enemy_list: position = self.game_resources.player_sprite.position if arcade.get_distance(position[0], position[1], enemy.position[0], enemy.position[1]) < 500: From 43ee7785c2857322a7b6131300a71326dfaf2c1d Mon Sep 17 00:00:00 2001 From: n0remac Date: Mon, 28 Sep 2020 19:03:51 -0700 Subject: [PATCH 09/10] Calling astar on one emeny at a time at a set rate. --- Constants/Game.py | 3 +++ Core/Enemy.py | 50 +++++++++++++++++++++++++++++------------------ 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/Constants/Game.py b/Constants/Game.py index 9ee235b..d6a99e4 100644 --- a/Constants/Game.py +++ b/Constants/Game.py @@ -43,3 +43,6 @@ # How close the player needs to be for the enemy to track it. # starts to break above 15 ENEMY_AWARENESS = 40 + +# How often in should a star be ran +PATHING_RATE = 1.0 \ No newline at end of file diff --git a/Core/Enemy.py b/Core/Enemy.py index 4c7948f..39e36bc 100644 --- a/Core/Enemy.py +++ b/Core/Enemy.py @@ -4,10 +4,9 @@ from arcade import SpriteList from typing import List, Union -from Core.Character import Character -from Constants.Game import SPRITE_SIZE, SPRITE_IMAGE_SIZE, ENEMY_AWARENESS +from Constants.Game import ENEMY_AWARENESS, PATHING_RATE, SPRITE_SIZE from Constants.Physics import PLAYER_MOVEMENT_SPEED - +from Core.Character import Character class Enemy(Character): def __init__(self, barrier_list, game_resources): @@ -16,10 +15,7 @@ def __init__(self, barrier_list, game_resources): self.load_textures() self.game_resources = game_resources self.speed = PLAYER_MOVEMENT_SPEED - self.path = [ - self.game_resources.player_sprite.center_x, - self.game_resources.player_sprite.center_y, - ] + self.path = [] self.obstacles = self.game_resources.wall_list self.barrier_list = barrier_list @@ -82,6 +78,10 @@ def update_position(self): physics_engine.apply_impulse(self, impulse_force) self.light.position = (self.center_x, self.center_y) + def on_update(self, delta_time): + self.update_position() + self.update_animation(delta_time) + class EnemyManager: enemy_list: Union[SpriteList, List[Enemy]] @@ -89,6 +89,8 @@ class EnemyManager: def __init__(self, game_resources): self.game_resources = game_resources self.enemy_list = arcade.SpriteList() + self.next_to_path = 0 + self.time_elapsed = 0 def spawn_enemy(self, barrier_list, position): # Enemy @@ -105,21 +107,22 @@ def spawn_enemy(self, barrier_list, position): def spawn_random_enemy(self): radius = self.game_resources.player_sprite.player_health.max_light_radius player_pos = self.game_resources.player_sprite.position - rand_x = random.randint(player_pos[0]-radius, player_pos[0]+radius) - rand_y = random.randint(player_pos[1] - radius, player_pos[1] + radius) - - for floor in self.game_resources.floor_list: - if floor.position[0] < rand_x + 100 and floor.position[0] > rand_x - 100 and floor.position[1] < rand_x + 100 and floor.position[1] > rand_x - 100: - self.spawn_enemy(self.make_barrier_list(), floor.position) + rand_x = random.randint(int(player_pos[0]-radius), int(player_pos[0]+radius)) + rand_y = random.randint(int(player_pos[1] - radius), int(player_pos[1] + radius)) + enemy = self.spawn_enemy(self.make_barrier_list(), (player_pos[0]+100, player_pos[1]+100)) + self.game_resources.projectile_manager.add_enemy(enemy) + #for floor in self.game_resources.floor_list: + # if floor.position[0] < rand_x + 100 and floor.position[0] > rand_x - 100 and floor.position[1] < rand_x + 100 and floor.position[1] > rand_x - 100: + # self.spawn_enemy(self.make_barrier_list(), floor.position) def spawn_continual_enemies(self): - if len(self.enemy_list) < 10: + if len(self.enemy_list) < 5: self.spawn_random_enemy() def make_barrier_list(self): grid_size = SPRITE_SIZE - + print() playing_field_left_boundary = self.game_resources.player_sprite.position[0] - ( ENEMY_AWARENESS * SPRITE_SIZE ) @@ -151,10 +154,19 @@ def setup(self): pass def on_update(self, delta_time): - self.spawn_continual_enemies() + + # move enemies for enemy in self.enemy_list: position = self.game_resources.player_sprite.position if arcade.get_distance(position[0], position[1], enemy.position[0], enemy.position[1]) < 500: - enemy.calculate_astar() - enemy.update_position() - enemy.update_animation(delta_time) + enemy.on_update(delta_time) + + # path the next enemy in line + if self.time_elapsed >= PATHING_RATE: + if self.next_to_path < len(self.enemy_list): + self.enemy_list[self.next_to_path].calculate_astar() + self.next_to_path += 1 + else: + self.next_to_path = 0 + + self.time_elapsed += delta_time \ No newline at end of file From 688f1572a587924ae787da15ff769019b384a2db Mon Sep 17 00:00:00 2001 From: n0remac Date: Tue, 29 Sep 2020 14:34:46 -0700 Subject: [PATCH 10/10] Switch back to static test map. --- Core/GameResources.py | 48 +++++++++++++++++++++++++++++++++----- Core/Projectile_Manager.py | 5 +++- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/Core/GameResources.py b/Core/GameResources.py index 1078555..b4cec43 100644 --- a/Core/GameResources.py +++ b/Core/GameResources.py @@ -9,11 +9,12 @@ from Core.Enemy import EnemyManager from Constants.Game import ( SPRITE_SCALING_TILES, + SPRITE_SCALING_PLAYER, SPRITE_SIZE, SCREEN_WIDTH, SCREEN_HEIGHT, LERP_MARGIN, - CAMERA_SPEED + CAMERA_SPEED, ) from Core.ArcadeUtils import convert_from_tiled_coordinates from Core.LevelGenerator.generate_game_level import generate_game_level @@ -59,6 +60,7 @@ def __init__(self, scene_renderer): self.dead = False + ''' fake_walls_layer = TileLayer( id_=1, name="Walls", @@ -101,7 +103,7 @@ def __init__(self, scene_renderer): self.warps_list = arcade.tilemap._process_object_layer( my_map, fake_warps_layer, scaling=SPRITE_SCALING_TILES, use_spatial_hash=True ) - + self.doors_enabled = False if "Doors" in generated_map: @@ -116,26 +118,57 @@ def __init__(self, scene_renderer): self.doors_list = arcade.tilemap._process_object_layer( my_map, fake_doors_layer, scaling=SPRITE_SCALING_TILES, use_spatial_hash=True ) + self.wall_list = arcade.tilemap._process_tile_layer( - my_map, fake_walls_layer, scaling=SPRITE_SCALING_TILES, use_spatial_hash=True + my_map, self.wall_list, scaling=SPRITE_SCALING_TILES, use_spatial_hash=True ) self.light_list = arcade.tilemap._process_tile_layer( - my_map, fake_lighting_layer, scaling=SPRITE_SCALING_TILES, use_spatial_hash=True + my_map, self.light_list, scaling=SPRITE_SCALING_TILES, use_spatial_hash=True ) self.floor_list = arcade.tilemap._process_tile_layer( - my_map, fake_floor_layer, scaling=SPRITE_SCALING_TILES, use_spatial_hash=True + my_map, self.floor_list, scaling=SPRITE_SCALING_TILES, use_spatial_hash=True ) self.start_location = generated_map["start_location"][0].location # Create player sprite - self.player_sprite = PlayerCharacter(convert_from_tiled_coordinates(my_map, generated_map["start_location"][0].location), self, self.scene_renderer) + #self.player_sprite = PlayerCharacter(convert_from_tiled_coordinates(my_map, generated_map["start_location"][0].location), self, self.scene_renderer) + + self.player_sprite = PlayerCharacter( + (5,5), self, + self.scene_renderer) # Set player location i = random.randint(0, len(self.floor_list)) start_pos = self.floor_list[i].position + # Add to player sprite list + self.player_list.append(self.player_sprite) + ''' + # Read in the tiled map + map_name = "Graphics/test_map.tmx" + my_map = arcade.tilemap.read_tmx(map_name) + self.wall_list = arcade.tilemap.process_layer( + my_map, "Walls", SPRITE_SCALING_TILES + ) + self.floor_list = arcade.tilemap.process_layer( + my_map, "Floor", SPRITE_SCALING_TILES + ) + self.light_list = arcade.tilemap.process_layer( + my_map, "Lighting", SPRITE_SCALING_TILES + ) + + # Create player sprite + self.player_sprite = PlayerCharacter( + (5, 5), self, + self.scene_renderer) + + # Set player location + grid_x = 10 + grid_y = 5 + self.player_sprite.center_x = SPRITE_SIZE * grid_x + SPRITE_SIZE / 2 + self.player_sprite.center_y = SPRITE_SIZE * grid_y + SPRITE_SIZE / 2 # Add to player sprite list self.player_list.append(self.player_sprite) @@ -157,13 +190,16 @@ def on_draw(self): self.wall_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) self.floor_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) self.light_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) + ''' self.warps_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) if self.doors_enabled: self.doors_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) + ''' self.bullet_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) self.player_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) self.object_manager.object_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) self.enemy_manager.enemy_list.draw(filter=(arcade.gl.NEAREST, arcade.gl.NEAREST)) + def on_update(self, delta_time): x_force = self.player_sprite.x_force diff --git a/Core/Projectile_Manager.py b/Core/Projectile_Manager.py index eae4ec7..3573a00 100644 --- a/Core/Projectile_Manager.py +++ b/Core/Projectile_Manager.py @@ -49,12 +49,13 @@ def __init__(self, game_resources): max_vertical_velocity=1200, body_type=arcade.PymunkPhysicsEngine.DYNAMIC ) - + ''' self.projectile_physics.add_sprite_list( self.game_resources.warps_list, collision_type="warp", body_type=arcade.PymunkPhysicsEngine.STATIC, ) + ''' self.explosion_sounds = [ SoundPool("Sounds/explosion.wav", 5, 0.2), @@ -231,12 +232,14 @@ def enemy_bullet_handler(_arbiter, _space, _data): handler = self.projectile_physics.space.add_collision_handler(bullet_physics_id, enemy_physics_id) handler.begin = enemy_bullet_handler + ''' self.projectile_physics.add_sprite_list( self.game_resources.doors_list, collision_type="door", friction=1.0, body_type=arcade.PymunkPhysicsEngine.STATIC, ) + ''' def door_player_handler(_arbiter, _space, _data): door_sprite, player_sprite = self.projectile_physics.get_sprites_from_arbiter(_arbiter)