isometric tiles
BIN
data/images/tiles/iso/0.png
Normal file
After Width: | Height: | Size: 301 B |
BIN
data/images/tiles/iso/1.png
Normal file
After Width: | Height: | Size: 320 B |
BIN
data/images/tiles/iso/2.png
Normal file
After Width: | Height: | Size: 320 B |
BIN
data/images/tiles/iso/3.png
Normal file
After Width: | Height: | Size: 323 B |
BIN
data/images/tiles/iso/4.png
Normal file
After Width: | Height: | Size: 315 B |
BIN
data/images/tiles/iso/5.png
Normal file
After Width: | Height: | Size: 324 B |
BIN
data/images/tiles/iso/6.png
Normal file
After Width: | Height: | Size: 328 B |
BIN
data/images/tiles/iso/7.png
Normal file
After Width: | Height: | Size: 320 B |
11
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)
|
||||
|
@ -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):
|
||||
|
@ -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
|
||||
|
@ -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]))
|
||||
|