Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.createflow
- {
- import com.gaiaframework.templates.AbstractPage;
- import com.gaiaframework.events.*;
- import com.gaiaframework.debug.*;
- import com.gaiaframework.api.*;
- import flash.display.*;
- import flash.events.*;
- import flash.geom.*;
- import flash.net.*;
- import flash.text.*;
- import com.greensock.*;
- import com.greensock.easing.*
- import com.greensock.plugins.*;
- import org.papervision3d.scenes.*;
- import org.papervision3d.cameras.*;
- import org.papervision3d.objects.*;
- import org.papervision3d.objects.special.*;
- import org.papervision3d.objects.primitives.*;
- import org.papervision3d.materials.*;
- import org.papervision3d.materials.special.*;
- import org.papervision3d.materials.shaders.*;
- import org.papervision3d.materials.utils.*;
- import org.papervision3d.lights.*;
- import org.papervision3d.render.*;
- import org.papervision3d.view.*;
- import org.papervision3d.events.*;
- import org.papervision3d.core.math.*;
- import org.papervision3d.core.utils.*;
- import org.papervision3d.core.utils.virtualmouse.VirtualMouse;
- public class PortfolioPage extends AbstractPage
- {
- public var viewport = Gaia.api.getPage("index/nav").content.viewport;
- public var folio = Gaia.api.getPage("index").content.assets.portfolioAssets;
- public var contentArea:Viewport3D = new Viewport3D(0, 0, true, true);
- public var renderer:QuadrantRenderEngine = new QuadrantRenderEngine(QuadrantRenderEngine.CORRECT_Z_FILTER);
- public var scene:Scene3D = new Scene3D;
- public var camera:CameraWithSlerp = new CameraWithSlerp();
- private var tweenTime:Number = 1;
- private var cameraStart:DisplayObject3D = new DisplayObject3D();
- private var cameraTarget:DisplayObject3D = new DisplayObject3D();
- private var startQuaternion:Quaternion = null;
- private var endQuaternion:Quaternion = null;
- private var currentQuaternion:Quaternion = null;
- private var openImage = null;
- private var openProject = null;
- private var posX:Number = 0;
- public function PortfolioPage()
- {
- super();
- alpha = 0;
- //new Scaffold(this);
- TweenPlugin.activate([MotionBlurPlugin]);
- }
- override public function transitionIn():void
- {
- super.transitionIn();
- TweenMax.to(this, 0.3, {alpha:1, onComplete:transitionInComplete});
- TweenMax.to(viewport, 1, { motionBlur : true, y : 0, ease : Expo.easeInOut, onComplete : buildPanel });
- Gaia.api.getPage("index/nav").removeEventListener(Event.ENTER_FRAME, Gaia.api.getPage("index/nav").content.resizeHandler);
- }
- override public function transitionOut():void
- {
- super.transitionOut();
- TweenMax.to(this, 0.3, {alpha:0, onComplete:transitionOutComplete});
- TweenMax.to(viewport, 1, { motionBlur : true, y : (stage.stageHeight >> 1) - (viewport.height >> 1), ease : Expo.easeInOut });
- Gaia.api.getPage("index/nav").addEventListener(Event.ENTER_FRAME, Gaia.api.getPage("index/nav").content.resizeHandler);
- }
- // ==================================== //
- // Create Text Fields
- // ==================================== //
- public function createText(txt:String, size:Number, x:Number=0, y:Number=0, lead:Number = 0, wrap:Boolean = false):TextField
- {
- var txtField:TextField = new TextField;
- txtField.selectable = false;
- txtField.text = txt;
- txtField.embedFonts = true;
- txtField.setTextFormat(new TextFormat((new Anivers as Font).fontName, size, 0xFFFFFF, null, null, null, null, null, null, null, null, null, lead));
- txtField.autoSize = TextFieldAutoSize.LEFT;
- txtField.antiAliasType = AntiAliasType.ADVANCED;
- txtField.wordWrap = wrap;
- txtField.x = x;
- txtField.y = y;
- return txtField;
- }
- // ==================================== //
- public function buildPanel():void
- {
- var startProject:String = 'project_0';
- var groupWidth:Number = 400;
- var groupHeight:Number = 300;
- var groupSpacing:Number = 100;
- var planeDepth:Number = 30;
- var imageHeight:Number = 100;
- var titleHeight:Number = 50;
- var titleMargin:Number = 5;
- var bodyMargin:Number = 15;
- var i:Number = 0;
- var plane:Plane;
- var material:MovieMaterial;
- var bodyMaterial:MovieMaterial;
- var transMaterial:MovieMaterial;
- var titleMaterial:MovieMaterial;
- var contPlane:DisplayObject3D;
- var titlePlane:Plane;
- var bodyPlane:Plane;
- var txtField:TextField;
- var contTitleName:Sprite;
- var contBodyName:Sprite;
- var current:Number;
- // ==================================== //
- for each(var project in folio.xml.project)
- {
- /* reset "current" pointer */
- current = 0;
- /* create a new new container plane with transparent movie material */
- transMaterial = new MovieMaterial(new MovieClip, true);
- transMaterial.interactive = true;
- contPlane = new Plane(transMaterial, groupWidth, groupHeight);
- contPlane.useOwnContainer = true;
- contPlane.name = 'project_' + i;
- if(project.@start == 'true')
- {
- startProject = contPlane.name;
- }
- /* container click handler */
- contPlane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, containerClick);
- /* set x-coord of container plane */
- contPlane.x = posX;
- /* generate x-coord */
- posX += groupWidth + groupSpacing;
- /* create title plane */
- contTitleName = new Sprite;
- contTitleName.graphics.beginFill(0x000000, 0);
- contTitleName.graphics.drawRect(0, 0, groupWidth, titleHeight);
- contTitleName.graphics.endFill();
- var clientText:TextField = createText('client /', 13);
- contTitleName.addChild(clientText);
- contTitleName.addChild(createText(project.@id, 30, 0, 14));
- titleMaterial = new MovieMaterial(contTitleName, true);
- titlePlane = new Plane(titleMaterial, groupWidth, titleHeight);
- titlePlane.y = (groupHeight * 0.5) - (titleHeight * 0.5);
- contPlane.addChild(titlePlane);
- /* create thumbnail count plane */
- var lastWidth:Number = groupWidth;
- for(var thumbCount:int=project.asset.length(); thumbCount > 0; thumbCount--) {
- var thumbTextField:TextField = createText(thumbCount.toString(), 13);
- var thumbCountSprite:Sprite = new Sprite;
- with(thumbCountSprite.graphics)
- {
- beginFill(0x000000, 0);
- drawRect(0, 0, thumbTextField.width, thumbTextField.height);
- endFill();
- }
- thumbTextField.y = -(groupHeight) + (thumbTextField.height);
- var thumbTextSpacing:Number = 25;
- thumbTextField.x = lastWidth - thumbTextField.width - thumbTextSpacing;
- lastWidth -= thumbTextField.width + thumbTextSpacing;
- thumbCountSprite.addChild(thumbTextField);
- var thumbCountMaterial:MovieMaterial = new MovieMaterial(thumbCountSprite, true);
- thumbCountMaterial.interactive = true;
- var thumbCountPlane:Plane = new Plane(thumbCountMaterial, thumbCountSprite.width, thumbCountSprite.height);
- contPlane.addChild(thumbCountPlane);
- /* thumbnailCount.x = lastWidth - thumbnailCount.width;
- lastWidth -= thumbnailCount.width;*/
- }
- /* create description plane */
- contBodyName = new Sprite;
- txtField = createText(project.body, 13, 0, 0, 0, true);
- txtField.width = groupWidth;
- contBodyName.graphics.beginFill(0x000000, 0);
- contBodyName.graphics.drawRect(0, 0, groupWidth, txtField.height);
- contBodyName.graphics.endFill();
- contBodyName.addChild(txtField);
- bodyMaterial = new MovieMaterial(contBodyName, true);
- bodyMaterial.animated = true;
- bodyPlane = new Plane(bodyMaterial, groupWidth, contBodyName.height);
- bodyPlane.name = contPlane.name + "_body";
- bodyPlane.useOwnContainer = true;
- bodyPlane.extra = { inner : contBodyName };
- bodyPlane.y = ((groupHeight * 0.5) - (txtField.height * 0.5)) - (imageHeight + titleHeight + bodyMargin);
- bodyPlane.extra.inner.alpha = 0;
- contPlane.addChild(bodyPlane);
- for each(var xmlImg in project.asset)
- {
- /* get image from asset list */
- var img = assets[xmlImg.@id];
- /* create a material out of the bitmap data */
- material = new MovieMaterial(img.content, true);
- material.doubleSided = true;
- material.interactive = true;
- material.animated = true;
- material.rect = new Rectangle(0, 0, groupWidth, imageHeight);
- /* create new plane */
- plane = new Plane(material, groupWidth, imageHeight);
- plane.useOwnContainer = true;
- plane.extra = { inner : img };
- if(current > 0)
- {
- plane.extra.inner.alpha = 0.2;
- }
- /* set the planes coords */
- plane.z = current * planeDepth + (current == 0 ? 1 : 0);
- plane.y = ((groupHeight * 0.5) - (imageHeight * 0.5)) - (titleHeight + titleMargin) + (current > 0 ? plane.z >> 2 : 0);
- /* add plane to container */
- contPlane.addChild(plane);
- /* increment "current" pointer */
- current++;
- }
- /* add container plane to scene */
- scene.addChild(contPlane);
- i++;
- }
- scene.addChild(cameraStart);
- addChild(contentArea);
- setupBackground();
- contentArea.buttonMode = true;
- contentArea.interactive = true;
- camera.z = cameraStart.z = -(camera.zoom * camera.focus);
- camera.y = cameraStart.y = (groupHeight >> 1) - (viewport.height >> 1);
- addEventListener(Event.ENTER_FRAME, render);
- scene.getChildByName(startProject).dispatchEvent(new InteractiveScene3DEvent(InteractiveScene3DEvent.OBJECT_CLICK));
- }
- public function containerClick(e:InteractiveScene3DEvent):void
- {
- var plane:Plane = Plane(e.target);
- var body:DisplayObject = plane.getChildByName(plane.name + "_body").extra.inner;
- if(openProject != null)
- {
- var oldBody:DisplayObject = openProject.getChildByName(openProject.name + "_body").extra.inner;
- TweenMax.allTo([oldBody], tweenTime / 2, { autoAlpha : 0 });
- }
- TweenMax.allTo([body], 1, { alpha : 1 });
- openProject = plane;
- cameraTarget.copyTransform(plane);
- cameraTarget.moveBackward(camera.zoom * camera.focus);
- createTween(cameraTarget, null);
- }
- public function render(e:Event):void
- {
- renderer.renderScene(scene, camera, contentArea);
- }
- private function loadNewMaterial(type:String, plane:Object):void
- {
- var scale:Number;
- var pHeight:Number = plane.height;
- var loader:Loader = new Loader();
- var loadProgress = function(e:ProgressEvent):void {};
- var loadComplete = function(e:Event):void {
- var material = new MovieMaterial(loader);
- material.doubleSided = true;
- material.interactive = true;
- material.animated = true;
- plane.material = material;
- if(type == "full")
- {
- var tscale:Number = (stage.stageHeight - viewport.height) / pHeight;
- var scale:Number = (stage.stageHeight - viewport.height) / loader.height;
- scale = tscale - scale <= 0 ? 1 : tscale - scale;
- TweenMax.to(plane, 1, { scaleX : scale, scaleY : scale, ease : Expo.easeOut });
- }
- };
- loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
- if(type == 'thumb')
- {
- loader.load(new URLRequest(plane.origMaterial));
- }
- else
- {
- loader.load(new URLRequest(plane.newMaterial));
- }
- }
- private function createTween(displayObject3d:DisplayObject3D, target = null):void
- {
- var tweenObject:Object = {};
- tweenObject.x = displayObject3d.x;
- tweenObject.y = displayObject3d.y + (viewport.height >> 1);
- tweenObject.z = displayObject3d.z;
- tweenObject.ease = Expo.easeInOut;
- tweenObject.slerp = 1;
- tweenObject.onUpdate = camera_updateCallback;
- tweenObject.onComplete = function() {
- if(target != null)
- {
- loadNewMaterial('full', target);
- }
- }
- camera.slerp = 0;
- startQuaternion = Quaternion.createFromMatrix(camera.transform);
- endQuaternion = Quaternion.createFromMatrix(displayObject3d.transform);
- TweenMax.to(camera, tweenTime, tweenObject);
- }
- private function plane_objectClickHandler(e:InteractiveScene3DEvent):void
- {
- var plane:Plane = Plane(e.target);
- plane.useOwnContainer = true;
- if(plane != openImage)
- {
- if(openImage != null)
- {
- TweenMax.to(openImage, tweenTime / 2, { alpha : .5, scaleX : 1, scaleY : 1, onComplete : loadNewMaterial, onCompleteParams : ['thumb', e.target] });
- }
- scene.addChild(plane);
- TweenMax.to(plane, tweenTime / 2, { alpha : 1 });
- openImage = plane;
- cameraTarget.copyTransform(plane);
- cameraTarget.moveBackward(camera.zoom * camera.focus);
- createTween(cameraTarget, e.target);
- }
- else
- {
- backgroundSprite_clickHandler(null);
- }
- }
- private function plane_objectOverHandler(e:InteractiveScene3DEvent):void
- {
- var plane:Plane = Plane(e.target);
- plane.useOwnContainer = true;
- if(plane != openImage)
- {
- TweenMax.to(plane, tweenTime / 3, { alpha : 1 });
- }
- }
- private function plane_objectOutHandler(e:InteractiveScene3DEvent):void
- {
- var plane:Plane = Plane(e.target);
- plane.useOwnContainer = true;
- if(plane != openImage)
- {
- TweenMax.to(plane, tweenTime / 3, { alpha : .5 });
- }
- }
- private function setupBackground():void
- {
- var backgroundSprite:Sprite = new Sprite();
- backgroundSprite.graphics.beginFill(0x000000);
- backgroundSprite.graphics.drawRect(0, 0, width, height);
- backgroundSprite.graphics.endFill();
- addChildAt(backgroundSprite, getChildIndex(contentArea));
- backgroundSprite.addEventListener(MouseEvent.CLICK, backgroundSprite_clickHandler);
- }
- private function backgroundSprite_clickHandler(event:MouseEvent):void
- {
- if(openImage != null)
- {
- TweenMax.to(openImage, tweenTime / 2, { alpha : .5, scaleX : 1, scaleY : 1, onComplete : loadNewMaterial, onCompleteParams : ['thumb', openImage] });
- }
- openImage = null;
- createTween(cameraStart);
- }
- private function camera_updateCallback():void
- {
- currentQuaternion = Quaternion.slerp(startQuaternion, endQuaternion, camera.slerp);
- camera.transform.copy3x3(currentQuaternion.matrix);
- }
- }
- }
- import org.papervision3d.cameras.Camera3D;
- class CameraWithSlerp extends Camera3D
- {
- public var slerp:Number = 0;
- }
- import org.papervision3d.objects.primitives.*;
- class PlaneWithOrigin extends Plane
- {
- public var width:Number = 0;
- public var height:Number = 0;
- public var origMaterial;
- public var newMaterial;
- public function PlaneWithOrigin(material:*, width:Number = 0, height:Number = 0, segw:Number = 0, segh:Number = 0):void
- {
- super(material, width, height, segw, segh);
- width = width;
- height = height;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement