diff --git a/data/images/tiles/iso/0.png b/data/images/tiles/iso/0.png new file mode 100644 index 0000000..3918138 Binary files /dev/null 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 new file mode 100644 index 0000000..61231e5 Binary files /dev/null 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 new file mode 100644 index 0000000..28590f1 Binary files /dev/null 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 new file mode 100644 index 0000000..ddd67bd Binary files /dev/null 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 new file mode 100644 index 0000000..2063b1a Binary files /dev/null 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 new file mode 100644 index 0000000..6e49b40 Binary files /dev/null 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 new file mode 100644 index 0000000..a8caeec Binary files /dev/null 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 new file mode 100644 index 0000000..f192819 Binary files /dev/null and b/data/images/tiles/iso/7.png differ diff --git a/game.py b/game.py index 4dd226a..2e440f7 100644 --- a/game.py +++ b/game.py @@ -21,10 +21,11 @@ class Game: self.player = Entity(self, 'player', (50.0,200.0), (8, 15)) self.assets = { 'player' : load_image('entities/player.png'), - 'grass' : load_images('tiles/grass/'), - 'stone' : load_images('tiles/stone/') + #'grass' : load_images('tiles/grass/'), + #'stone' : load_images('tiles/stone/') + 'iso' : load_images('tiles/iso/') } - self.tilemap = Tilemap(self, (32,32), 'map_1.csv') + self.tilemap = Tilemap(self, (64,32), 'map_1.csv') def run(self): self.status = True while self.status: @@ -39,9 +40,9 @@ class Game: if keys[pygame.K_RIGHT]: delta[0] += 1 if keys[pygame.K_UP]: - delta[1] -= 1 + delta[1] -= 0.5 if keys[pygame.K_DOWN]: - delta[1] += 1 + delta[1] += 0.5 self.player.update(delta) self.tilemap.render(self.display) self.player.render(self.display) diff --git a/scripts/__pycache__/entities.cpython-311.pyc b/scripts/__pycache__/entities.cpython-311.pyc deleted file mode 100644 index 9d4b957..0000000 Binary files a/scripts/__pycache__/entities.cpython-311.pyc and /dev/null differ diff --git a/scripts/__pycache__/tiles.cpython-311.pyc b/scripts/__pycache__/tiles.cpython-311.pyc deleted file mode 100644 index 4fb0084..0000000 Binary files a/scripts/__pycache__/tiles.cpython-311.pyc and /dev/null differ diff --git a/scripts/__pycache__/utils.cpython-311.pyc b/scripts/__pycache__/utils.cpython-311.pyc deleted file mode 100644 index 979f7c7..0000000 Binary files a/scripts/__pycache__/utils.cpython-311.pyc and /dev/null differ diff --git a/scripts/entities.py b/scripts/entities.py index 634761d..3de7260 100644 --- a/scripts/entities.py +++ b/scripts/entities.py @@ -1,5 +1,6 @@ import pygame import numpy as np +from scripts.utils import to_isometric_pixel class Entity: def __init__(self, game, e_type, pos, size): diff --git a/scripts/tiles.py b/scripts/tiles.py index 6741f1c..74d5877 100644 --- a/scripts/tiles.py +++ b/scripts/tiles.py @@ -1,6 +1,6 @@ import pygame import numpy as np -from scripts.utils import TILE_DICT +from scripts.utils import TILE_DICT, to_isometric BASE_MAP_PATH = 'data/maps/' @@ -22,6 +22,6 @@ 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']],tile['pos'] * self.tile_size) + surface.blit(self.game.assets[tile['type']][tile['variant']],to_isometric(tile['pos'],self.tile_size)) for tile in self.offgrid_tiles: - surface.blit(self.game.assets[tile['type']][tile['variant']],tile.pos) #this tile is written offgrid so no mult by tile_size + surface.blit(self.game.assets[tile['type']][tile['variant']],to_isometric(tile['pos'],self.tile_size)) #this tile is written offgrid so no mult by tile_size diff --git a/scripts/utils.py b/scripts/utils.py index 4b03df1..1e858e7 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -1,12 +1,13 @@ import pygame import os +import numpy as np TILE_DICT = { - 1 : ('grass',0), - 2 : ('stone',0), - 3 : ('grass',1), - 4 : ('stone',1), - 5 : ('grass',2), - 6 : ('stone',2) + 1 : ('iso',0), + 2 : ('iso',1), + 3 : ('iso',2), + 4 : ('iso',3), + 5 : ('iso',4), + 6 : ('iso',5) } BASE_IMG_PATH = 'data/images/' def load_image(path): @@ -19,3 +20,20 @@ def load_images(path): for img_name in sorted(os.listdir(BASE_IMG_PATH + path)): images.append(load_image(path + '/' + img_name)) return images +def to_isometric(coord, tilesize): + #(1,0) -> (+tilesize[0]/2,+tilesize[1]/2) + #(0,1) -> (-tilesize[0]/2,+tilesize[1]/2) + #a must be (+tilesize[0]/2,-tilesize[0]/2) + # (+tilesize[1]/2,+tilesize[1]/2) + a = np.array([[1,-1],[1,1]]) + a = 0.5 * a * tilesize[:,np.newaxis] + return np.squeeze(np.matmul(a,coord[:,np.newaxis])) +def to_cartesian(coord, tilesize): + #manually calculated the inverse of a in to_isometric + a = np.array([[1,1],[-1,1]]) + a = a * (1/tilesize) + return np.squeeze(np.matmul(a,coord[:,np.newaxis])) +def to_isometric_pixel(coord): + a = np.array([[1,-1],[1,1]]) + a = 0.5 * a + return np.squeeze(np.matmul(a,coord[:,np.newaxis]))