Implementation de la base de l'engine #3
After Width: | Height: | Size: 155 B |
After Width: | Height: | Size: 158 B |
After Width: | Height: | Size: 159 B |
128
maps/map2.tmj
Normal file
128
maps/map2.tmj
Normal file
|
@ -0,0 +1,128 @@
|
|||
{ "compressionlevel":-1,
|
||||
"height":20,
|
||||
"infinite":true,
|
||||
"layers":[
|
||||
{
|
||||
"chunks":[
|
||||
{
|
||||
"data":[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 3, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1,
|
||||
1, 1, 1, 3, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1,
|
||||
1, 1, 1, 3, 1, 2, 2, 2, 1, 1, 3, 3, 1, 1, 1, 1,
|
||||
1, 3, 3, 1, 1, 2, 2, 2, 2, 3, 3, 3, 1, 1, 1, 1,
|
||||
1, 3, 3, 3, 2, 3, 2, 2, 1, 3, 1, 1, 1, 1, 1, 1,
|
||||
1, 3, 3, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
|
||||
"height":16,
|
||||
"width":16,
|
||||
"x":0,
|
||||
"y":0
|
||||
}],
|
||||
"height":16,
|
||||
"id":1,
|
||||
"name":"Calque de Tuiles 1",
|
||||
"opacity":1,
|
||||
"startx":0,
|
||||
"starty":0,
|
||||
"type":"tilelayer",
|
||||
"visible":true,
|
||||
"width":16,
|
||||
"x":0,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"chunks":[
|
||||
{
|
||||
"data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
"height":16,
|
||||
"width":16,
|
||||
"x":0,
|
||||
"y":0
|
||||
}],
|
||||
"height":16,
|
||||
"id":2,
|
||||
"name":"Calque de Tuiles 2",
|
||||
"opacity":1,
|
||||
"startx":0,
|
||||
"starty":0,
|
||||
"type":"tilelayer",
|
||||
"visible":true,
|
||||
"width":16,
|
||||
"x":0,
|
||||
"y":0
|
||||
},
|
||||
{
|
||||
"chunks":[
|
||||
{
|
||||
"data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
"height":16,
|
||||
"width":16,
|
||||
"x":0,
|
||||
"y":0
|
||||
}],
|
||||
"height":16,
|
||||
"id":3,
|
||||
"name":"Calque de Tuiles 3",
|
||||
"opacity":1,
|
||||
"startx":0,
|
||||
"starty":0,
|
||||
"type":"tilelayer",
|
||||
"visible":true,
|
||||
"width":16,
|
||||
"x":0,
|
||||
"y":0
|
||||
}],
|
||||
"nextlayerid":4,
|
||||
"nextobjectid":1,
|
||||
"orientation":"orthogonal",
|
||||
"renderorder":"right-down",
|
||||
"tiledversion":"1.10.1",
|
||||
"tileheight":16,
|
||||
"tilesets":[
|
||||
{
|
||||
"firstgid":1,
|
||||
"source":"..\/assets\/tiles.tsx"
|
||||
}],
|
||||
"tilewidth":16,
|
||||
"type":"map",
|
||||
"version":"1.10",
|
||||
"width":30
|
||||
}
|
|
@ -27,11 +27,13 @@ class Engine:
|
|||
self.renderer.load_tile_set("assets/tiles.png", 16)
|
||||
|
||||
anim = Anim(0.5) # TODO : REMOVE (ONLY USED FOR TESTING)
|
||||
anim.load_animation_from_directory("assets/entities/test/none")
|
||||
self.renderer.register_animation(anim, "test_none")
|
||||
anim.load_animation_from_directory("assets/entities/player/none")
|
||||
self.renderer.register_animation(anim, "player_none")
|
||||
|
||||
test_entity = self.entity_manager.register_entity("test")
|
||||
test_entity.link_animation("test_none")
|
||||
player = self.entity_manager.register_entity("player")
|
||||
player.link_animation("player_none")
|
||||
|
||||
self.camera.follow_entity(player)
|
||||
|
||||
def loop(self):
|
||||
"""Fonction à lancer au début du programme et qui va lancer les updates dans une boucle.
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
class Entity:
|
||||
"""Classe permettant de gérer les entités. Créée automatiquement par `EntityManager.register_entity()`"""
|
||||
def __init__(self, name: str):
|
||||
self.x = 2
|
||||
self.y = 2
|
||||
self.x = 8
|
||||
self.y = 8
|
||||
|
||||
# Time utilisé pour les IA
|
||||
self.time = 0
|
||||
|
@ -13,7 +13,7 @@ class Entity:
|
|||
|
||||
def update(self, delta: float):
|
||||
"""Met à jour l'entité."""
|
||||
self.x += 1
|
||||
# self.x += 1
|
||||
|
||||
self.time += delta
|
||||
|
||||
|
|
|
@ -20,3 +20,7 @@ class EntityManager:
|
|||
def get_all_entities(self):
|
||||
"""Donne la liste de toutes les entités enregistrées."""
|
||||
return list(self.entities.values())
|
||||
|
||||
def get_by_name(self, name: str):
|
||||
"""Donne l'entité avec le nom donné."""
|
||||
return self.entities[name]
|
||||
|
|
|
@ -22,14 +22,15 @@ class EventHandler:
|
|||
elif e.type == KEYUP:
|
||||
self.key_pressed.remove(e.key)
|
||||
|
||||
player = self.engine.entity_manager.get_by_name("player")
|
||||
if K_RIGHT in self.key_pressed:
|
||||
self.engine.camera.target_x += 20
|
||||
player.x += 2
|
||||
if K_LEFT in self.key_pressed:
|
||||
self.engine.camera.target_x -= 20
|
||||
player.x -= 2
|
||||
if K_UP in self.key_pressed:
|
||||
self.engine.camera.target_y -= 20
|
||||
player.y -= 2
|
||||
if K_DOWN in self.key_pressed:
|
||||
self.engine.camera.target_y += 20
|
||||
player.y += 2
|
||||
if K_x in self.key_pressed:
|
||||
self.engine.camera.target_zoom *= 1.01
|
||||
if K_c in self.key_pressed:
|
||||
|
|
|
@ -33,7 +33,8 @@ class Renderer:
|
|||
self.window.fill((255, 255, 255))
|
||||
|
||||
# On crée une surface temporaire qui nous permettra de faire le rendu à l'échelle 1:1
|
||||
rendered_surface_size = (display.get_window_size()[0] / self.engine.camera.zoom, display.get_window_size()[1] / self.engine.camera.zoom)
|
||||
rendered_surface_size = (display.get_window_size()[0] / self.engine.camera.zoom,
|
||||
display.get_window_size()[1] / self.engine.camera.zoom)
|
||||
rendered_surface = surface.Surface(rendered_surface_size)
|
||||
|
||||
self.renderer_layer(0, rendered_surface)
|
||||
|
@ -60,15 +61,19 @@ class Renderer:
|
|||
y_middle_offset = display.get_window_size()[1] / 2 / self.engine.camera.zoom
|
||||
|
||||
for entity in self.engine.entity_manager.get_all_entities():
|
||||
# On récupère la frame courante de l'animation
|
||||
anim: Anim = self.animations[entity.animation_name]
|
||||
frame = anim.get_frame(0.01666667)
|
||||
rendered_surface.blit(frame, (entity.x-self.engine.camera.x+x_middle_offset, entity.y-self.engine.camera.y+y_middle_offset))
|
||||
|
||||
# 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))
|
||||
|
||||
def renderer_layer(self, layer_id: int, rendered_surface: surface.Surface):
|
||||
"""Rend la map."""
|
||||
# On calcule le nombre de tiles à mettre sur notre écran en prenant en compte le zoom
|
||||
x_map_range = int(display.get_window_size()[0] / 16 / self.engine.camera.zoom) + 2
|
||||
y_map_range = int(display.get_window_size()[1] / 16 / self.engine.camera.zoom) + 2
|
||||
x_map_range = int(display.get_window_size()[0] / self.tile_size / self.engine.camera.zoom) + 2
|
||||
y_map_range = int(display.get_window_size()[1] / self.tile_size / self.engine.camera.zoom) + 2
|
||||
|
||||
# On calcule le décalage pour centrer la caméra
|
||||
x_middle_offset = display.get_window_size()[0] / 2 / self.engine.camera.zoom
|
||||
|
|
Loading…
Reference in a new issue