From 3ba340aeba870cfb38b3b568256027e168cc1c20 Mon Sep 17 00:00:00 2001 From: Yannis300307 Date: Wed, 3 Jan 2024 11:21:19 +0100 Subject: [PATCH] Ajout d'un loup qui suit le joueur --- assets/textures/entities/wolf/none/0.png | Bin 0 -> 236 bytes src/custom_AI.py | 22 +++++++++++++++++++--- src/engine/entity.py | 8 ++++---- src/engine/entity_manager.py | 3 +++ src/engine/mobs_AI.py | 9 ++++++--- src/main.py | 16 ++++++++++++++-- 6 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 assets/textures/entities/wolf/none/0.png diff --git a/assets/textures/entities/wolf/none/0.png b/assets/textures/entities/wolf/none/0.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a21ce2af767139722df14dfd31ecfd9b61d331 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3-oF?)7E^DaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheYymzYu0R?HmZtAK52Tn%g8YL2Gd$gH;05Gy7I;J!GcfQS0%1l`4X*~E zV4|msV~9rZ+`ij<2NXD*pZ>3}x**1$@oj_f;%`cYH|IV*ct|bz(Zb{NS>HxX7c1uD zO0b&L;x^0cuu8#Pt%CZ-d(Q;VJM9$o)oC?LUj0q)-^7$l+*SwoJB11@4p`!%J!gjP Y#CeQU{daLJ2U^D9>FVdQ&MBb@0MuYjB>(^b literal 0 HcmV?d00001 diff --git a/src/custom_AI.py b/src/custom_AI.py index bfce194..69eb874 100644 --- a/src/custom_AI.py +++ b/src/custom_AI.py @@ -1,10 +1,26 @@ +import math + from src.engine.entity import Entity +from src.engine.entity_manager import EntityManager +from src.engine.map_manager import MapManager from src.engine.mobs_AI import MobAI class WolfAI(MobAI): - def __init__(self, entity: Entity): - super().__init__(entity) + def __init__(self, entity: 'Entity', entity_manager: 'EntityManager', map_manager: 'MapManager'): + super().__init__(entity, entity_manager, map_manager) def update(self): - self.entity.x += 1 + + player: Entity = self.entity_manager.get_by_name(self.entity_manager.player_entity_name) + + x_distance = (player.x - self.entity.x) + y_distance = (player.y - self.entity.y) + + player_distance = math.sqrt(x_distance ** 2 + y_distance ** 2) + + #player.take_damages(1) + + if abs(player_distance) > self.entity.max_speed: + self.entity.move(x_distance / player_distance*self.entity.max_speed, + y_distance / player_distance*self.entity.max_speed, self.map_manager) diff --git a/src/engine/entity.py b/src/engine/entity.py index 9e7a4fc..7a79d2c 100644 --- a/src/engine/entity.py +++ b/src/engine/entity.py @@ -45,10 +45,10 @@ class Entity: self.life_points = life self.max_life_points = life - def set_ai(self, ai: MobAI): - self.brain = ai - self.brain.__init__(self) - print(ai.entity) + def set_ai(self, ai: MobAI, engine: 'Engine'): + """Enregistre une classe permettant de gérer l'IA du mob.""" + self.brain = ai(self, engine.entity_manager, engine.map_manager) + print(self.brain.entity) def update(self, delta: float): """Met à jour l'entité.""" diff --git a/src/engine/entity_manager.py b/src/engine/entity_manager.py index cad71e8..9cce4ea 100644 --- a/src/engine/entity_manager.py +++ b/src/engine/entity_manager.py @@ -32,6 +32,9 @@ class EntityManager: if entity.life_points == 0: self.entities.pop(entity_name) + if entity.brain is not None: + entity.brain.update() + if self.player_entity_name: player: Entity = self.get_by_name(self.player_entity_name) if player.mouvements[0] != 0. or player.mouvements[1] != 0.: diff --git a/src/engine/mobs_AI.py b/src/engine/mobs_AI.py index 699c489..77d8442 100644 --- a/src/engine/mobs_AI.py +++ b/src/engine/mobs_AI.py @@ -1,9 +1,12 @@ -from src.engine.entity import Entity +import math + class MobAI: - def __init__(self, entity: Entity): - self.entity = entity + def __init__(self, entity_: 'entity.Entity', entity_manager: 'EntityManager', map_manager: 'MapManager'): + self.entity = entity_ + self.entity_manager = entity_manager + self.map_manager = map_manager def update(self): pass diff --git a/src/main.py b/src/main.py index da4be06..db81e7d 100644 --- a/src/main.py +++ b/src/main.py @@ -15,6 +15,7 @@ class Game(Engine): self.create_player_entity() self.load_boss_fight_assets() + self.spawn_mobs() self.DEBUG_MODE = True @@ -35,7 +36,7 @@ class Game(Engine): player.collision_rect = [-6, -7, 6, 16] player.set_default_life(15) - player.max_speed = 1. + player.max_speed = 2. self.entity_manager.set_player_entity("player") @@ -46,10 +47,21 @@ class Game(Engine): def spawn_mobs(self): """Fait apparaitre les mobs de la map.""" + + anim = Anim(0.5) + anim.load_animation_from_directory("assets/textures/entities/wolf/none") + self.renderer.register_animation(anim, "wolf_none") + mob = self.entity_manager.register_entity("wolf1") - mob.set_ai(WolfAI) + mob.set_ai(WolfAI, self) + mob.link_animation("wolf_none") + mob.collision_rect = [-15, -7, 12, 7] + mob.set_default_life(5) + mob.max_speed = 1. + + mob.x, mob.y = 160, 16 def load_boss_fight_assets(self): """Charge les animations de combat des combats de boss."""