diff --git a/data/gfx/tiles.png b/data/gfx/tiles.png index 94cc695..993b8b0 100644 Binary files a/data/gfx/tiles.png and b/data/gfx/tiles.png differ diff --git a/data/levels/1.csv b/data/levels/1.csv index c249fcc..c5f894b 100644 --- a/data/levels/1.csv +++ b/data/levels/1.csv @@ -1,9 +1,11 @@ -1,1,1,1,1,1,1,1 -1,0,0,0,0,0,0,1 -1,0,0,0,0,0,0,1 -1,0,0,0,0,0,0,1 -1,2,0,0,0,0,0,1 -1,1,0,1,1,0,1,1 -1,1,0,0,0,0,1,1 -1,1,0,0,0,0,1,1 -1,1,1,1,1,1,1,1 +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 +1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 +1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 +1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +1,1,1,1,3,3,1,1,1,1,1,3,3,1,1,1,1 +1,1,1,1,3,3,3,3,3,3,3,3,3,1,1,1,1 +1,1,1,1,3,3,3,3,3,3,3,3,3,1,1,1,1 +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 diff --git a/src/level.nim b/src/level.nim index 4ae9550..171c8cd 100644 --- a/src/level.nim +++ b/src/level.nim @@ -14,6 +14,8 @@ const AirTile* = 0 WallTile* = 1 PlayerTile* = 2 + SecretTileClosed* = 3 + SecretTileOpen* = 4 type Level* = ref object of TileMap @@ -24,7 +26,7 @@ proc init*(level: Level, number: Positive) = level.graphic = gfxData["tiles"] level.initSprite(TileDim) level.map = loadCSV[int](&"data/levels/{number}.csv", parseInt) - level.passable.add @[AirTile, PlayerTile] + level.passable.add @[AirTile, PlayerTile, SecretTileOpen] level.onlyReachableColliders = true level.initCollider() diff --git a/src/main.nim b/src/main.nim index 237d95b..3b255d1 100644 --- a/src/main.nim +++ b/src/main.nim @@ -1,6 +1,7 @@ import + sequtils, + sugar, nimgame2 / [ - assets, entity, input, nimgame, @@ -53,9 +54,20 @@ method event*(scene: MainScene, event: Event) = method update*(scene: MainScene, elapsed: float) = scene.updateScene(elapsed) - if ScancodeUp.pressed or ScancodeW.pressed or ScancodeSpace.pressed: - scene.player.jump() + if ScancodeUp.pressed or ScancodeW.pressed: + scene.player.jump if ScancodeRight.down or ScancodeD.down: scene.player.right(elapsed) if ScancodeLeft.down or ScancodeA.down: scene.player.left(elapsed) + if ScanCodeSpace.pressed: + scene.level.map = scene.level.map.map(row => row.map(tile => ( + case tile + of SecretTileClosed: + SecretTileOpen + of SecretTileOpen: + SecretTileClosed + else: + tile + ))) + scene.level.initCollider