Amélioration de l'engine et ajout d'éléments de gameplay #20
BIN
assets/textures/entities/wolf/none/0.png
Normal file
BIN
assets/textures/entities/wolf/none/0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 236 B |
|
@ -1,10 +1,26 @@
|
||||||
|
import math
|
||||||
|
|
||||||
from src.engine.entity import Entity
|
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
|
from src.engine.mobs_AI import MobAI
|
||||||
|
|
||||||
|
|
||||||
class WolfAI(MobAI):
|
class WolfAI(MobAI):
|
||||||
def __init__(self, entity: Entity):
|
def __init__(self, entity: 'Entity', entity_manager: 'EntityManager', map_manager: 'MapManager'):
|
||||||
super().__init__(entity)
|
super().__init__(entity, entity_manager, map_manager)
|
||||||
|
|
||||||
def update(self):
|
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)
|
||||||
|
|
|
@ -45,10 +45,10 @@ class Entity:
|
||||||
self.life_points = life
|
self.life_points = life
|
||||||
self.max_life_points = life
|
self.max_life_points = life
|
||||||
|
|
||||||
def set_ai(self, ai: MobAI):
|
def set_ai(self, ai: MobAI, engine: 'Engine'):
|
||||||
self.brain = ai
|
"""Enregistre une classe permettant de gérer l'IA du mob."""
|
||||||
self.brain.__init__(self)
|
self.brain = ai(self, engine.entity_manager, engine.map_manager)
|
||||||
print(ai.entity)
|
print(self.brain.entity)
|
||||||
|
|
||||||
def update(self, delta: float):
|
def update(self, delta: float):
|
||||||
"""Met à jour l'entité."""
|
"""Met à jour l'entité."""
|
||||||
|
|
|
@ -32,6 +32,9 @@ class EntityManager:
|
||||||
if entity.life_points == 0:
|
if entity.life_points == 0:
|
||||||
self.entities.pop(entity_name)
|
self.entities.pop(entity_name)
|
||||||
|
|
||||||
|
if entity.brain is not None:
|
||||||
|
entity.brain.update()
|
||||||
|
|
||||||
if self.player_entity_name:
|
if self.player_entity_name:
|
||||||
player: Entity = self.get_by_name(self.player_entity_name)
|
player: Entity = self.get_by_name(self.player_entity_name)
|
||||||
if player.mouvements[0] != 0. or player.mouvements[1] != 0.:
|
if player.mouvements[0] != 0. or player.mouvements[1] != 0.:
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
from src.engine.entity import Entity
|
import math
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MobAI:
|
class MobAI:
|
||||||
def __init__(self, entity: Entity):
|
def __init__(self, entity_: 'entity.Entity', entity_manager: 'EntityManager', map_manager: 'MapManager'):
|
||||||
self.entity = entity
|
self.entity = entity_
|
||||||
|
self.entity_manager = entity_manager
|
||||||
|
self.map_manager = map_manager
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
pass
|
pass
|
||||||
|
|
16
src/main.py
16
src/main.py
|
@ -15,6 +15,7 @@ class Game(Engine):
|
||||||
|
|
||||||
self.create_player_entity()
|
self.create_player_entity()
|
||||||
self.load_boss_fight_assets()
|
self.load_boss_fight_assets()
|
||||||
|
self.spawn_mobs()
|
||||||
|
|
||||||
self.DEBUG_MODE = True
|
self.DEBUG_MODE = True
|
||||||
|
|
||||||
|
@ -35,7 +36,7 @@ class Game(Engine):
|
||||||
player.collision_rect = [-6, -7, 6, 16]
|
player.collision_rect = [-6, -7, 6, 16]
|
||||||
|
|
||||||
player.set_default_life(15)
|
player.set_default_life(15)
|
||||||
player.max_speed = 1.
|
player.max_speed = 2.
|
||||||
|
|
||||||
self.entity_manager.set_player_entity("player")
|
self.entity_manager.set_player_entity("player")
|
||||||
|
|
||||||
|
@ -46,10 +47,21 @@ class Game(Engine):
|
||||||
|
|
||||||
def spawn_mobs(self):
|
def spawn_mobs(self):
|
||||||
"""Fait apparaitre les mobs de la map."""
|
"""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 = 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):
|
def load_boss_fight_assets(self):
|
||||||
"""Charge les animations de combat des combats de boss."""
|
"""Charge les animations de combat des combats de boss."""
|
||||||
|
|
Loading…
Reference in a new issue