Improvements to level design

This commit is contained in:
Adam Blažek 2020-06-28 00:02:29 +02:00
parent c745c924a9
commit a61b3927df
5 changed files with 45 additions and 26 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 B

After

Width:  |  Height:  |  Size: 243 B

View File

@ -1,11 +0,0 @@
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
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
3 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
4 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
5 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
7 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
8 1 1 1 1 3 3 1 1 1 1 1 3 3 1 1 1 1
9 1 1 1 1 3 3 3 3 3 3 3 3 3 1 1 1 1
10 1 1 1 1 3 3 3 3 3 3 3 3 3 1 1 1 1
11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

11
data/levels/1.txt Normal file
View File

@ -0,0 +1,11 @@
#####################
# # #
# # #
# # #
# # #
# D #
#P B D B #
####**#########**####
####*************####
####*************####
#####################

View File

@ -1,11 +1,13 @@
import
sequtils,
strformat,
strutils,
sugar,
tables,
nimgame2 / [
assets,
entity,
tilemap,
utils,
],
data
@ -16,6 +18,18 @@ const
PlayerTile* = 2
SecretTileClosed* = 3
SecretTileOpen* = 4
Button0TileUnpressed* = 5
Button0TilePressed* = 6
Door0TileClosed* = 7
Door0TileOpen* = 8
tilesByName = {
' ': AirTile,
'#': WallTile,
'P': PlayerTile,
'*': SecretTileClosed,
'B': Button0TileUnpressed,
'D': Door0TileClosed,
}.toTable
type
Level* = ref object of TileMap
@ -25,11 +39,27 @@ proc init*(level: Level, number: Positive) =
level.tags.add("level")
level.graphic = gfxData["tiles"]
level.initSprite(TileDim)
level.map = loadCSV[int](&"data/levels/{number}.csv", parseInt)
level.passable.add @[AirTile, PlayerTile, SecretTileOpen]
level.map = collect(newSeq):
for line in lines(&"data/levels/{number}.txt"):
collect(newSeq):
for ch in line:
tilesByName[ch]
level.passable = @[AirTile, PlayerTile, SecretTileOpen, Button0TileUnpressed, Button0TilePressed, Door0TileOpen]
level.onlyReachableColliders = true
level.initCollider()
proc switchSecretTiles*(level: Level) =
level.map.apply((row: var seq[int]) => row.apply(tile => (
case tile
of SecretTileClosed:
SecretTileOpen
of SecretTileOpen:
SecretTileClosed
else:
tile
)))
level.initCollider
proc newLevel*(number: Positive): Level =
new result
result.init(number)

View File

@ -1,6 +1,4 @@
import
sequtils,
sugar,
nimgame2 / [
entity,
input,
@ -61,13 +59,4 @@ method update*(scene: MainScene, elapsed: float) =
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
scene.level.switchSecretTiles