diff --git a/data/images/tiles/iso/0.png b/data/images/tiles/iso/0.png index 3918138..c29220e 100644 Binary files a/data/images/tiles/iso/0.png and b/data/images/tiles/iso/0.png differ diff --git a/data/images/tiles/iso/1.png b/data/images/tiles/iso/1.png index 61231e5..3918138 100644 Binary files a/data/images/tiles/iso/1.png and b/data/images/tiles/iso/1.png differ diff --git a/data/images/tiles/iso/2.png b/data/images/tiles/iso/2.png index 28590f1..61231e5 100644 Binary files a/data/images/tiles/iso/2.png and b/data/images/tiles/iso/2.png differ diff --git a/data/images/tiles/iso/3.png b/data/images/tiles/iso/3.png index ddd67bd..28590f1 100644 Binary files a/data/images/tiles/iso/3.png and b/data/images/tiles/iso/3.png differ diff --git a/data/images/tiles/iso/4.png b/data/images/tiles/iso/4.png index 2063b1a..ddd67bd 100644 Binary files a/data/images/tiles/iso/4.png and b/data/images/tiles/iso/4.png differ diff --git a/data/images/tiles/iso/5.png b/data/images/tiles/iso/5.png index 6e49b40..2063b1a 100644 Binary files a/data/images/tiles/iso/5.png and b/data/images/tiles/iso/5.png differ diff --git a/data/images/tiles/iso/6.png b/data/images/tiles/iso/6.png index a8caeec..6e49b40 100644 Binary files a/data/images/tiles/iso/6.png and b/data/images/tiles/iso/6.png differ diff --git a/data/images/tiles/iso/7.png b/data/images/tiles/iso/7.png index f192819..a8caeec 100644 Binary files a/data/images/tiles/iso/7.png and b/data/images/tiles/iso/7.png differ diff --git a/data/images/tiles/iso/8.png b/data/images/tiles/iso/8.png new file mode 100644 index 0000000..f192819 Binary files /dev/null and b/data/images/tiles/iso/8.png differ diff --git a/game.py b/game.py index cbcc85d..9c57c11 100644 --- a/game.py +++ b/game.py @@ -115,9 +115,11 @@ class Game: mpos = np.array(pygame.mouse.get_pos()) / RENDER_SCALE pos = np.array(to_cartesian(mpos + self.camera.scroll,self.tilemap.tile_size),dtype=int) - - if click: - self.tilemap.tilemap[*pos] = {'type' : TILE_DICT[self.tile_sel][0], 'variant' : TILE_DICT[self.tile_sel][1], 'pos': pos, 'walkable': TILE_DICT[self.tile_sel][2]} + + if click and np.all(pos >= 0): + self.tilemap.add_tile(pos, {'type' : TILE_DICT[self.tile_sel][0], 'variant' : TILE_DICT[self.tile_sel][1], 'walkable': TILE_DICT[self.tile_sel][2]}) + if r_click and np.all(pos >= 0): + self.tilemap.add_tile(pos, {'type' : TILE_DICT[0][0], 'variant' : TILE_DICT[0][1], 'walkable': TILE_DICT[0][2]}) current_tile_img = self.assets[TILE_DICT[self.tile_sel][0]][TILE_DICT[self.tile_sel][1]].copy() current_tile_img.set_alpha(100) diff --git a/scripts/tiles.py b/scripts/tiles.py index f5f00b9..89ef879 100644 --- a/scripts/tiles.py +++ b/scripts/tiles.py @@ -13,8 +13,23 @@ class Tilemap: self.offgrid_tiles = [] if map_path: self.load_map(map_path) + + def extend_tilemap(self, pos): + #extend tilemap such that pos becomes an accessible tile + #by default adds the air block TILE_DICT[0] + if self.tilemap.shape[0] <= pos[0]: + self.tilemap = np.concatenate([self.tilemap, np.full(np.array((pos[0] - self.tilemap.shape[0] + 1, self.tilemap.shape[1])), {'type' : TILE_DICT[0][0], 'variant' : TILE_DICT[0][1], 'walkable': TILE_DICT[0][2]})], axis = 0) + if self.tilemap.shape[1] <= pos[1]: + self.tilemap = np.concatenate([self.tilemap, np.full(np.array((self.tilemap.shape[0], pos[1] - self.tilemap.shape[1] + 1)), {'type' : TILE_DICT[0][0], 'variant' : TILE_DICT[0][1], 'walkable': TILE_DICT[0][2]})], axis = 1) + + def add_tile(self, pos, tile): + #by design if np.any(pos) < 0 it loops to the other side without errors + if np.any(self.tilemap.shape <= pos): + self.extend_tilemap(pos) + self.tilemap[*pos] = tile + def load_map(self, map_path): - print(map_path) + #print(map_path) tile_arr = np.transpose(np.loadtxt(BASE_MAP_PATH + map_path, delimiter=',', dtype=np.int8)) self.tilemap = np.empty_like(tile_arr, dtype = object) for row in range(tile_arr.shape[0]): @@ -25,7 +40,7 @@ class Tilemap: for x in range(self.tilemap.shape[0]): 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(tile['pos'])*self.tile_size)-offset) + 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 def tiles_around(self,pos): diff --git a/scripts/utils.py b/scripts/utils.py index a8d4a72..417b761 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -2,13 +2,13 @@ import pygame import os import numpy as np TILE_DICT = { - 0 : ('iso',6,False), - 1 : ('iso',0,True), - 2 : ('iso',1,False), - 3 : ('iso',2,False), - 4 : ('iso',3,False), - 5 : ('iso',4,False), - 6 : ('iso',5,False) + 0 : ('iso',0,False), + 1 : ('iso',1,True), + 2 : ('iso',2,False), + 3 : ('iso',3,False), + 4 : ('iso',4,False), + 5 : ('iso',5,False), + 6 : ('iso',6,False) } BASE_IMG_PATH = 'data/images/' def load_image(path):