1. package
  2. {
  3. import away3d.containers.ObjectContainer3D;
  4.  
  5. import away3d.sprites.DofSprite2D;
  6. import away3d.core.utils.Cast;
  7. import away3d.core.utils.DofCache;
  8.  
  9. import mx.collections.ArrayCollection;
  10.  
  11. import flash.display.BlendMode;
  12.  
  13. public class ApplicationManager extends BaseObject
  14. {
  15. protected static const ELEMENT_COUNT:int = 50;
  16. protected static const ELEMENT_SPEED:Number = 5;
  17. protected var electrons:ArrayCollection = new ArrayCollection();
  18.  
  19. public function ApplicationManager()
  20. {
  21. super();
  22. }
  23.  
  24. public function startupApplicationManager(engineManager:EngineManager):ApplicationManager
  25. {
  26. super.startupBaseObject(engineManager);
  27.  
  28. this.engineManager.cam.z = -1500;
  29.  
  30. DofCache.aperture = 100;
  31. DofCache.usedof = true;
  32. DofCache.maxblur = 50;
  33. DofCache.focus = 1500;
  34.  
  35. for (var i:int=0; i < ELEMENT_COUNT; ++i)
  36. {
  37. var proton:DofSprite2D = new DofSprite2D(Cast.bitmap(ResourceManager.Red));
  38. proton.x = 180;
  39. proton.ownCanvas = true;
  40. proton.blendMode = BlendMode.DIFFERENCE;
  41.  
  42. var neutron:DofSprite2D = new DofSprite2D(Cast.bitmap(ResourceManager.Blue));
  43. neutron.x = -180;
  44. neutron.ownCanvas = true;
  45. neutron.blendMode = BlendMode.DIFFERENCE;
  46.  
  47. var nucleicContainer:ObjectContainer3D = new ObjectContainer3D(proton, neutron);
  48. nucleicContainer.rotationX = i*360/ELEMENT_COUNT;
  49. nucleicContainer.rotationY = i*200/6;
  50. nucleicContainer.rotationZ = i*180/ELEMENT_COUNT;
  51.  
  52. new MeshObject().startupObject3DMeshObject(this.engineManager, nucleicContainer);
  53.  
  54. var electron:DofSprite2D = new DofSprite2D(Cast.bitmap(ResourceManager.Green));
  55. electron.y = 500;
  56. electron.ownCanvas = true;
  57. electron.blendMode = BlendMode.DIFFERENCE;
  58.  
  59. var electronContainer:ObjectContainer3D = new ObjectContainer3D(electron);
  60. electronContainer.rotationX = i*360/ELEMENT_COUNT;
  61. electronContainer.rotationY = i*360/6;
  62. electronContainer.rotationZ = i*180/ELEMENT_COUNT;
  63.  
  64. this.electrons.addItem(electronContainer);
  65.  
  66. new MeshObject().startupObject3DMeshObject(this.engineManager, electronContainer);
  67. }
  68.  
  69. return this;
  70. }
  71.  
  72. public override function shutdown():void
  73. {
  74. super.shutdown();
  75. }
  76.  
  77. public override function enterFrame(dt:Number):void
  78. {
  79. for each (var electronContainer:ObjectContainer3D in electrons)
  80. electronContainer.rotationX += ELEMENT_SPEED;
  81. }
  82.  
  83. }
  84. }