package framework.gameMain; import framework.RWT.*; import framework.model3D.Universe; import framework.view3D.Camera3D; import javax.media.j3d.GraphicsConfigTemplate3D; import java.awt.*; /** * 状態遷移のないゲーム用のクラス * @author 新田直也 * */ public abstract class MultiViewGame extends AbstractGame implements IGameState { protected Universe universe; protected Camera3D camera1; protected Camera3D camera2; protected RWTContainer container; public abstract void init(Universe universe, Camera3D camera1, Camera3D camera2); public abstract void progress(RWTVirtualController virtualController, long interval); @Override protected IGameState getCurrentGameState() { return this; } @Override public boolean useTimer() { return true; } @Override public void init(RWTFrame3D frame) { container = new RWTContainer() { @Override public void build(GraphicsConfiguration gc) { RWTCanvas3D canvas1, canvas2; if (gc != null) { canvas1 = new RWTCanvas3D(gc); canvas2 = new RWTCanvas3D(gc); } else { canvas1 = new RWTCanvas3D(); canvas2 = new RWTCanvas3D(); } canvas1.setRelativePosition(0.0f, 0.0f); canvas1.setRelativeSize(0.5f, 1.0f); canvas2.setRelativePosition(0.5f, 0.0f); canvas2.setRelativeSize(0.5f, 1.0f); addCanvas(canvas1); addCanvas(canvas2); repaint(); } // RWT側ではイベント処理をしない @Override public void keyPressed(RWTVirtualKey key) {} @Override public void keyReleased(RWTVirtualKey key) {} @Override public void keyTyped(RWTVirtualKey key) {} }; frame.setContentPane(container); GraphicsConfiguration gc = null; if (frame.isShadowCasting()) { // 影を付ける場合 // ステンシルバッファを使用する GraphicsConfiguration の生成 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice gd = ge.getDefaultScreenDevice(); GraphicsConfigTemplate3D gct3D = new GraphicsConfigTemplate3D(); gct3D.setStencilSize(8); gc = gd.getBestConfiguration(gct3D); } container.build(gc); universe = new Universe(); camera1 = new Camera3D(universe); camera2 = new Camera3D(universe); init(universe, camera1, camera2); container.getRWTCanvas3D(0).attachCamera(camera1); container.getRWTCanvas3D(1).attachCamera(camera2); universe.compile(); } @Override public void update(RWTVirtualController virtualController, long interval) { progress(virtualController, interval); camera1.adjust(interval); camera2.adjust(interval); } }