From e57ded9b8d80750fb74c59578ad1c83768c51d86 Mon Sep 17 00:00:00 2001 From: StochasticMouse Date: Wed, 17 Jul 2024 18:01:42 +0200 Subject: [PATCH] added save/load funcs to tilemap --- game.py | 6 +++++- scripts/tiles.py | 16 +++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/game.py b/game.py index 9c57c11..3b1ae5e 100644 --- a/game.py +++ b/game.py @@ -38,7 +38,7 @@ class Game: #'stone' : load_images('tiles/stone/') 'iso' : load_images('tiles/iso/') } - self.tilemap = Tilemap(self, (64,32), 'map_1.csv') + self.tilemap = Tilemap(self, (64,32), 'map_2.csv') self.camera = Camera(self) while self.status == 'iso_game': delta = np.array([0.0,0.0]) @@ -104,6 +104,10 @@ class Game: delta += np.array([0,-5]) if keys[pygame.K_DOWN]: delta += np.array([0,5]) + if keys[pygame.K_o]: + self.tilemap.save('map_2.csv') + if keys[pygame.K_l]: + self.tilemap.load_map('map_2.csv') if mouse_butt[0]: #on left click click = True if mouse_butt[2]: #on right click diff --git a/scripts/tiles.py b/scripts/tiles.py index 89ef879..3d1b4c1 100644 --- a/scripts/tiles.py +++ b/scripts/tiles.py @@ -10,7 +10,7 @@ class Tilemap: def __init__(self, game, tile_size, map_path = None): self.game = game self.tile_size = np.array(tile_size) - self.offgrid_tiles = [] + #self.offgrid_tiles = [] if map_path: self.load_map(map_path) @@ -27,6 +27,16 @@ class Tilemap: if np.any(self.tilemap.shape <= pos): self.extend_tilemap(pos) self.tilemap[*pos] = tile + + def save(self, map_path): + inverse_tile_dict = {TILE_DICT[i]:i for i in range(len(TILE_DICT))} + tile_arr = np.empty_like(self.tilemap,dtype=np.int8) + for row in range(self.tilemap.shape[0]): + for col in range(self.tilemap.shape[1]): + tile = self.tilemap[row,col] + tile_arr[row,col] = inverse_tile_dict[(tile['type'], tile['variant'], tile['walkable'])] + tile_arr = np.transpose(tile_arr) + np.savetxt(BASE_MAP_PATH + map_path, tile_arr, delimiter=',', fmt='%.1d') def load_map(self, map_path): #print(map_path) @@ -41,8 +51,8 @@ class Tilemap: for y in range(self.tilemap.shape[1]): tile = self.tilemap[x,y] surface.blit(self.game.assets[tile['type']][tile['variant']],(to_isometric_pixel(np.array((x,y)))*self.tile_size)-offset) - for tile in self.offgrid_tiles: - surface.blit(self.game.assets[tile['type']][tile['variant']],(to_isometric_pixel(tile['pos'])*self.tile_size)-offset) #this tile is written offgrid so no mult by tile_size + #for tile in self.offgrid_tiles: + # surface.blit(self.game.assets[tile['type']][tile['variant']],(to_isometric_pixel(tile['pos'])*self.tile_size)-offset) #this tile is written offgrid so no mult by tile_size def tiles_around(self,pos): tiles = [] tile_loc = np.array(pos // np.array((self.tile_size[0],self.tile_size[0])),dtype=int) #gotta use this and not just self.tile_size to normalize wrt the change of variables for the isometric view