diff --git a/assets/textures/entities/wolf/none/0.png b/assets/textures/entities/wolf/none/0.png new file mode 100644 index 0000000..c4a21ce Binary files /dev/null and b/assets/textures/entities/wolf/none/0.png differ 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."""