action_nitro: remove dead code
[nit.git] / contrib / action_nitro / src / action_nitro.nit
index b8dd4f4..2c6afdc 100644 (file)
@@ -18,7 +18,6 @@ module action_nitro is
        app_version(1, 0, git_revision)
 
        android_manifest_activity """android:screenOrientation="sensorLandscape""""
-       android_api_target 10
 end
 
 import gamnit::depth
@@ -41,9 +40,12 @@ redef class App
        # Textures of the biplane, jet, helicopter, parachute and powerups
        var planes_sheet = new PlanesImages
 
+       # Animation when opening the parachute
+       var parachute_animation = new Animation(planes_sheet.parachute, 16.0)
+
        # Animation for the player movement
-       private var player_textures: Array[Texture] =
-               [for f in [1..12] do new Texture("textures/player/frame_{f.pad(2)}.png")]
+       private var running_texture = new Texture("textures/player.png")
+       private var running_animation: Animation = running_texture.to_animation(10.0, 12, 0)
 
        # Boss 3D model
        private var iss_model = new Model("models/iss.obj")
@@ -77,11 +79,11 @@ redef class App
        # Particle effects
 
        # Explosion particles
-       var explosions = new ParticleSystem(20, explosion_program,
+       var explosions = new ParticleSystem(100, explosion_program,
                new Texture("particles/explosion00.png"))
 
        # Blood explosion particles
-       var blood = new ParticleSystem(20, explosion_program,
+       var blood = new ParticleSystem(100, explosion_program,
                new Texture("particles/blood07.png"))
 
        # Smoke for the background
@@ -134,6 +136,9 @@ redef class App
 
        redef fun on_create
        do
+               blood.texture.as(RootTexture).premultiply_alpha = false
+               explosions.texture.as(RootTexture).premultiply_alpha = false
+
                super
 
                show_splash_screen new Texture("textures/splash.jpg")
@@ -147,10 +152,10 @@ redef class App
                ui_camera.reset_height 1080.0
 
                # Register particle systems
-               particle_systems.add explosions
-               particle_systems.add blood
                particle_systems.add smoke
                particle_systems.add clouds
+               particle_systems.add blood
+               particle_systems.add explosions
 
                # Stars background
                sprites.add stars
@@ -276,7 +281,6 @@ redef class App
                        player.moving = 0.0
                        if pressed_keys.has("left") then player.moving -= 1.0
                        if pressed_keys.has("right") then player.moving += 1.0
-                       player.sprite.as(PlayerSprite).update
                end
 
                # Try to fire as long as a key is pressed
@@ -404,16 +408,12 @@ redef class App
                                        if event.name == "left" then
                                                var mod = if event.is_down then -1.0 else 1.0
                                                player.moving += mod
-                                       end
-
-                                       if event.name == "right" then
+                                               player.animate_move
+                                       else if event.name == "right" then
                                                var mod = if event.is_down then 1.0 else -1.0
                                                player.moving += mod
+                                               player.animate_move
                                        end
-
-                                       if player.moving == 0.0 then
-                                       player.sprite.as(PlayerSprite).stop_running
-                                       else player.sprite.as(PlayerSprite).start_running
                                end
                        end
                end
@@ -470,12 +470,12 @@ redef class Human
        # Show death animation (explosion)
        fun death_animation
        do
-               var force = 4.0
+               var force = 2.0
                health = 0.0
-               for i in 32.times do
+               for i in 16.times do
                        app.blood.add(
                                new Point3d[Float](center.x & force, center.y & force, center.z & force),
-                               (2048.0 & 4096.0) * force, 0.3 & 0.1)
+                               (4096.0 & 2048.0) * force, 0.3 & 0.1)
                end
        end
 end
@@ -525,19 +525,31 @@ redef class Boss
 end
 
 redef class Enemy
-       redef var sprite = new Sprite(app.player_textures.rand, center) is lazy
+       redef var sprite = new Sprite(app.running_animation.frames.rand, center) is lazy
        init do sprite.scale = width/sprite.texture.width * 2.0
 end
 
 redef class Parachute
-       redef var sprite = new Sprite(app.planes_sheet.parachute, center) is lazy
-       init do sprite.scale = width / sprite.texture.width
+       redef var sprite = new Sprite(app.planes_sheet.parachute_open, center) is lazy
+       init
+       do
+               sprite.scale = width / sprite.texture.width
+               sprite.animate app.parachute_animation
+       end
 end
 
 redef class Player
-       redef var sprite = new PlayerSprite(app.player_textures[1], center, app.player_textures, 0.08) is lazy
+       redef var sprite = new Sprite(app.running_animation.frames.last, center) is lazy
        init do sprite.scale = width/sprite.texture.width * 2.0
 
+       # Update current animation
+       fun animate_move
+       do
+               if moving == 0.0 then
+                       sprite.animate_stop
+               else sprite.animate(app.running_animation, -1.0)
+       end
+
        redef fun update(dt, world)
        do
                super
@@ -562,7 +574,7 @@ redef class Player
                end
 
                # Display respawn instructions
-               app.ui_sprites.add new Sprite(app.texts_sheet.respawn, app.ui_camera.center)
+               app.ui_sprites.add new Sprite(app.texts_sheet.respawn, app.ui_camera.center.offset(0.0, 0.0, 0.0))
        end
 end
 
@@ -612,60 +624,12 @@ redef class World
                super
 
                # Particles
-               app.explosions.add(center, 8192.0 * force, 0.3)
-               for i in (4.0*force).to_i.times do
+               var range = 0.5 * force
+               app.explosions.add(center, 4096.0 * force, 0.3)
+               for i in (2.0*force).to_i.times do
                        app.explosions.add(
-                               new Point3d[Float](center.x & force, center.y & force/2.0, center.z & force),
-                               (4096.0 & 2048.0) * force, 0.3 & 0.3, 0.5.rand)
-               end
-       end
-end
-
-redef class Int
-       # Pad a number with `0`s on the left side to reach `size` digits
-       private fun pad(size: Int): String
-       do
-               var s = to_s
-               var d = size - s.length
-               if d > 0 then s = "0"*d + s
-               return s
-       end
-end
-
-# Special `Sprite` for the player character which is animated
-class PlayerSprite
-       super Sprite
-
-       # Animation of the running character
-       var running_animation: Array[Texture]
-
-       # Seconds per frame of the animations
-       var time_per_frame: Float
-
-       # Currently playing animation
-       private var current_animation: nullable Array[Texture] = null
-
-       # Second at witch `current_animation` started
-       private var anim_ot = 0.0
-
-       # Start the running animation
-       fun start_running
-       do
-               anim_ot = app.world.t
-               current_animation = running_animation
-       end
-
-       # Stop the running animation
-       fun stop_running do current_animation = null
-
-       # Update `texture` from `current_animation`
-       fun update
-       do
-               var anim = current_animation
-               if anim != null then
-                       var dt = app.world.t - anim_ot
-                       var i = (dt / time_per_frame).to_i+2
-                       texture = anim.modulo(i)
+                               new Point3d[Float](center.x & range, center.y & range, center.z & range),
+                               (2048.0 & 1024.0) * force, 0.3 & 0.3, 0.5.rand)
                end
        end
 end
@@ -722,8 +686,8 @@ redef class SmokeProgram
                gl_PointSize = scale / gl_Position.z * (pt+0.1);
 
                if (pt < 0.1)
-                       v_color.a = pt / 0.1;
+                       v_color *= pt / 0.1;
                else
-                       v_color.a = 1.0 - pt*0.9;
+                       v_color *= 1.0 - pt*0.9;
        """
 end