Ajout de l'affichage de la collision quand le mode DEBUG est activé
This commit is contained in:
parent
79e1009430
commit
a49543cc46
|
@ -12,6 +12,10 @@ class Engine:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# L'initialisation de Pygame est nécessaire pour tous les modules
|
# L'initialisation de Pygame est nécessaire pour tous les modules
|
||||||
pygame.init()
|
pygame.init()
|
||||||
|
|
||||||
|
# Debug mode utilisé pour tricher (voir les collisions, etc...) WOW ! n'utilisez pas ça pour jouer !
|
||||||
|
self.DEBUG_MODE = True
|
||||||
|
|
||||||
self.clock = pygame.time.Clock()
|
self.clock = pygame.time.Clock()
|
||||||
|
|
||||||
self.running = False
|
self.running = False
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
|
from src.map_manager import MapManager
|
||||||
|
|
||||||
|
|
||||||
class Entity:
|
class Entity:
|
||||||
"""Classe permettant de gérer les entités. Créée automatiquement par `EntityManager.register_entity()`"""
|
"""Classe permettant de gérer les entités. Créée automatiquement par `EntityManager.register_entity()`"""
|
||||||
def __init__(self, name: str):
|
def __init__(self, name: str):
|
||||||
self.x = 8
|
self.x = 8
|
||||||
self.y = 8
|
self.y = 8
|
||||||
|
|
||||||
|
self.collision_rect = [-7, -7, 7, 7] # x1, y1, x2, y2
|
||||||
|
|
||||||
# Time utilisé pour les IA
|
# Time utilisé pour les IA
|
||||||
self.time = 0
|
self.time = 0
|
||||||
|
|
||||||
|
@ -17,5 +22,14 @@ class Entity:
|
||||||
|
|
||||||
self.time += delta
|
self.time += delta
|
||||||
|
|
||||||
|
def move(self, x: float, y: float, map_manager: MapManager):
|
||||||
|
"""Fait bouger l'entité en tenant compte des collisions."""
|
||||||
|
|
||||||
|
# Pour les collisions, on utilise le layer 1 (le deuxième)
|
||||||
|
|
||||||
|
top_left_corner_tile = map_manager.get_tile_at(self.x+x-self.collision_rect[0], self.y+y-self.collision_rect[1])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def link_animation(self, name: str):
|
def link_animation(self, name: str):
|
||||||
self.animation_name = name
|
self.animation_name = name
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import math
|
import math
|
||||||
|
|
||||||
from pygame import display, image, surface, transform
|
from pygame import display, image, surface, transform, draw
|
||||||
from pygame.locals import RESIZABLE
|
from pygame.locals import RESIZABLE
|
||||||
|
|
||||||
import src.engine as engine
|
import src.engine as engine
|
||||||
|
@ -9,6 +9,7 @@ from src.animation import Anim
|
||||||
|
|
||||||
class Renderer:
|
class Renderer:
|
||||||
"""Classe contenant le moteur de rendu. On utilise, pour cela la bibliothèque Pygame."""
|
"""Classe contenant le moteur de rendu. On utilise, pour cela la bibliothèque Pygame."""
|
||||||
|
|
||||||
def __init__(self, core: 'engine.Engine'):
|
def __init__(self, core: 'engine.Engine'):
|
||||||
self.engine = core
|
self.engine = core
|
||||||
self.window = display.set_mode((600, 600), RESIZABLE)
|
self.window = display.set_mode((600, 600), RESIZABLE)
|
||||||
|
@ -43,7 +44,8 @@ class Renderer:
|
||||||
self.renderer_layer(2, rendered_surface)
|
self.renderer_layer(2, rendered_surface)
|
||||||
|
|
||||||
# Enfin, on redimensionne notre surface et on la colle sur la fenêtre principale
|
# Enfin, on redimensionne notre surface et on la colle sur la fenêtre principale
|
||||||
self.window.blit(transform.scale(rendered_surface, (math.ceil(rendered_surface_size[0] * self.engine.camera.zoom),
|
self.window.blit(
|
||||||
|
transform.scale(rendered_surface, (math.ceil(rendered_surface_size[0] * self.engine.camera.zoom),
|
||||||
math.ceil(rendered_surface_size[1] * self.engine.camera.zoom))),
|
math.ceil(rendered_surface_size[1] * self.engine.camera.zoom))),
|
||||||
(0, 0))
|
(0, 0))
|
||||||
|
|
||||||
|
@ -65,9 +67,23 @@ class Renderer:
|
||||||
anim: Anim = self.animations[entity.animation_name]
|
anim: Anim = self.animations[entity.animation_name]
|
||||||
frame = anim.get_frame(0.01666667)
|
frame = anim.get_frame(0.01666667)
|
||||||
|
|
||||||
|
# On calcule les coordonnées de rendu de l'entité
|
||||||
|
player_dest = (entity.x - self.engine.camera.x + x_middle_offset - frame.get_width() / 2,
|
||||||
|
entity.y - self.engine.camera.y + y_middle_offset - frame.get_height() / 2)
|
||||||
|
|
||||||
# On affiche l'image
|
# On affiche l'image
|
||||||
rendered_surface.blit(frame, (entity.x-self.engine.camera.x+x_middle_offset-frame.get_width()/2,
|
rendered_surface.blit(frame, player_dest)
|
||||||
entity.y-self.engine.camera.y+y_middle_offset-frame.get_height()/2))
|
|
||||||
|
if self.engine.DEBUG_MODE:
|
||||||
|
top_let_corner_x = entity.x - self.engine.camera.x + x_middle_offset
|
||||||
|
top_let_corner_y = entity.y - self.engine.camera.y + y_middle_offset
|
||||||
|
|
||||||
|
draw.rect(rendered_surface, (255, 0, 0),
|
||||||
|
(top_let_corner_x + entity.collision_rect[0],
|
||||||
|
top_let_corner_y + entity.collision_rect[1],
|
||||||
|
entity.collision_rect[2] - entity.collision_rect[0],
|
||||||
|
entity.collision_rect[3] - entity.collision_rect[1]),
|
||||||
|
width=1)
|
||||||
|
|
||||||
def renderer_layer(self, layer_id: int, rendered_surface: surface.Surface):
|
def renderer_layer(self, layer_id: int, rendered_surface: surface.Surface):
|
||||||
"""Rend la map."""
|
"""Rend la map."""
|
||||||
|
@ -98,4 +114,3 @@ class Renderer:
|
||||||
rendered_surface.blit(self.tiles[tile_id - 1],
|
rendered_surface.blit(self.tiles[tile_id - 1],
|
||||||
((x * self.tile_size - self.engine.camera.x + x_middle_offset),
|
((x * self.tile_size - self.engine.camera.x + x_middle_offset),
|
||||||
(y * self.tile_size - self.engine.camera.y + y_middle_offset)))
|
(y * self.tile_size - self.engine.camera.y + y_middle_offset)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue