Ajout de l'affichage de la collision quand le mode DEBUG est activé

This commit is contained in:
Yannis 2023-12-23 14:36:57 +01:00
parent 79e1009430
commit a49543cc46
3 changed files with 46 additions and 13 deletions

View file

@ -12,6 +12,10 @@ class Engine:
def __init__(self):
# L'initialisation de Pygame est nécessaire pour tous les modules
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.running = False

View file

@ -1,9 +1,14 @@
from src.map_manager import MapManager
class Entity:
"""Classe permettant de gérer les entités. Créée automatiquement par `EntityManager.register_entity()`"""
def __init__(self, name: str):
self.x = 8
self.y = 8
self.collision_rect = [-7, -7, 7, 7] # x1, y1, x2, y2
# Time utilisé pour les IA
self.time = 0
@ -17,5 +22,14 @@ class Entity:
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):
self.animation_name = name

View file

@ -1,6 +1,6 @@
import math
from pygame import display, image, surface, transform
from pygame import display, image, surface, transform, draw
from pygame.locals import RESIZABLE
import src.engine as engine
@ -9,6 +9,7 @@ from src.animation import Anim
class Renderer:
"""Classe contenant le moteur de rendu. On utilise, pour cela la bibliothèque Pygame."""
def __init__(self, core: 'engine.Engine'):
self.engine = core
self.window = display.set_mode((600, 600), RESIZABLE)
@ -43,7 +44,8 @@ class Renderer:
self.renderer_layer(2, rendered_surface)
# 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))),
(0, 0))
@ -65,9 +67,23 @@ class Renderer:
anim: Anim = self.animations[entity.animation_name]
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
rendered_surface.blit(frame, (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))
rendered_surface.blit(frame, player_dest)
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):
"""Rend la map."""
@ -98,4 +114,3 @@ class Renderer:
rendered_surface.blit(self.tiles[tile_id - 1],
((x * self.tile_size - self.engine.camera.x + x_middle_offset),
(y * self.tile_size - self.engine.camera.y + y_middle_offset)))