package sample; import javax.media.j3d.AmbientLight; import javax.media.j3d.BoundingSphere; import javax.media.j3d.DirectionalLight; import javax.vecmath.Color3f; import javax.vecmath.Point3d; import javax.vecmath.Vector3f; import framework.RWT.*; import framework.gameMain.*; import framework.model3D.*; import framework.animation.*; import framework.physics.*; import framework.view3D.Camera3D; public class SampleGame extends SimpleGame { OvergroundActor pocha; Ground stage; @Override public void init(Universe universe, Camera3D camera) { //環境光 AmbientLight amblight = new AmbientLight(new Color3f(0.5f, 0.5f, 0.5f)); 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); Object3D pochaBody = ModelFactory.loadModel("data\\pocha\\pocha.wrl").createObject(); Animation3D pochaAnimation = AnimationFactory.loadAnimation("data\\pocha\\walk.wrl"); pocha = new OvergroundActor(pochaBody, pochaAnimation); pocha.setPosition(new Position3D(3.87, 0.0, 24.0)); universe.place(pocha); Object3D stageObj = ModelFactory.loadModel("data\\konan\\konan3.wrl").createObject(); stage = new Ground(stageObj); universe.place(stage); camera.setViewPoint(pocha.getPosition().add(0.0, 1.5, 0.0)); camera.setViewLine(pocha.getDirection()); camera.setFieldOfView(1.5); } @Override public RWTFrame3D createFrame3D() { RWTFrame3D f = new RWTFrame3D(); f.setSize(800, 600); f.setTitle("Sample"); return f; } @Override public void progress(RWTVirtualController virtualController, long interval) { Velocity3D curV = pocha.getVelocity(); if (virtualController.isKeyDown(0, RWTVirtualController.LEFT)) { pocha.rotY(0.02 * (double)(interval / 15.0)); } else if (virtualController.isKeyDown(0, RWTVirtualController.RIGHT)) { pocha.rotY(-0.02 * (double)(interval / 15.0)); } if (virtualController.isKeyDown(0, RWTVirtualController.DOWN)) { curV.setX(pocha.getDirection().getX() * 5.0); curV.setZ(pocha.getDirection().getZ() * 5.0); pocha.setVelocity(curV); } else { curV.setX(0.0); curV.setZ(0.0); pocha.setVelocity(curV); } if (virtualController.isKeyDown(0, RWTVirtualController.UP)) { if (pocha.isOnGround()) { curV.setY(10.0); pocha.setVelocity(curV); } } pocha.motion(interval, stage); camera.setViewPoint(pocha.getPosition().add(0.0, 1.5, 0.0)); camera.setViewLine(pocha.getDirection()); } }