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_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)
|
||||
|
|
|
@ -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é."""
|
||||
|
|
|
@ -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.:
|
||||
|
|
|
@ -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
|
||||
|
|
16
src/main.py
16
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."""
|
||||
|
|
Loading…
Reference in a new issue