-
Notifications
You must be signed in to change notification settings - Fork 6
04.The main game scene
la.panon. edited this page Apr 17, 2025
·
2 revisions
# nim/nimmain/src/classes/gdmain.nim
import gdext
import classes/gdPlayer
import classes/gdMob
import gdext/classes/gdSceneTree
import gdext/classes/gdNode
import gdext/classes/gdMarker2D
import gdext/classes/gdTimer
import gdext/classes/gdPackedScene
import gdext/classes/gdPathFollow2D
import gdext/classes/gdRigidBody2D
import gdext/classes/gdAudioStreamPlayer
type Main* {.gdsync.} = ptr object of Node
mob_scene* {.gdexport.}: gdref PackedScene
score: int
Player: Player
MobTimer: Timer
ScoreTimer: Timer
StartTimer: Timer
StartPosition: Marker2D
MobSpawnLocation: PathFollow2D
proc newGame(self: Main) {.gdsync, name: "new_game".} =
self.score = 0
self.Player.start(self.StartPosition.position)
start self.StartTimer
proc gameOver(self: Main) {.gdsync, name: "game_over".} =
stop self.ScoreTimer
stop self.MobTimer
method ready(self: Main) {.gdsync.} =
self.Player = self/"Player" as Player
self.MobTimer = self/"MobTimer" as Timer
self.ScoreTimer = self/"ScoreTimer" as Timer
self.StartTimer = self/"StartTimer" as Timer
self.StartPosition = self/"StartPosition" as Marker2D
self.MobSpawnLocation = self/"MobPath"/"MobSpawnLocation" as PathFollow2D
discard self.Player.connect("hit", self.callable"game_over")
discard self.MobTimer.connect("timeout", self.callable"_on_mob_timer_timeout")
discard self.ScoreTimer.connect("timeout", self.callable"_on_score_timer_timeout")
discard self.StartTimer.connect("timeout", self.callable"_on_start_timer_timeout")
proc onScoreTimerTimeout(self: Main) {.gdsync, name: "_on_score_timer_timeout".} =
inc self.score
proc onStartTimerTimeout(self: Main) {.gdsync, name: "_on_start_timer_timeout".} =
start self.MobTimer
start self.ScoreTimer
proc onMobTimerTimeout(self: Main) {.gdsync, name: "_on_mob_timer_timeout".} =
let mob = self.mob_scene[].instantiate as Mob
self.MobSpawnLocation.progressRatio = randfRange(0, 1)
var direction = self.MobSpawnLocation.rotation + PI/2
mob.position = self.MobSpawnLocation.position
direction += randfRange(-PI/4, PI/4)
mob.rotation = direction
var velocity = vector(randfRange(150, 250), 0f)
mob.linearVelocity = velocity.rotated(direction)
self.add_child mob
# nim/nimmain/bootstrap.nim
import gdext
import classes/gdPlayer
import classes/gdMob
+ import classes/gdMain
GDExtensionEntryPoint