Working second level and not so working main menu
This commit is contained in:
parent
e6c2008c74
commit
dd6b015f76
Binary file not shown.
After Width: | Height: | Size: 207 B |
|
@ -0,0 +1,12 @@
|
||||||
|
#############
|
||||||
|
# #
|
||||||
|
# #
|
||||||
|
# #
|
||||||
|
# #
|
||||||
|
# #
|
||||||
|
#**** #####
|
||||||
|
#**** #####
|
||||||
|
##*** #####
|
||||||
|
# #####
|
||||||
|
#P #####
|
||||||
|
#############
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
17
src/main.nim
17
src/main.nim
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue