Working second level and not so working main menu

This commit is contained in:
Adam Blažek 2020-06-30 18:20:11 +02:00
parent e6c2008c74
commit dd6b015f76
6 changed files with 68 additions and 19 deletions

BIN
data/gui/button.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

12
data/levels/2.txt Normal file
View File

@ -0,0 +1,12 @@
#############
# #
# #
# #
# #
# #
#**** #####
#**** #####
##*** #####
# #####
#P #####
#############

View File

@ -1,6 +1,7 @@
import import
nimgame2 / [ nimgame2 / [
assets, assets,
mosaic,
scene, scene,
texturegraphic, texturegraphic,
truetypefont, truetypefont,
@ -12,11 +13,15 @@ const
GameHeight* = 720 GameHeight* = 720
GameDim*: Dim = (1280, 720) GameDim*: Dim = (1280, 720)
GameTitle* = "Soloplayer" GameTitle* = "Soloplayer"
NumberOfLevels* = 2
var var
titleScene*, mainScene*: Scene titleScene*, mainScene*: Scene
normalFont*, titleFont*: TrueTypeFont normalFont*, titleFont*: TrueTypeFont
gfxData*: Assets[TextureGraphic] gfxData*: Assets[TextureGraphic]
buttonMosaic*: Mosaic
buttonSkin*: TextureGraphic
levelNumber*: Positive = 255
proc loadData*() = proc loadData*() =
normalFont = newTrueTypeFont() normalFont = newTrueTypeFont()
@ -24,6 +29,9 @@ proc loadData*() =
titleFont = newTrueTypeFont() titleFont = newTrueTypeFont()
discard titleFont.load("data/fnt/FantasqueSansMono-Bold.ttf", 96) discard titleFont.load("data/fnt/FantasqueSansMono-Bold.ttf", 96)
gfxData = newAssets[TextureGraphic]("data/gfx", newTextureGraphic) gfxData = newAssets[TextureGraphic]("data/gfx", newTextureGraphic)
buttonMosaic = newMosaic("data/gui/button.png", (8, 8))
buttonSkin = newTextureGraphic()
discard buttonSkin.assignTexture buttonMosaic.render(patternStretchBorder(8, 2))
proc freeData*() = proc freeData*() =
normalFont.free normalFont.free

View File

@ -40,6 +40,7 @@ const
type type
Level* = ref object of TileMap Level* = ref object of TileMap
number*: Positive
proc init*(level: Level, number: Positive) = proc init*(level: Level, number: Positive) =
init Tilemap level init Tilemap level
@ -66,5 +67,5 @@ proc switchSecretTiles*(level: Level) =
level.initCollider level.initCollider
proc newLevel*(number: Positive): Level = proc newLevel*(number: Positive): Level =
new result result = Level(number: number)
result.init(number) result.init(number)

View File

@ -14,13 +14,13 @@ import
player player
type type
MainScene = ref object of Scene MainScene* = ref object of Scene
level: Level level: Level
player: Player player: Player
proc init*(scene: MainScene) = proc loadLevel(scene: MainScene, number: Positive) =
init scene.Scene scene.clear
scene.level = newLevel(1) scene.level = newLevel(number)
scene.level.pos = (GameDim - scene.level.TileMap.dim) / 2 scene.level.pos = (GameDim - scene.level.TileMap.dim) / 2
scene.add scene.level scene.add scene.level
scene.level.layer = 0 scene.level.layer = 0
@ -29,6 +29,10 @@ proc init*(scene: MainScene) =
scene.player.layer = 1 scene.player.layer = 1
scene.player.resetPosition() scene.player.resetPosition()
scene.add scene.player scene.add scene.player
scene.render
proc init*(scene: MainScene) =
init scene.Scene
proc free*(scene: MainScene) = proc free*(scene: MainScene) =
discard discard
@ -38,7 +42,8 @@ proc newMainScene*(): MainScene =
init result init result
method show*(scene: MainScene) = method show*(scene: MainScene) =
echo "Switched to MainScene" if scene.level == nil or scene.level.number != levelNumber:
scene.loadLevel levelNumber
method event*(scene: MainScene, event: Event) = method event*(scene: MainScene, event: Event) =
scene.eventScene event scene.eventScene event
@ -62,3 +67,5 @@ method update*(scene: MainScene, elapsed: float) =
scene.level.switchSecretTiles scene.level.switchSecretTiles
if scene.level.collider.collide(scene.player.collider): if scene.level.collider.collide(scene.player.collider):
scene.level.switchSecretTiles scene.level.switchSecretTiles
if ScancodeEscape.pressed:
game.scene = titleScene

View File

@ -1,9 +1,12 @@
import import
nimgame2 / [ nimgame2 / [
entity,
gui/button,
gui/widget,
input,
nimgame, nimgame,
scene, scene,
types, settings,
entity,
textgraphic, textgraphic,
], ],
data data
@ -13,23 +16,34 @@ type
proc init*(scene: TitleScene) = proc init*(scene: TitleScene) =
init scene.Scene init scene.Scene
let titleText = newTextGraphic(titleFont) let titleText = newTextGraphic(titleFont)
titleText.setText GameTitle titleText.setText GameTitle
let title = newEntity() let title = newEntity()
title.graphic = titleText title.graphic = titleText
title.centrify() title.centrify
title.pos = (GameWidth / 2, GameHeight / 3) title.pos = (GameWidth / 2, GameHeight / 3)
scene.add title scene.add title
let subtitleText = newTextGraphic(normalFont) let playButtonLabel = newTextGraphic(normalFont)
subtitleText.setText "Press any key to start" playButtonLabel.setText "PLAY"
let playButton = newGuiButton(buttonSkin, playButtonLabel)
playButton.centrify
playButton.pos = (GameWidth / 2, GameHeight / 2)
playButton.actions.add proc(widget: GuiWidget) =
game.scene = mainScene
scene.add playButton
let subtitle = newEntity() let exitButtonLabel = newTextGraphic(normalFont)
subtitle.graphic = subtitleText exitButtonLabel.setText "EXIT"
subtitle.centrify() let exitButton = newGuiButton(buttonSkin, exitButtonLabel)
subtitle.pos = game.size / 2 exitButton.centrify
scene.add subtitle exitButton.pos = (GameWidth / 2, GameHeight / 2 + 64)
exitButton.mbAllow = left
exitButton.enable
exitButton.actions.add proc(widget: GuiWidget) =
gameRunning = false
scene.add exitButton
proc free*(scene: TitleScene) = proc free*(scene: TitleScene) =
discard discard
@ -38,6 +52,13 @@ proc newTitleScene*(): TitleScene =
new result, free new result, free
init result init result
method event*(scene: TitleScene, event: Event) = method update*(scene: TitleScene, elapsed: float) =
if event.kind == KeyDown: scene.updateScene(elapsed)
if Scancode1.pressed:
levelNumber = 1
game.scene = mainScene game.scene = mainScene
if Scancode2.pressed:
levelNumber = 2
game.scene = mainScene
if ScancodeEscape.pressed:
gameRunning = false