Advertisement
Guest User

Untitled

a guest
May 28th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.65 KB | None | 0 0
  1. package com.createflow
  2. {
  3. import com.gaiaframework.templates.AbstractPage;
  4. import com.gaiaframework.events.*;
  5. import com.gaiaframework.debug.*;
  6. import com.gaiaframework.api.*;
  7. import flash.display.*;
  8. import flash.events.*;
  9. import flash.geom.*;
  10. import flash.net.*;
  11. import flash.text.*;
  12. import com.greensock.*;
  13. import com.greensock.easing.*
  14. import com.greensock.plugins.*;
  15. import org.papervision3d.scenes.*;
  16. import org.papervision3d.cameras.*;
  17. import org.papervision3d.objects.*;
  18. import org.papervision3d.objects.special.*;
  19. import org.papervision3d.objects.primitives.*;
  20. import org.papervision3d.materials.*;
  21. import org.papervision3d.materials.special.*;
  22. import org.papervision3d.materials.shaders.*;
  23. import org.papervision3d.materials.utils.*;
  24. import org.papervision3d.lights.*;
  25. import org.papervision3d.render.*;
  26. import org.papervision3d.view.*;
  27. import org.papervision3d.events.*;
  28. import org.papervision3d.core.math.*;
  29. import org.papervision3d.core.utils.*;
  30. import org.papervision3d.core.utils.virtualmouse.VirtualMouse;
  31.  
  32. public class PortfolioPage extends AbstractPage
  33. {
  34. public var viewport = Gaia.api.getPage("index/nav").content.viewport;
  35. public var folio = Gaia.api.getPage("index").content.assets.portfolioAssets;
  36. public var contentArea:Viewport3D = new Viewport3D(0, 0, true, true);
  37. public var renderer:QuadrantRenderEngine = new QuadrantRenderEngine(QuadrantRenderEngine.CORRECT_Z_FILTER);
  38. public var scene:Scene3D = new Scene3D;
  39. public var camera:CameraWithSlerp = new CameraWithSlerp();
  40. private var tweenTime:Number = 1;
  41. private var cameraStart:DisplayObject3D = new DisplayObject3D();
  42. private var cameraTarget:DisplayObject3D = new DisplayObject3D();
  43. private var startQuaternion:Quaternion = null;
  44. private var endQuaternion:Quaternion = null;
  45. private var currentQuaternion:Quaternion = null;
  46. private var openImage = null;
  47. private var openProject = null;
  48. private var posX:Number = 0;
  49.  
  50. public function PortfolioPage()
  51. {
  52. super();
  53. alpha = 0;
  54. //new Scaffold(this);
  55. TweenPlugin.activate([MotionBlurPlugin]);
  56. }
  57.  
  58. override public function transitionIn():void
  59. {
  60. super.transitionIn();
  61. TweenMax.to(this, 0.3, {alpha:1, onComplete:transitionInComplete});
  62. TweenMax.to(viewport, 1, { motionBlur : true, y : 0, ease : Expo.easeInOut, onComplete : buildPanel });
  63. Gaia.api.getPage("index/nav").removeEventListener(Event.ENTER_FRAME, Gaia.api.getPage("index/nav").content.resizeHandler);
  64. }
  65.  
  66. override public function transitionOut():void
  67. {
  68. super.transitionOut();
  69. TweenMax.to(this, 0.3, {alpha:0, onComplete:transitionOutComplete});
  70. TweenMax.to(viewport, 1, { motionBlur : true, y : (stage.stageHeight >> 1) - (viewport.height >> 1), ease : Expo.easeInOut });
  71. Gaia.api.getPage("index/nav").addEventListener(Event.ENTER_FRAME, Gaia.api.getPage("index/nav").content.resizeHandler);
  72. }
  73.  
  74. // ==================================== //
  75. // Create Text Fields
  76. // ==================================== //
  77.  
  78. public function createText(txt:String, size:Number, x:Number=0, y:Number=0, lead:Number = 0, wrap:Boolean = false):TextField
  79. {
  80. var txtField:TextField = new TextField;
  81. txtField.selectable = false;
  82. txtField.text = txt;
  83. txtField.embedFonts = true;
  84. txtField.setTextFormat(new TextFormat((new Anivers as Font).fontName, size, 0xFFFFFF, null, null, null, null, null, null, null, null, null, lead));
  85. txtField.autoSize = TextFieldAutoSize.LEFT;
  86. txtField.antiAliasType = AntiAliasType.ADVANCED;
  87. txtField.wordWrap = wrap;
  88. txtField.x = x;
  89. txtField.y = y;
  90. return txtField;
  91. }
  92.  
  93. // ==================================== //
  94.  
  95. public function buildPanel():void
  96. {
  97. var startProject:String = 'project_0';
  98. var groupWidth:Number = 400;
  99. var groupHeight:Number = 300;
  100. var groupSpacing:Number = 100;
  101. var planeDepth:Number = 30;
  102. var imageHeight:Number = 100;
  103. var titleHeight:Number = 50;
  104. var titleMargin:Number = 5;
  105. var bodyMargin:Number = 15;
  106. var i:Number = 0;
  107. var plane:Plane;
  108. var material:MovieMaterial;
  109. var bodyMaterial:MovieMaterial;
  110. var transMaterial:MovieMaterial;
  111. var titleMaterial:MovieMaterial;
  112. var contPlane:DisplayObject3D;
  113. var titlePlane:Plane;
  114. var bodyPlane:Plane;
  115. var txtField:TextField;
  116. var contTitleName:Sprite;
  117. var contBodyName:Sprite;
  118. var current:Number;
  119.  
  120. // ==================================== //
  121.  
  122. for each(var project in folio.xml.project)
  123. {
  124. /* reset "current" pointer */
  125. current = 0;
  126.  
  127. /* create a new new container plane with transparent movie material */
  128. transMaterial = new MovieMaterial(new MovieClip, true);
  129. transMaterial.interactive = true;
  130. contPlane = new Plane(transMaterial, groupWidth, groupHeight);
  131. contPlane.useOwnContainer = true;
  132. contPlane.name = 'project_' + i;
  133.  
  134. if(project.@start == 'true')
  135. {
  136. startProject = contPlane.name;
  137. }
  138.  
  139. /* container click handler */
  140. contPlane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, containerClick);
  141.  
  142. /* set x-coord of container plane */
  143. contPlane.x = posX;
  144.  
  145. /* generate x-coord */
  146. posX += groupWidth + groupSpacing;
  147.  
  148. /* create title plane */
  149. contTitleName = new Sprite;
  150. contTitleName.graphics.beginFill(0x000000, 0);
  151. contTitleName.graphics.drawRect(0, 0, groupWidth, titleHeight);
  152. contTitleName.graphics.endFill();
  153. var clientText:TextField = createText('client /', 13);
  154. contTitleName.addChild(clientText);
  155. contTitleName.addChild(createText(project.@id, 30, 0, 14));
  156. titleMaterial = new MovieMaterial(contTitleName, true);
  157. titlePlane = new Plane(titleMaterial, groupWidth, titleHeight);
  158. titlePlane.y = (groupHeight * 0.5) - (titleHeight * 0.5);
  159. contPlane.addChild(titlePlane);
  160.  
  161. /* create thumbnail count plane */
  162. var lastWidth:Number = groupWidth;
  163. for(var thumbCount:int=project.asset.length(); thumbCount > 0; thumbCount--) {
  164. var thumbTextField:TextField = createText(thumbCount.toString(), 13);
  165. var thumbCountSprite:Sprite = new Sprite;
  166. with(thumbCountSprite.graphics)
  167. {
  168. beginFill(0x000000, 0);
  169. drawRect(0, 0, thumbTextField.width, thumbTextField.height);
  170. endFill();
  171. }
  172. thumbTextField.y = -(groupHeight) + (thumbTextField.height);
  173. var thumbTextSpacing:Number = 25;
  174. thumbTextField.x = lastWidth - thumbTextField.width - thumbTextSpacing;
  175. lastWidth -= thumbTextField.width + thumbTextSpacing;
  176. thumbCountSprite.addChild(thumbTextField);
  177. var thumbCountMaterial:MovieMaterial = new MovieMaterial(thumbCountSprite, true);
  178. thumbCountMaterial.interactive = true;
  179. var thumbCountPlane:Plane = new Plane(thumbCountMaterial, thumbCountSprite.width, thumbCountSprite.height);
  180. contPlane.addChild(thumbCountPlane);
  181. /* thumbnailCount.x = lastWidth - thumbnailCount.width;
  182. lastWidth -= thumbnailCount.width;*/
  183. }
  184. /* create description plane */
  185. contBodyName = new Sprite;
  186. txtField = createText(project.body, 13, 0, 0, 0, true);
  187. txtField.width = groupWidth;
  188. contBodyName.graphics.beginFill(0x000000, 0);
  189. contBodyName.graphics.drawRect(0, 0, groupWidth, txtField.height);
  190. contBodyName.graphics.endFill();
  191. contBodyName.addChild(txtField);
  192. bodyMaterial = new MovieMaterial(contBodyName, true);
  193. bodyMaterial.animated = true;
  194. bodyPlane = new Plane(bodyMaterial, groupWidth, contBodyName.height);
  195. bodyPlane.name = contPlane.name + "_body";
  196. bodyPlane.useOwnContainer = true;
  197. bodyPlane.extra = { inner : contBodyName };
  198. bodyPlane.y = ((groupHeight * 0.5) - (txtField.height * 0.5)) - (imageHeight + titleHeight + bodyMargin);
  199. bodyPlane.extra.inner.alpha = 0;
  200. contPlane.addChild(bodyPlane);
  201.  
  202. for each(var xmlImg in project.asset)
  203. {
  204. /* get image from asset list */
  205. var img = assets[xmlImg.@id];
  206.  
  207. /* create a material out of the bitmap data */
  208. material = new MovieMaterial(img.content, true);
  209. material.doubleSided = true;
  210. material.interactive = true;
  211. material.animated = true;
  212. material.rect = new Rectangle(0, 0, groupWidth, imageHeight);
  213.  
  214. /* create new plane */
  215. plane = new Plane(material, groupWidth, imageHeight);
  216. plane.useOwnContainer = true;
  217. plane.extra = { inner : img };
  218.  
  219. if(current > 0)
  220. {
  221. plane.extra.inner.alpha = 0.2;
  222. }
  223.  
  224. /* set the planes coords */
  225. plane.z = current * planeDepth + (current == 0 ? 1 : 0);
  226. plane.y = ((groupHeight * 0.5) - (imageHeight * 0.5)) - (titleHeight + titleMargin) + (current > 0 ? plane.z >> 2 : 0);
  227.  
  228. /* add plane to container */
  229. contPlane.addChild(plane);
  230.  
  231. /* increment "current" pointer */
  232. current++;
  233. }
  234.  
  235. /* add container plane to scene */
  236. scene.addChild(contPlane);
  237. i++;
  238. }
  239.  
  240. scene.addChild(cameraStart);
  241. addChild(contentArea);
  242. setupBackground();
  243.  
  244. contentArea.buttonMode = true;
  245. contentArea.interactive = true;
  246.  
  247. camera.z = cameraStart.z = -(camera.zoom * camera.focus);
  248. camera.y = cameraStart.y = (groupHeight >> 1) - (viewport.height >> 1);
  249.  
  250. addEventListener(Event.ENTER_FRAME, render);
  251. scene.getChildByName(startProject).dispatchEvent(new InteractiveScene3DEvent(InteractiveScene3DEvent.OBJECT_CLICK));
  252. }
  253.  
  254. public function containerClick(e:InteractiveScene3DEvent):void
  255. {
  256. var plane:Plane = Plane(e.target);
  257. var body:DisplayObject = plane.getChildByName(plane.name + "_body").extra.inner;
  258.  
  259. if(openProject != null)
  260. {
  261. var oldBody:DisplayObject = openProject.getChildByName(openProject.name + "_body").extra.inner;
  262. TweenMax.allTo([oldBody], tweenTime / 2, { autoAlpha : 0 });
  263. }
  264.  
  265. TweenMax.allTo([body], 1, { alpha : 1 });
  266.  
  267. openProject = plane;
  268.  
  269. cameraTarget.copyTransform(plane);
  270. cameraTarget.moveBackward(camera.zoom * camera.focus);
  271. createTween(cameraTarget, null);
  272. }
  273.  
  274. public function render(e:Event):void
  275. {
  276. renderer.renderScene(scene, camera, contentArea);
  277. }
  278.  
  279. private function loadNewMaterial(type:String, plane:Object):void
  280. {
  281. var scale:Number;
  282. var pHeight:Number = plane.height;
  283. var loader:Loader = new Loader();
  284. var loadProgress = function(e:ProgressEvent):void {};
  285. var loadComplete = function(e:Event):void {
  286. var material = new MovieMaterial(loader);
  287. material.doubleSided = true;
  288. material.interactive = true;
  289. material.animated = true;
  290. plane.material = material;
  291.  
  292. if(type == "full")
  293. {
  294. var tscale:Number = (stage.stageHeight - viewport.height) / pHeight;
  295. var scale:Number = (stage.stageHeight - viewport.height) / loader.height;
  296.  
  297. scale = tscale - scale <= 0 ? 1 : tscale - scale;
  298.  
  299. TweenMax.to(plane, 1, { scaleX : scale, scaleY : scale, ease : Expo.easeOut });
  300. }
  301. };
  302.  
  303. loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
  304. loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
  305.  
  306. if(type == 'thumb')
  307. {
  308. loader.load(new URLRequest(plane.origMaterial));
  309. }
  310. else
  311. {
  312. loader.load(new URLRequest(plane.newMaterial));
  313. }
  314. }
  315.  
  316. private function createTween(displayObject3d:DisplayObject3D, target = null):void
  317. {
  318. var tweenObject:Object = {};
  319. tweenObject.x = displayObject3d.x;
  320. tweenObject.y = displayObject3d.y + (viewport.height >> 1);
  321. tweenObject.z = displayObject3d.z;
  322. tweenObject.ease = Expo.easeInOut;
  323. tweenObject.slerp = 1;
  324. tweenObject.onUpdate = camera_updateCallback;
  325. tweenObject.onComplete = function() {
  326. if(target != null)
  327. {
  328. loadNewMaterial('full', target);
  329. }
  330. }
  331.  
  332. camera.slerp = 0;
  333.  
  334. startQuaternion = Quaternion.createFromMatrix(camera.transform);
  335. endQuaternion = Quaternion.createFromMatrix(displayObject3d.transform);
  336.  
  337. TweenMax.to(camera, tweenTime, tweenObject);
  338. }
  339.  
  340. private function plane_objectClickHandler(e:InteractiveScene3DEvent):void
  341. {
  342. var plane:Plane = Plane(e.target);
  343. plane.useOwnContainer = true;
  344.  
  345. if(plane != openImage)
  346. {
  347. if(openImage != null)
  348. {
  349. TweenMax.to(openImage, tweenTime / 2, { alpha : .5, scaleX : 1, scaleY : 1, onComplete : loadNewMaterial, onCompleteParams : ['thumb', e.target] });
  350. }
  351. scene.addChild(plane);
  352. TweenMax.to(plane, tweenTime / 2, { alpha : 1 });
  353. openImage = plane;
  354. cameraTarget.copyTransform(plane);
  355. cameraTarget.moveBackward(camera.zoom * camera.focus);
  356. createTween(cameraTarget, e.target);
  357. }
  358. else
  359. {
  360. backgroundSprite_clickHandler(null);
  361. }
  362. }
  363.  
  364. private function plane_objectOverHandler(e:InteractiveScene3DEvent):void
  365. {
  366. var plane:Plane = Plane(e.target);
  367. plane.useOwnContainer = true;
  368. if(plane != openImage)
  369. {
  370. TweenMax.to(plane, tweenTime / 3, { alpha : 1 });
  371. }
  372. }
  373.  
  374. private function plane_objectOutHandler(e:InteractiveScene3DEvent):void
  375. {
  376. var plane:Plane = Plane(e.target);
  377. plane.useOwnContainer = true;
  378. if(plane != openImage)
  379. {
  380. TweenMax.to(plane, tweenTime / 3, { alpha : .5 });
  381. }
  382. }
  383.  
  384. private function setupBackground():void
  385. {
  386. var backgroundSprite:Sprite = new Sprite();
  387.  
  388. backgroundSprite.graphics.beginFill(0x000000);
  389. backgroundSprite.graphics.drawRect(0, 0, width, height);
  390. backgroundSprite.graphics.endFill();
  391.  
  392. addChildAt(backgroundSprite, getChildIndex(contentArea));
  393.  
  394. backgroundSprite.addEventListener(MouseEvent.CLICK, backgroundSprite_clickHandler);
  395. }
  396.  
  397. private function backgroundSprite_clickHandler(event:MouseEvent):void
  398. {
  399. if(openImage != null)
  400. {
  401. TweenMax.to(openImage, tweenTime / 2, { alpha : .5, scaleX : 1, scaleY : 1, onComplete : loadNewMaterial, onCompleteParams : ['thumb', openImage] });
  402. }
  403. openImage = null;
  404. createTween(cameraStart);
  405. }
  406.  
  407. private function camera_updateCallback():void
  408. {
  409. currentQuaternion = Quaternion.slerp(startQuaternion, endQuaternion, camera.slerp);
  410. camera.transform.copy3x3(currentQuaternion.matrix);
  411. }
  412. }
  413. }
  414.  
  415. import org.papervision3d.cameras.Camera3D;
  416. class CameraWithSlerp extends Camera3D
  417. {
  418. public var slerp:Number = 0;
  419. }
  420.  
  421. import org.papervision3d.objects.primitives.*;
  422. class PlaneWithOrigin extends Plane
  423. {
  424. public var width:Number = 0;
  425. public var height:Number = 0;
  426. public var origMaterial;
  427. public var newMaterial;
  428. public function PlaneWithOrigin(material:*, width:Number = 0, height:Number = 0, segw:Number = 0, segh:Number = 0):void
  429. {
  430. super(material, width, height, segw, segh);
  431. width = width;
  432. height = height;
  433. }
  434. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement