lightsparks.monkey2 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. Namespace myapp
  2. #Import "<std>"
  3. #Import "<mojo>"
  4. #Import "Slate Tiles II_D.png"
  5. #Import "Slate Tiles II_N.png"
  6. #Import "Slate Tiles II_S.png"
  7. #Import "pointlight_light.png"
  8. Using std..
  9. Using mojo..
  10. Class Spark
  11. Field x:Float
  12. Field y:Float
  13. Field vx:Float
  14. Field vy:Float
  15. Field light:Image
  16. Field color:Color
  17. Method New( x:Float,y:Float,light:Image )
  18. Self.x=x
  19. Self.y=y
  20. Self.light=light
  21. Self.color=New Color( Rnd(),Rnd()/2,Rnd()/4,1 )
  22. Local an:=Rnd() * TwoPi
  23. Local r:=Rnd( 1,5 )
  24. Self.vx=Cos( an ) * r
  25. Self.vy=Sin( an ) * r
  26. End
  27. Method Render( canvas:Canvas )
  28. vy+=.1
  29. x+=vx
  30. y+=vy
  31. canvas.Color=color
  32. canvas.AddLight( light,x,y )
  33. End
  34. End
  35. Class MyWindow Extends Window
  36. Field _floor:Image
  37. Field _light:Image
  38. Field _spark:Image
  39. Field _sparks:=New Stack<Spark>
  40. Method New()
  41. ClearColor=Color.Black
  42. _floor=Image.LoadBump( "asset::Slate Tiles II_D.png","asset::Slate Tiles II_N.png","asset::Slate Tiles II_S.png",.5 )
  43. _light=Image.LoadLight( "asset::pointlight_light.png" )
  44. _light.Handle=New Vec2f( .5,.5 )
  45. _light.Scale=New Vec2f( 3,3 )
  46. _spark=New Image( _light,_light.Rect )
  47. _spark.Scale=New Vec2f( .5,.5 )
  48. End
  49. Method OnRender( canvas:Canvas ) Override
  50. App.RequestRender()
  51. canvas.BeginLighting()
  52. If Mouse.ButtonDown( MouseButton.Left )
  53. ' For Local i:=0 Until 50
  54. _sparks.Push( New Spark( Mouse.X,Mouse.Y,_spark ) )
  55. ' Next
  56. Endif
  57. Local put:=0
  58. For Local spark:=Eachin _sparks
  59. spark.Render( canvas )
  60. If spark.y>Height+_spark.Radius Continue
  61. _sparks[put]=spark
  62. put+=1
  63. Next
  64. _sparks.Resize( put )
  65. canvas.Color=Color.White
  66. canvas.AddLight( _light,Mouse.X,Mouse.Y )
  67. For Local x:=0 Until Width Step _floor.Width
  68. For Local y:=0 Until Height Step _floor.Height
  69. canvas.DrawImage( _floor,x,y )
  70. Next
  71. Next
  72. canvas.EndLighting()
  73. canvas.DrawText( Round( App.FPS ),Width/2,0,.5,0 )
  74. GCCollect()
  75. End
  76. End
  77. Function Main()
  78. New AppInstance
  79. New MyWindow
  80. App.Run()
  81. End