private var altitude_counter = new CounterSprites(texts_sheet.n,
new Point3d[Float](1400.0, -64.0, 0.0))
+ # Did the player asked to skip the intro animation?
+ private var skip_intro = false
+
redef fun on_create
do
super
# Cinematic?
var t = world.t
var intro_duration = 8.0
- if t < intro_duration then
+ if t < intro_duration and not skip_intro then
var pitch = t/intro_duration
pitch = (pitch*pi).sin
world_camera.pitch = pitch
end
if world.player == null then
- # Game is starting!
- world.spawn_player
- world.planes.add new Airplane(new Point3d[Float](0.0, world.player.center.y - 10.0, 0.0), 16.0, 4.0)
-
- # Setup tutorial
- ui_sprites.clear
- ui_sprites.add_all([tutorial_wasd, tutorial_arrows, tutorial_chute])
-
world_camera.pitch = 0.0
world_camera.far = 700.0
+
+ begin_play true
end
# Update counters
end
end
+ # Begin playing, after intro if `initial`, otherwise after death
+ fun begin_play(initial: Bool)
+ do
+ ui_sprites.clear
+
+ world.spawn_player
+ world.planes.add new Airplane(new Point3d[Float](0.0, world.player.center.y - 10.0, 0.0), 16.0, 4.0)
+
+ if initial then
+ # Setup tutorial
+ ui_sprites.add_all([tutorial_wasd, tutorial_arrows, tutorial_chute])
+ end
+ end
+
# Seconds at which the game was won, using `world.t` as reference
private var won_at: nullable Float = null
redef fun accept_event(event)
do
- var s = super
+ if super then return true
if event isa QuitEvent then
print perfs
else player.sprite.as(PlayerSprite).start_running
end
end
+ end
- # When player is dead, respawn on spacebar
- if player != null and not player.is_alive then
- if event.name == "space" then
- ui_sprites.clear
- world.spawn_player
- end
+ # When player is dead, respawn on spacebar or pointer depressed
+ if (event isa KeyEvent and event.name == "space") or
+ (event isa PointerEvent and not event.is_move and event.depressed) then
+ var player = world.player
+ if player == null then
+ skip_intro = true
+ else if not player.is_alive then
+ begin_play false
end
end
- return s
+ return false
end
end
for i in planes.reverse_iterator do
if i.out_of_screen(p, self) then
#print "Despawning plane"
- i.die(self)
+ i.destroy self
end
end
if p == null then return
if p.altitude >= boss_altitude then
for e in enemies.reverse_iterator do if e isa JetpackEnemy then
- e.die(self)
+ e.destroy self
end
return
end
for i in enemies.reverse_iterator do
if i.out_of_screen(p, self) then
#print "Despawning enemy"
- i.die(self)
+ i.destroy self
end
end