Implementation de la base de l'engine #3

Merged
yannis merged 33 commits from Engine_base into main 2023-12-26 16:36:16 +00:00
2 changed files with 36 additions and 15 deletions
Showing only changes of commit 0cb6610445 - Show all commits

View file

@ -8,7 +8,7 @@ class Entity:
self.x = 8
self.y = 8
self.collision_rect = [-7, -7, 20, 20] # x1, y1, x2, y2
self.collision_rect = [-7, -7, 40, 40] # x1, y1, x2, y2
# Time utilisé pour les IA
self.time = 0
@ -23,22 +23,43 @@ class Entity:
self.time += delta
def get_collisions(self, x: float, y: float, map_manager: MapManager):
"""Calcule les collisions."""
# Pour les collisions, on utilise le layer 1 (le deuxième)
top_left_corner_tile = (int((x + self.collision_rect[0]) / 16),
int((y + self.collision_rect[1]) / 16))
top_right_corner_tile = (int((x + self.collision_rect[2]) / 16),
int((y + self.collision_rect[1]) / 16))
bottom_left_corner_tile = (int((x + self.collision_rect[0]) / 16),
int((y + self.collision_rect[3]) / 16))
bottom_right_corner_tile = (int((x + self.collision_rect[2]) / 16),
int((y + self.collision_rect[3]) / 16))
collision = False
for xx in range(top_left_corner_tile[0], bottom_right_corner_tile[0]+1):
for yy in range(top_left_corner_tile[1], bottom_right_corner_tile[1]+1):
tile = map_manager.get_tile_at(xx, yy, 1)
if tile != 0:
collision = True
return collision
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)
collision_x = self.get_collisions(self.x + x, self.y, map_manager)
collision_y = self.get_collisions(self.x, self.y + y, map_manager)
top_left_corner_tile = (int((self.x + x + self.collision_rect[0]) / 16),
int((self.y + y + self.collision_rect[1]) / 16))
top_right_corner_tile = (int((self.x + x + self.collision_rect[2]) / 16),
int((self.y + y + self.collision_rect[1]) / 16))
if not collision_x:
self.x += x
if not collision_y:
self.y += y
bottom_left_corner_tile = (int((self.x + x + self.collision_rect[0]) / 16),
int((self.y + y + self.collision_rect[3]) / 16))
bottom_right_corner_tile = (int((self.x + x + self.collision_rect[2]) / 16),
int((self.y + y + self.collision_rect[3]) / 16))
print(top_left_corner_tile, top_right_corner_tile, bottom_left_corner_tile, bottom_right_corner_tile)
#print(top_left_corner_tile, top_right_corner_tile, bottom_left_corner_tile, bottom_right_corner_tile)
def link_animation(self, name: str):
self.animation_name = name

View file

@ -24,13 +24,13 @@ class EventHandler:
player = self.engine.entity_manager.get_by_name("player")
if K_RIGHT in self.key_pressed:
player.x += 2
player.move(2, 0, self.engine.map_manager)
if K_LEFT in self.key_pressed:
player.x -= 2
player.move(-2, 0, self.engine.map_manager)
if K_UP in self.key_pressed:
player.y -= 2
player.move(0, -2, self.engine.map_manager)
if K_DOWN in self.key_pressed:
player.y += 2
player.move(0, 2, self.engine.map_manager)
if K_x in self.key_pressed:
self.engine.camera.target_zoom *= 1.01
if K_c in self.key_pressed: