| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- ' Copyleft notice: All code created by Leo Santos (www.leosantos.com)
- ' Feel free to use it in any form, but please include a credit.
- ' More importantly, do not claim to have created any of it, unless you modify it substantially.
- ' Thanks!
- #Import "gamegraphics/gamegraphics"
- #Import "src/renderwindow"
- #Import "src/actor"
- #Import "src/player"
- #Import "src/bullet"
- #Import "src/orb"
- #Import "fonts/classic_sans.ttf"
- #Import "images/grid.png"
- #Import "images/starfield.png"
- #Import "images/hero.png"
- #Import "images/jet.png"
- #Import "images/bullet.png"
- #Import "images/orbSmall.png"
- Using mojo..
- Using std..
- 'To do: move out of collision
- Class Game Extends RenderWindow
- Global scrollSpeed := 5.0
- Global scrollLimitY:Double = 60
- Global cameraSpeed := 1.0
-
- Field hero:Player
- Field bg:Background
- Field bgGrid:Background
- Field smallFont:Font
- Field colorTint:= New Color( 0.25, 1.0, 0.5 )
-
- Method New()
- Super.New( "Test", 420, 240, False, True ) 'name, width, height, filterTextures, renderToTexture
- Layout = "letterbox-int"
- End
-
- Method OnStart() Override
- Actor.camera = camera
-
- 'Load sprites & font
- canvas.Font = Font.Load( "asset::classic_sans.ttf", 10 )
- bg = New Background( "asset::starfield.png" )
- bgGrid = New Background( "asset::grid.png" )
-
- Local heroSprite := New Sprite( "asset::hero.png", 3, 32, 32, False )
- heroSprite.AddAnimationClip( "idle", New Int[]( 0 ) )
- heroSprite.AddAnimationClip( "up", New Int[]( 1 ) )
- heroSprite.AddAnimationClip( "down", New Int[]( 2 ) )
-
- Local jetSprite := New Sprite( "asset::jet.png", 2, 16, 16, False )
- jetSprite.AddAnimationClip( "idle", New Int[]( 0,1 ) )
- jetSprite.frameRate = 30
-
- Local bulletSprite := New Sprite( "asset::bullet.png", 5, 32, 32, False )
- bulletSprite.AddAnimationClip( "idle", New Int[] ( 0 ) )
- bulletSprite.AddAnimationClip( "hit", New Int[] ( 1,2,3,4 ), False )
- bulletSprite.frameRate = 15
-
- Local orbSprite := New Sprite( "asset::orbSmall.png", 5, 16, 16, False )
- orbSprite.AddAnimationClip( "idle", New Int[] ( 0,1,2,3 ) )
-
- 'Create player sprite
- hero = New Player( heroSprite )
-
- 'Create reusable enemy orbs
- SeedRnd( 12345 )
- Local offset:= 0
- For Local n := 0 Until 20
- Local neworb := New Orb( orbSprite )
- neworb.Reset()
- neworb.position.X += offset
- offset += 16
- Next
-
- 'Pool of 10 reusable bullets
- For Local n := 0 Until 10
- Local b := New Bullet( bulletSprite )
- Actor.bulletPool.Push( b )
- Next
- Bullet.player = hero
- Bullet.cullDistance = Width
-
- canvas.TextureFilteringEnabled = False 'New feature in v009
- End
-
-
- Method OnUpdate() Override
- 'camera scrolls up & down a bit, 90's shooter style
- camera.X += scrollSpeed
- If Keyboard.KeyDown( Key.Up )
- camera.Y -= cameraSpeed
- Else If Keyboard.KeyDown( Key.Down )
- camera.Y += cameraSpeed
- End
- camera.Y = Clamp( camera.Y, -scrollLimitY, scrollLimitY )
-
- 'Update all actors
- Actor.UpdateAll()
-
- 'Display debug info
- If Keyboard.KeyHit( Key.D ) Then debug = Not debug
- End
-
-
- Method OnDraw() Override
- canvas.Color = colorTint
- 'Draw bg objects in three layers with different parallax
- canvas.Alpha = 1.0
- Parallax = 0.1
- bg.Draw( canvas, 0, 0, 1.0, CameraRect )
-
- canvas.Alpha = 0.5
- canvas.DrawText( "Monkey2 Side Scrolling Demo by Leo Santos. Press space to shoot!", 260, 100 )
-
- canvas.Alpha = 0.25
- Parallax = 0.25
- bgGrid.Draw( canvas, 32, 32, 1.0, CameraRect )
-
- canvas.Alpha = 0.5
- Parallax = 1.0
- bgGrid.Draw( canvas, 0, 0, 1.0, CameraRect )
-
- 'Draw all actors
- canvas.Alpha = 1.0
- canvas.Color= Color.White
- Actor.DrawAll( canvas )
- End
- End
- Function Main()
- New AppInstance
- New Game()
- App.Run()
- End
|