package framework.test;
import javax.media.j3d.AmbientLight;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Texture;
import javax.vecmath.AxisAngle4d;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;
import com.sun.j3d.utils.image.TextureLoader;
import framework.RWT.RWTFrame3D;
import framework.RWT.RWTVirtualController;
import framework.animation.Animation3D;
import framework.animation.AnimationFactory;
import framework.gameMain.MultiViewGame;
import framework.gameMain.OvergroundActor;
import framework.model3D.BackgroundBox;
import framework.model3D.Model3D;
import framework.model3D.ModelFactory;
import framework.model3D.Object3D;
import framework.model3D.Position3D;
import framework.model3D.Quaternion3D;
import framework.model3D.Universe;
import framework.physics.Ground;
import framework.physics.Velocity3D;
import framework.view3D.Camera3D;
public class TestMultiView extends MultiViewGame {
OvergroundActor pocha1;
OvergroundActor pocha2;
Ground stage;
Velocity3D pocha1Direction = new Velocity3D(5.0, 0.0, 0.0);
Velocity3D pocha2Direction = new Velocity3D(5.0, 0.0, 0.0);
@Override
public void init(Universe universe, Camera3D camera1, Camera3D camera2) {
//環境光
AmbientLight amblight = new AmbientLight(new Color3f(0.3f, 0.3f, 0.3f));
amblight.setInfluencingBounds(new BoundingSphere(new Point3d(), 10000.0));
universe.placeLight(amblight);
//平行光源
DirectionalLight dirlight = new DirectionalLight(
true, //光のON/OFF
new Color3f(1.0f, 1.0f, 1.0f), //光の色
new Vector3f(0.0f, -1.0f, -0.5f) //光の方向ベクトル
);
dirlight.setInfluencingBounds(new BoundingSphere(new Point3d(), 10000.0));
universe.placeLight(dirlight);
Model3D pochaModel = ModelFactory.loadModel("data\\pocha\\pocha.wrl", false, true);
Animation3D pochaAnimation = AnimationFactory.loadAnimation("data\\pocha\\walk.wrl");
Object3D pochaBody1 = pochaModel.createObject();
pocha1 = new OvergroundActor(pochaBody1, pochaAnimation);
pocha1.body.apply(new Position3D(3.0, 0.0, 0.0), false);
universe.place(pocha1);
Object3D pochaBody2 = pochaModel.createObject();
pocha2 = new OvergroundActor(pochaBody2, pochaAnimation);
pocha2.body.apply(new Position3D(-3.0, 0.0, 0.0), false);
universe.place(pocha2);
camera1.setViewPoint(pocha1.getPosition().add(0.0, 0.5, 0.0));
camera1.addTarget(pocha1);
camera1.setFieldOfView(1.5);
camera2.setViewPoint(pocha2.getPosition().add(0.0, 0.5, 0.0));
camera2.addTarget(pocha2);
camera2.setFieldOfView(1.5);
Object3D stageObj = ModelFactory.loadModel("data\\stage3\\stage3.wrl").createObject();
stage = new Ground(stageObj);
universe.place(stage);
}
@Override
public void progress(RWTVirtualController virtualController, long interval) {
Velocity3D curV = pocha1.getVelocity();
if (virtualController.isKeyDown(0, RWTVirtualController.LEFT)) {
pocha1Direction.rotY(0.02 * (double)(interval / 15.0));
Quaternion3D curQuat = pocha1.body.getQuaternion();
curQuat.add(new AxisAngle4d(0.0, 1.0, 0.0, 0.02 * (double)(interval / 15.0)));
pocha1.body.apply(curQuat, false);
} else if (virtualController.isKeyDown(0, RWTVirtualController.RIGHT)) {
pocha1Direction.rotY(-0.02 * (double)(interval / 15.0));
Quaternion3D curQuat = pocha1.body.getQuaternion();
curQuat.add(new AxisAngle4d(0.0, 1.0, 0.0, -0.02 * (double)(interval / 15.0)));
pocha1.body.apply(curQuat, false);
}
if (virtualController.isKeyDown(0, RWTVirtualController.DOWN)) {
curV.setX(pocha1Direction.getX());
curV.setZ(pocha1Direction.getZ());
pocha1.body.apply(curV, false);
} else {
curV.setX(0.0);
curV.setZ(0.0);
pocha1.body.apply(curV, false);
}
if (virtualController.isKeyDown(0, RWTVirtualController.UP)) {
if (pocha1.isOnGround()) {
curV.setY(10.0);
pocha1.body.apply(curV, false);
}
}
pocha1.motion(interval, stage);
camera1.setViewPoint(pocha1.getPosition().add(0.0, 1.5, 0.0));
camera1.setViewLine(pocha1Direction.getVector3d());
curV = pocha2.getVelocity();
if (virtualController.isKeyDown(1, RWTVirtualController.LEFT)) {
pocha2Direction.rotY(0.02 * (double)(interval / 15.0));
Quaternion3D curQuat = pocha2.body.getQuaternion();
curQuat.add(new AxisAngle4d(0.0, 1.0, 0.0, 0.02 * (double)(interval / 15.0)));
pocha2.body.apply(curQuat, false);
} else if (virtualController.isKeyDown(1, RWTVirtualController.RIGHT)) {
pocha2Direction.rotY(-0.02 * (double)(interval / 15.0));
Quaternion3D curQuat = pocha2.body.getQuaternion();
curQuat.add(new AxisAngle4d(0.0, 1.0, 0.0, -0.02 * (double)(interval / 15.0)));
pocha2.body.apply(curQuat, false);
}
if (virtualController.isKeyDown(1, RWTVirtualController.DOWN)) {
curV.setX(pocha2Direction.getX());
curV.setZ(pocha2Direction.getZ());
pocha2.body.apply(curV, false);
} else {
curV.setX(0.0);
curV.setZ(0.0);
pocha2.body.apply(curV, false);
}
if (virtualController.isKeyDown(1, RWTVirtualController.UP)) {
if (pocha2.isOnGround()) {
curV.setY(10.0);
pocha2.body.apply(curV, false);
}
}
pocha2.motion(interval, stage);
camera2.setViewPoint(pocha2.getPosition().add(0.0, 1.5, 0.0));
camera2.setViewLine(pocha2Direction.getVector3d());
}
@Override
public RWTFrame3D createFrame3D() {
RWTFrame3D f = new RWTFrame3D();
f.setSize(800, 600);
f.setTitle("Multi View Test");
return f;
}
/**
* @param args
*/
public static void main(String[] args) {
TestMultiView game = new TestMultiView();
game.start();
}
}