From 135ffef6af9dafa2ec3c76e0d083dcadd7ae686f Mon Sep 17 00:00:00 2001 From: StochasticMouse Date: Wed, 17 Jul 2024 12:24:04 +0200 Subject: [PATCH] changed idea, an array is better due to isometric nature of game, added extend and add_tile to Tilemap, now can add/remove tiles via level_editor --- data/images/tiles/iso/0.png | Bin 301 -> 163 bytes data/images/tiles/iso/1.png | Bin 320 -> 301 bytes data/images/tiles/iso/2.png | Bin 320 -> 320 bytes data/images/tiles/iso/3.png | Bin 323 -> 320 bytes data/images/tiles/iso/4.png | Bin 315 -> 323 bytes data/images/tiles/iso/5.png | Bin 324 -> 315 bytes data/images/tiles/iso/6.png | Bin 328 -> 324 bytes data/images/tiles/iso/7.png | Bin 320 -> 328 bytes data/images/tiles/iso/8.png | Bin 0 -> 320 bytes game.py | 8 +++++--- scripts/tiles.py | 19 +++++++++++++++++-- scripts/utils.py | 14 +++++++------- 12 files changed, 29 insertions(+), 12 deletions(-) create mode 100644 data/images/tiles/iso/8.png diff --git a/data/images/tiles/iso/0.png b/data/images/tiles/iso/0.png index 39181389d76d49ea3c9d77bab4fbce98cced4d79..c29220ea28d2157c04a5ba56c2ce2fbf8f207c1a 100644 GIT binary patch delta 118 zcmZ3>w3u;%Nq&^4i(^Pe184L23c>7Pc1* iYZW5`-WOL(`r8|6gV=%fT{?h-r(`-1K0YHwY92 zKtX^+L6)!pTVUlzQM=!y7Mj06aCg)>)1Q zz*~ZAb$bx}0lYQ1md@$c46UXL;v*tWZ@!cA7eG#exeVq;i21>2(YL~P4ZLLD46zK^ za&L#(1w{Mikr?t&G>^seV#L&;8tr;D))?-3IocR6ay|Y7hepg016w7;00000NkvXX Hu0mjf@qu$M diff --git a/data/images/tiles/iso/1.png b/data/images/tiles/iso/1.png index 61231e510abcc92a2a246be9401b2afa8d622ccf..39181389d76d49ea3c9d77bab4fbce98cced4d79 100644 GIT binary patch delta 257 zcmV+c0sj8L0<8j&G=JntL_t(&f$f>W5`-WOL(`r8|6gV=%fT{?h-r(`-1K0YHwY92 zKtX^+L6)!pTVUlzQM=!y7Mj06aCg)>)1Q zz*~ZAb$bx}0lYQ1md@$c46UXL;v*tWZ@!cA7eG#exeVq;i21>2(YL~P4ZLLD46zK^ za&L#(1w{Mikr?t&G>^seV#L&;8tr;D))?-3IocR6ay|Y7hepg016w7;00000NkvXX Hu0mjf53O@e delta 277 zcmV+w0qXv(0>A>0G=KL=L_t(&f$f=F4udcZ1Z~vY^}M}a!$(CW)`|$hb{@|BfrOnM z@k+u(l&AsBd^%34$uQ{U-S7zh{+Vg5ll{ZKrT4qEy7$tX>i0#gqeWa;E1&d zbpcwz5i1dD0<3}~+9Dnc@CuG-iKrIPDmd~~#BBk+1V?H`6n_ioH8^rt#HD~yf+M9O zvI0g8j$DZl0%i%0KR5b2n bdwd5?Ezb%Cr4CEK00000NkvXXu0mjf%7b>+ diff --git a/data/images/tiles/iso/2.png b/data/images/tiles/iso/2.png index 28590f1fbe4297750b72dd5ab87a6e86e888bee2..61231e510abcc92a2a246be9401b2afa8d622ccf 100644 GIT binary patch delta 268 zcmV+n0rURA0>A>0J%3vcgD?yPZPeTKyuDt-M@1#piU`4W9?txMgqv{FzDso@Cg3?o&$fj-+6BlOip(|E;!;X!dyUUaKuZ5nSk2hh_wiH0b0QkD-mh} ztb!xjA|4Cy3XW)rs20#FIPz4)Z2`RmM`}eB3+OdCa#zHqfPYbfBc&p;0!9svT!|0@ zW(khuMEnKJ8XQ3p%*=^s{@}sQ(I!3py2HJ{b}h zb|S)kIxGrAT@Vq4qArPvf>9SmMd7H+;-W#+jSeiTO7A>0J%3pagD?z4$Ef$~S$n~zUsPf&LyLCRfC%fKh`pS0a>v zS%NcXBK`tq4bHF#5s?JUADr1mY>mg!ob?D`y#&{1aQz776dXlF^#+_`B{{ZLM&kB2z ST`2$n002ovP6b4+LSTYKK666= diff --git a/data/images/tiles/iso/3.png b/data/images/tiles/iso/3.png index ddd67bdabd153b258580c8d463c58c7c44bc78b6..28590f1fbe4297750b72dd5ab87a6e86e888bee2 100644 GIT binary patch delta 277 zcmV+w0qXw40>A>0G=KL=L_t(&f$f=D4udcZM8~N2>sfojre9QIEJO&gvpDY$B<#!+ zTM_|~&;SuR9H-P|7Ypc bkN*JY*v|@kk`7%d00000NkvXXu0mjf3-)); delta 280 zcmV+z0q6d}0>c83G=KU@L_t(&f$f>w4#Xe`M8WL;e{$W2O*bhMQ)>Y)IBzu-oReM@ zn20iU5Hnw{bMCSX`gkWijpyUIj;Hh+cLu@a^aPZQ!+p*m%mLIIhj~sQ%mB0+hd9O{ z)B$K2hqy){)Bso+hdjz4UIXwl4tbS8Gy~{m9M)1yK!PRO3=lLEHkE z#kf>0h$4VljZ58u0065Pmnwny16b9#lmx-doQc*qE_H%Po!8M_`xT)55!}DQy%DMk zI0*>#tuRa&6omO<2qq2!!u>c50iqT}AW+nj7zB)36otT1%i@qAYGVWvMQx2i!l=zr eNIXb;{0k!U&k+inK`PDw0000c83G=KU@L_t(&f$f>w4#Xe`M8WL;e{$W2O*bhMQ)>Y)IBzu-oReM@ zn20iU5Hnw{bMCSX`gkWijpyUIj;Hh+cLu@a^aPZQ!+p*m%mLIIhj~sQ%mB0+hd9O{ z)B$K2hqy){)Bso+hdjz4UIXwl4tbS8Gy~{m9M)1yK!PRO3=lLEHkE z#kf>0h$4VljZ58u0065Pmnwny16b9#lmx-doQc*qE_H%Po!8M_`xT)55!}DQy%DMk zI0*>#tuRa&6omO<2qq2!!u>c50iqT}AW+nj7zB)36otT1%i@qAYGVWvMQx2i!l=zr eNIXb;{0k!U&k+inK`PDw0000y4#OY_MxojJKl0qox?~?QwH6S?bJr#Xzmxu{ zOhknSz|4Qgr3@Jcy}TQq!QT-0_@4I`!Q^xY)Pf`4BFqJ}21mR^m|13?jmPIxGrgT@Vq4vMz~{?uMd7T=;-W#;jS(-cPn00ehG!C*o{sA!q W&kFFrTPFYj00{s|MNUMnLSTZ(C36A* diff --git a/data/images/tiles/iso/5.png b/data/images/tiles/iso/5.png index 6e49b40c505a4ec132877147b86b93c6b39a2089..2063b1a9678c334c4d8ca8d4a07fbd863cff36de 100644 GIT binary patch delta 272 zcmV+r0q_3A0=oi`G=K6*L_t(&f$f>y4#OY_MxojJKl0qox?~?QwH6S?bJr#Xzmxu{ zOhknSz|4Qgr3@Jcy}TQq!QT-0_@4I`!Q^xY)Pf`4BFqJ}21mR^m|13?jmPIxGrgT@Vq4vMz~{?uMd7T=;-W#;jS(-cPn00ehG!C*o{sA!q W&kFFrTPFYj00{s|MNUMnLSTZ)HFE<1 delta 281 zcmV+!0p|X@0>lE4G=KX^L_t(&f$f<|4#OY}MeV4E=xMv?X?u#&RVw9MD1_K%FmIPg zvH4G#04AbD4PfTOaY{{wK@abSd+_h)bvVC0-$djug30L)$OT8dMVJdH4UTw;FcVN4 z9I+OmEA diff --git a/data/images/tiles/iso/6.png b/data/images/tiles/iso/6.png index a8caeecb1a28955dbacd78c1443135ecd23dc1f2..6e49b40c505a4ec132877147b86b93c6b39a2089 100644 GIT binary patch delta 281 zcmV+!0p|Y50>lE4G=KX^L_t(&f$f<|4#OY}MeV4E=xMv?X?u#&RVw9MD1_K%FmIPg zvH4G#04AbD4PfTOaY{{wK@abSd+_h)bvVC0-$djug30L)$OT8dMVJdH4UTw;FcVN4 z9I+OmE}c8G=Kj|L_t(&f$f=D4#O}AL?P-`djA9UE_FVtR0<<2jstkX^A{@y z&r=o~n1~WJ5Hp{yQ);pddU+>2jHmbaJpS2!jKew}f`7OTpcms(wIGTC^lDt{ zE{ID2qZpSe1(5|Xs&T0+5CC8n<5D>ge*m)@my#funG@0c#-$DrTjO;!*LnqLeFWEU zaBYN&0uBN~eJczTIt5{V7=nqNfN(z!Lx89S5eO8uBnAPa7DXX&)Ur4vh}sx|L{VE~ jkT7a<6cTsR9v0sLHm}bLyk}+200000NkvXXu0mjfQIKy@ diff --git a/data/images/tiles/iso/7.png b/data/images/tiles/iso/7.png index f192819f0631bbcefea1ca8fa33eede5366af98b..a8caeecb1a28955dbacd78c1443135ecd23dc1f2 100644 GIT binary patch delta 285 zcmV+&0pk9^0>}c8G=Kj|L_t(&f$f=D4#O}AL?P-`djA9UE_FVtR0<<2jstkX^A{@y z&r=o~n1~WJ5Hp{yQ);pddU+>2jHmbaJpS2!jKew}f`7OTpcms(wIGTC^lDt{ zE{ID2qZpSe1(5|Xs&T0+5CC8n<5D>ge*m)@my#funG@0c#-$DrTjO;!*LnqLeFWEU zaBYN&0uBN~eJczTIt5{V7=nqNfN(z!Lx89S5eO8uBnAPa7DXX&)Ur4vh}sx|L{VE~ jkT7a<6cTsR9v0sLHm}bLyk}+200000NkvXXu0mjfO&o7c delta 277 zcmV+w0qXw90>A>0G=KL=L_t(&f$f=F4udcZ1Z~vI_C&pH!$(CW)`|$hb{@|BfrOnM z@k+u(l&AsBd^%34$uQ{U-S7zheV+qwpWk_J5ll{ZKrT4qEy7$tX>i0#gqeWa;E1&d zbpcwz5i1dD0<3}~+9Dnc@CuG-iKrIPDmd~~#BBk+1V?H`6n_ioH8^rt#HD~yf+M9O zvI0g8j$DZl0%i%0KR5b2n bdwd7;9M1{^g$@Vd00000NkvXXu0mjf@Go{F diff --git a/data/images/tiles/iso/8.png b/data/images/tiles/iso/8.png new file mode 100644 index 0000000000000000000000000000000000000000..f192819f0631bbcefea1ca8fa33eede5366af98b GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQY^(zo*^7SP{WbZ0px%8ba4#H zXnZ>}ny=Y_hb8yQ>2EH3a}T?_s$T2jI9Mik?oVUOT-lFahg_ztU_4V}<+t*r!HcJN zKXCl3ozI*<|9)k@ppRdiTfS=|_tkuk;FD)OdAmMutRbafr#gl~IRF3v literal 0 HcmV?d00001 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):