소스 검색

small update

Ethosa 3 년 전
부모
커밋
79ec5fa42e
3개의 변경된 파일14개의 추가작업 그리고 11개의 파일을 삭제
  1. 11 10
      src/nodesnim/nodes2d/tilemap.nim
  2. 1 0
      tests/README.md
  3. 2 1
      tests/test45.nim

+ 11 - 10
src/nodesnim/nodes2d/tilemap.nim

@@ -48,14 +48,15 @@ method draw*(self: TileMapRef, w, h: GLfloat) =
 
   glEnable(GL_TEXTURE_2D)
   if self.mode == TILEMAP_2D:
-    for x1 in viewport[0]..viewport[2]+1:
-      for y1 in viewport[1]..viewport[3]+1:
-        let pos = x1+y1*self.map_size.x
-        if not self.map[pos].isNil():
-          let
-            posx = x + self.tileset.grid.x*x1.float
-            posy = y - self.tileset.grid.y*y1.float
-          self.tileset.draw(self.map[pos].x, self.map[pos].y, posx, posy)
+    for z in 0..<self.map_size.z:
+      for x1 in viewport[0]..viewport[2]+1:
+        for y1 in viewport[1]..viewport[3]+1:
+          let pos = x1+y1*self.map_size.x + self.map_size.x*self.map_size.y*z
+          if not self.map[pos].isNil():
+            let
+              posx = x + self.tileset.grid.x*x1.float
+              posy = y - self.tileset.grid.y*y1.float
+            self.tileset.draw(self.map[pos].x, self.map[pos].y, posx, posy)
   else:
     for z in 0..<self.map_size.z:
       for y1 in viewport[1]..viewport[3]:
@@ -76,13 +77,13 @@ method drawTile*(self: TileMapRef, x, y: int, tile_pos: Vector2Ref, layer: int =
 method drawRect*(self: TileMapRef, x, y, w, h: int, tile_pos: Vector2Ref, layer: int = 0) {.base.} =
   for x1 in x..x+w:
     for y1 in y..y+h:
-      self.map[x1+y1*self.map_size.x + self.map_size.x*self.map_size.y*layer] = tile_pos
+      self.drawTile(x1, y1, tile_pos, layer)
 
 method fill*(self: TileMapRef, tile_pos: Vector2Ref, layer: int = 0) {.base.} =
   ## Fills the map with a tile at `tile_pos` position.
   for x in 0..<self.map_size.x.int:
     for y in 0..<self.map_size.y.int:
-      self.map[x+y*self.map_size.x + self.map_size.x*self.map_size.y*layer] = tile_pos
+      self.drawTile(x, y, tile_pos, layer)
 
 method resizeMap*(self: TileMapRef, size: Vector2Ref, layer_count: int = 2) {.base.} =
   ## Changes map size to `size`.

+ 1 - 0
tests/README.md

@@ -48,3 +48,4 @@
 - [Use padding.](https://github.com/Ethosa/nodesnim/blob/master/tests/test46.nim)
 - [Use margin.](https://github.com/Ethosa/nodesnim/blob/master/tests/test47.nim)
 - [Use Camera3D node.](https://github.com/Ethosa/nodesnim/blob/master/tests/test48.nim)
+- [Use TileMap Isometric mode](https://github.com/Ethosa/nodesnim/blob/master/tests/test49.nim)

+ 2 - 1
tests/test45.nim

@@ -10,7 +10,8 @@ build:
   - Scene main:
     - TileMap map:
       call setTileSet(tileset)
-      call resizeMap(newVector2(8096, 512))
+      #                         map size   layer count
+      call resizeMap(newVector2(8096, 512), 1)
       call fill(newVector2(1, 0))
       call drawRect(3, 3, 10, 5, newVector2(9, 7))
       call drawTile(0, 0, newVector2(3, 0))