package com.almerblanklabs.view
{
import __AS3__.vec.Vector;
import com.greensock.OverwriteManager;
import com.greensock.TweenMax;
import com.greensock.easing.Elastic;
import com.greensock.plugins.MotionBlurPlugin;
import com.greensock.plugins.TweenPlugin;
import flash.events.Event;
import org.papervision3d.core.geom.Particles;
import org.papervision3d.core.geom.renderables.Particle;
import org.papervision3d.core.geom.renderables.Vertex3D;
import org.papervision3d.materials.special.ParticleMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.view.BasicView;
//import com.greensock.plugins.
public class ApplicationView extends BasicView
{
private var _object3D : DisplayObject3D;
private var _origVertices : Vector.<Object>;
private var _displayObj : DisplayObject3D;
private var _satellites : Vector.<Particle>;
private var _particles : Particles;
public function ApplicationView()
{
super(580, 580);
//TweenPlugin.activate([MotionBlurPlugin]);
}
override protected function onRenderTick(event:Event=null):void
{
super.onRenderTick();
}
public function set object3D(aValue : DisplayObject3D):void
{
_object3D = aValue;
_setObjectVertices();
}
private function _setObjectVertices():void
{
_origVertices = new Vector.<Object>;
for each(var vert : Vertex3D in _object3D.geometry.vertices)
{
var vertObj : Object = {x:vert.x, y:vert.y, z:vert.z};
_origVertices.push(vertObj);
}
_initParticles();
}
private function _initParticles():void
{
var material : ParticleMaterial = new ParticleMaterial(0xff0000, 1, ParticleMaterial.SHAPE_CIRCLE, 10);
_satellites = new Vector.<Particle>();
_particles = new Particles();
_displayObj = new DisplayObject3D();
scene.addChild(_particles);
scene.addChild(_displayObj);
_displayObj.addChild(_particles);
for each(var vert : Vertex3D in _object3D.geometry.vertices)
{
var particle : Particle = new Particle(material);
particle.x = vert.x;
particle.y = vert.y;
particle.z = vert.z;
_particles.addParticle(particle);
_satellites.push(particle);
}
}
public function moveParticles(aValue:Vector.<Number>):void
{
var i : int = 0;
var j : int = 0;
var t : int = 0;
// This ensures even distribution among all vertices.
var divisor : Number = Math.floor(_satellites.length / 256);
for each (var sat : Particle in _satellites)
{
// The values used in the x,y,z calculations were achieved through trial and error...
TweenMax.to(_satellites[i], .2, {
x: _origVertices[i].x * ((400 / aValue[i]) * 1.2),
y: _origVertices[i].y * ((400 / aValue[i]) * 1.2),
z: _origVertices[i].z * ((400 / aValue[i]) * 1.2),
overwrite: OverwriteManager.PREEXISTING
} );
if (i < (_satellites.length - (divisor - 1))) {
i += divisor;
}
}
_displayObj.localRotationZ += .3;
_displayObj.localRotationY += .1;
}
private function _renderScene():void
{
renderer.renderScene(scene, camera, viewport);
}
}
}