Improvements to level design
This commit is contained in:
parent
c745c924a9
commit
a61b3927df
Binary file not shown.
Before Width: | Height: | Size: 120 B After Width: | Height: | Size: 243 B |
|
@ -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
|
|
|
@ -0,0 +1,11 @@
|
|||
#####################
|
||||
# # #
|
||||
# # #
|
||||
# # #
|
||||
# # #
|
||||
# D #
|
||||
#P B D B #
|
||||
####**#########**####
|
||||
####*************####
|
||||
####*************####
|
||||
#####################
|
|
@ -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)
|
||||
|
|
13
src/main.nim
13
src/main.nim
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue