public class JigLibFlashPhysics extends Sprite
{
private var scene :Scene3D;
private var camera :Camera3D;
private var viewport :Viewport3D;
private var renderer :QuadrantRenderEngine;
private var material :ColorMaterial;
private var materialActive :CompositeMaterial;
private var materialInactive :CompositeMaterial;
private var materialMoveable :CompositeMaterial;
private var materials :MaterialsList;
private var jCube :Array = new Array();
private var jSphere :Array = new Array();
private var keyForward :Boolean = false;
private var keyBackward :Boolean = false;
private var keyLeft :Boolean = false;
private var keyRight :Boolean = false;
private var keyUp :Boolean = false;
private var field :TextField;
public function JigLibFlashPhysics()
{
scene = new Scene3D();
camera = new Camera3D();
camera.x = 0;
camera.y = 500;
camera.z = -400;
var sphere :Sphere;
for (i = 0; i < 12; i++) {
if (i == 0) {
sphere = new Sphere(materialMoveable, 20, 6);
} else {
sphere = new Sphere(materialActive, 20, 6);
}
scene.addChild(sphere);
private function handleEnterFrame(e:Event):void
{
if (keyForward) {
jSphere[0].addWorldForce(new JNumber3D(0, 0, 100), jSphere[0].currentState.position);
}
if (keyBackward) {
jSphere[0].addWorldForce(new JNumber3D(0, 0, -100), jSphere[0].currentState.position);
}
if (keyLeft) {
jSphere[0].addWorldForce(new JNumber3D(-100, 0, 0), jSphere[0].currentState.position);
}
if (keyRight) {
jSphere[0].addWorldForce(new JNumber3D(100, 0, 0), jSphere[0].currentState.position);
}
if (keyUp) {
jSphere[0].addWorldForce(new JNumber3D(0, 100, 0), jSphere[0].currentState.position);
}
for (var i:String in jCube) {
if (jCube[i].isActive()) {
jCube[i].skin.mesh.material = materialActive;
} else {
jCube[i].skin.mesh.material = materialInactive;
}
if (jCube[i].currentState.position.y < 0) {
jCube[i].moveTo(new JNumber3D(((Math.random() * 500) - 250), 250, ((Math.random() * 500) - 250)));
}
}
for (i in jSphere) {
if (Number(i) != 0) {
if (jSphere[i].isActive()) {
jSphere[i].skin.mesh.material = materialActive;
} else {
jSphere[i].skin.mesh.material = materialInactive;
}
}
if (jSphere[i].currentState.position.y < 0) {
jSphere[i].moveTo(new JNumber3D(((Math.random() * 800) - 400), 240 + (60 * Number(i) + 60), ((Math.random() * 800) - 400)));
}
}
PhysicsSystem.getInstance().integrate(0.1);
renderer.renderScene(scene, camera, viewport);
}
private function handleKeyDown(e:KeyboardEvent):void
{
switch(e.keyCode) {
case Keyboard.ENTER:
field.visible = field.visible ? false : true;
break;
case Keyboard.UP:
case "W".charCodeAt():
keyForward = true;
keyBackward = false;
break;
case Keyboard.DOWN:
case "S".charCodeAt():
keyBackward = true;
keyForward = false;
break;
case Keyboard.LEFT:
case "A".charCodeAt():
keyLeft = true;
keyRight = false;
break;
case Keyboard.RIGHT:
case "D".charCodeAt():
keyRight = true;
keyLeft = false;
break;
}
}
private function handleKeyUp(e:KeyboardEvent):void
{
switch(e.keyCode) {
case Keyboard.UP:
case "W".charCodeAt():
keyForward = false;
break;
case Keyboard.DOWN:
case "S".charCodeAt():
keyBackward = false;
break;
case Keyboard.LEFT:
case "A".charCodeAt():
keyLeft = false;
break;
case Keyboard.RIGHT:
case "D".charCodeAt():
keyRight = false;
break;
}
}