forked from: Jiglib n PV simple test

by hacker_owxqkb_k forked from Jiglib n PV simple test (diff: 1)
Very basic JigLib & PV
* hold down mouse to move
♥0 | Line 76 | Modified 2009-11-06 12:55:28 | MIT License
play

ActionScript3 source code

/**
 * Copyright hacker_owxqkb_k ( http://wonderfl.net/user/hacker_owxqkb_k )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/zhrs
 */

// forked from JohnBrookes's Jiglib n PV simple test
/*Very basic JigLib & PV
 * hold down mouse to move
 */
package
{
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import jiglib.geometry.JSphere;
	import jiglib.math.JMatrix3D;
	import jiglib.math.JNumber3D;
	import jiglib.physics.RigidBody;
	import jiglib.plugin.papervision3d.Papervision3DPhysics;
	import jiglib.plugin.papervision3d.Pv3dMesh;
	
	import org.papervision3d.core.math.Number3D;
	import org.papervision3d.materials.special.ParticleMaterial;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.objects.special.ParticleField;
	import org.papervision3d.view.BasicView;
	
		[SWF(backgroundColor="#000000")]

	public class PVtestJG extends BasicView
	{
		private var physics:Papervision3DPhysics;
		private var sphere2:RigidBody;
		private var jmanualSphere:RigidBody;
		private var jcamSphere:RigidBody;
		private var mouseD:Boolean;
		private var sphere:RigidBody;
		
		public function PVtestJG():void
		{
			init();
			singleRender();
			addEventListener(Event.ENTER_FRAME, tick);
			stage.addEventListener(MouseEvent.MOUSE_DOWN, moveSphere);
			stage.addEventListener(MouseEvent.MOUSE_UP, function():void{mouseD=false});
		}
		
		private function moveSphere(e:MouseEvent):void 
		{
		//	sphere2.setVelocity(new JNumber3D( 0, -100,  0));
		//	jmanualSphere.setVelocity(new JNumber3D(  500, 0,   0));
			
			mouseD = true;
		}
		
		private function init():void
		{
			
			camera.z = -200;
			camera.target = null;
			
			var stars:ParticleField = new ParticleField(new ParticleMaterial(0xfafafa ,1));
			scene.addChild(stars);
			
			
			physics = new Papervision3DPhysics(scene, 1);
			physics.engine.setGravity(new JNumber3D(0, 0, 0));
			
			sphere = physics.createSphere(new WireframeMaterial(0xffffff,1,4), 30, 6, 6);
			sphere.mass = 50;
			
			
			sphere2 = physics.createSphere(new WireframeMaterial(0x0000ff), 30, 6, 6);
			sphere2.moveTo(new JNumber3D(0, 400, 20));
			sphere2.restitution = 3;
			
			var manualSphere:Sphere = new Sphere(new WireframeMaterial(0xff0000), 30, 6, 6);
			scene.addChild(manualSphere);
			jmanualSphere = new JSphere(new Pv3dMesh(manualSphere), 30);
			jmanualSphere.moveTo(new JNumber3D( -400, 0, -20));
			physics.addBody(jmanualSphere);
			
			jcamSphere = new JSphere(new Pv3dMesh(camera), 30);
			jcamSphere.moveTo(new JNumber3D( 0, -70, -500));
			physics.addBody(jcamSphere);
			jcamSphere.mass = 5;
			jcamSphere.restitution = 6;
			
		}
		
		private function tick(e:Event):void 
		{
			jcamSphere.addBodyTorque(new JNumber3D(viewport.mouseY - viewport.viewportHeight *0.5, viewport.mouseX - viewport.viewportWidth *0.5,0));
			if (mouseD)
			{				
				var forwardVector:Number3D = new Number3D(camera.transform.n13, camera.transform.n23, camera.transform.n33);
				forwardVector.multiplyEq(50);
				jcamSphere.setVelocity(new JNumber3D(  forwardVector.x, forwardVector.y, forwardVector.z));
			}
			
			physics.step();
			singleRender();
		}
	}
}