I am lazy.
I always want to simplfy things, by making 10 functions out of 1000s.
Below is my simplifier adapter class:
package com.tk.libraries.gui.xith3D;
import com.tk.libraries.io.file.TK_FileUtils;
import com.tk.libraries.lang.TK_GeneralUtils;
import java.io.File;
import java.net.URL;
import net.jtank.input.KeyPressedEvent;
import net.jtank.input.KeyReleasedEvent;
import net.jtank.input.MouseMask;
import net.jtank.input.MouseMovedEvent;
import net.jtank.input.MousePressedEvent;
import net.jtank.input.MouseReleasedEvent;
import net.jtank.input.MouseWheelEvent;
import org.openmali.vecmath2.Point3f;
import org.openmali.vecmath2.Vector3f;
import org.xith3d.base.Xith3DEnvironment;
import org.xith3d.loaders.models.base.Model;
import org.xith3d.loaders.models.impl.ac3d.AC3DLoader;
import org.xith3d.loaders.models.impl.ac3d.AC3DModel;
import org.xith3d.loaders.models.impl.ase.AseLoader;
import org.xith3d.loaders.models.impl.ase.AseModel;
import org.xith3d.loaders.models.impl.obj.OBJLoader;
import org.xith3d.loaders.models.impl.md2.MD2Loader;
import org.xith3d.loaders.models.impl.md2.MD2Model;
import org.xith3d.loaders.models.impl.md5.MD5Loader;
import org.xith3d.loaders.models.impl.md5.MD5Model;
import org.xith3d.loaders.models.impl.tds.TDSLoader;
import org.xith3d.loaders.models.impl.tds.TDSModel;
import org.xith3d.loaders.models.impl.obj.OBJModel;
import org.xith3d.loaders.models.impl.bsp.BSPLoader;
import org.xith3d.loaders.models.impl.cal3d.Cal3dLoader;
import org.xith3d.loaders.models.impl.cal3d.Cal3dModel;
import org.xith3d.loaders.models.impl.celshading.CelShadingLoader;
import org.xith3d.loaders.models.impl.celshading.CelShadingModel;
import org.xith3d.loop.InputAdapterRenderLoop;
import org.xith3d.loop.UpdatingThread.TimingMode;
import org.xith3d.loop.opscheduler.OperationScheduler;
import org.xith3d.picking.NearestPickListener;
import org.xith3d.picking.PickResult;
import org.xith3d.picking.PickingLibrary;
import org.xith3d.render.Canvas3D;
import org.xith3d.render.Canvas3DFactory;
import org.xith3d.render.config.FSAA;
import org.xith3d.scenegraph.BranchGroup;
import org.xith3d.ui.hud.HUD;
import org.xith3d.ui.hud.base.Widget;
import org.xith3d.utility.screenshots.ScreenshotEngine;
abstract public class TK_Xith3DUniverse {
private String URL_Base = TK_FileUtils.getCurrentDirectory();
public Canvas3D canvas3D;
public Xith3DEnvironment environment;
private ScreenshotEngine sse;
private NearestPickListener nearestPickListener;
public InputAdapterRenderLoop renderLoop;
public HUD hud;
public boolean keyPressed[] = new boolean[256];
public boolean mousePressed[] = new boolean[3];
public int mouseLoc[] = new int[2];
public static final int MOUSE_MASK_LEFT = MouseMask.LEFT_BUTTON;
public static final int MOUSE_MASK_MIDDLE = MouseMask.MIDDLE_BUTTON;
public static final int MOUSE_MASK_RIGHT = MouseMask.RIGHT_BUTTON;
private long pickId = 0L;
private long pickResultId = 0L;
private String picked = null;
public TK_Xith3DUniverse() {
this(TK_GeneralUtils.getScreenWidth(), TK_GeneralUtils.getScreenHeigth(), true, FSAA.OFF);
}
public TK_Xith3DUniverse(int width, int height, boolean vsync, FSAA fsaa) {
canvas3D = Canvas3DFactory.createFullscreen(width, height, vsync, fsaa);
environment = new Xith3DEnvironment();
environment.addCanvas(canvas3D);
lookAtDefault();
sse = environment.getScreenshotEngine();
nearestPickListener = new NearestPickListener() {
public void onObjectPicked(PickResult nearest, Object userObject, long pickTime) {
pickResultId++;
picked = nearest.getNode().getName();
}
public void onPickingMissed(Object userObject, long pickTime) {
pickResultId++;
picked = null;
}
};
renderLoop = new InputAdapterRenderLoop() {
@Override
public void onKeyPressed(KeyPressedEvent e) {
System.out.println(e.getKeyCode());
keyPressed[e.getKeyCode()] = true;
}
@Override
public void onKeyReleased(KeyReleasedEvent e) {
keyPressed[e.getKeyCode()] = false;
}
@Override
public void onMouseButtonPressed(MousePressedEvent e) {
mouseLoc[0] = e.getX();
mouseLoc[1] = e.getY();
if (e.getButton() == MOUSE_MASK_LEFT) {
mousePressed[0] = true;
TK_Xith3DUniverse.this.onMouseButtonPressed(MOUSE_MASK_LEFT);
} else if (e.getButton() == MOUSE_MASK_MIDDLE) {
mousePressed[1] = true;
TK_Xith3DUniverse.this.onMouseButtonPressed(MOUSE_MASK_MIDDLE);
} else if (e.getButton() == MOUSE_MASK_RIGHT) {
mousePressed[2] = true;
TK_Xith3DUniverse.this.onMouseButtonPressed(MOUSE_MASK_RIGHT);
} else {
TK_Xith3DUniverse.this.onMouseButtonPressed(-1);
}
}
@Override
public void onMouseButtonReleased(MouseReleasedEvent e) {
mouseLoc[0] = e.getX();
mouseLoc[1] = e.getY();
if (e.getButton() == MOUSE_MASK_LEFT) {
mousePressed[0] = false;
TK_Xith3DUniverse.this.onMouseButtonReleased(MOUSE_MASK_LEFT);
} else if (e.getButton() == MOUSE_MASK_MIDDLE) {
mousePressed[1] = false;
TK_Xith3DUniverse.this.onMouseButtonReleased(MOUSE_MASK_MIDDLE);
} else if (e.getButton() == MOUSE_MASK_RIGHT) {
mousePressed[2] = false;
TK_Xith3DUniverse.this.onMouseButtonReleased(MOUSE_MASK_RIGHT);
} else {
TK_Xith3DUniverse.this.onMouseButtonPressed(-1);
}
}
@Override
public void onMouseMoved(MouseMovedEvent e) {
mouseLoc[0] = e.getX();
mouseLoc[1] = e.getY();
}
@Override
public void onMouseWheelMoved(MouseWheelEvent e) {
mouseLoc[0] = e.getX();
mouseLoc[1] = e.getY();
TK_Xith3DUniverse.this.onMouseWheelMoved(e.getWheelDelta());
}
@Override
protected void prepareNextFrame(long gameTime, long frameTime, TimingMode timingMode) {
TK_Xith3DUniverse.this.update(gameTime, frameTime, timingMode, timingMode.getMilliSeconds(gameTime));
}
@Override
protected void onRenderLoopStarted() {
TK_Xith3DUniverse.this.init();
}
};
renderLoop.addRenderEngine(environment);
renderLoop.getInputManager().registerKeyboardAndMouse(canvas3D);
hud = new HUD(canvas3D, renderLoop.getOperationScheduler());
environment.addHUD(hud, renderLoop.getInputManager());
renderLoop.begin();
}
public long pickNearest(BranchGroup bg, int mouseMask) {
PickingLibrary.pickNearest(bg, canvas3D, mouseMask, mouseLoc[0], mouseLoc[1], nearestPickListener);
pickId++;
return pickId;
}
public String getPickResult(long pickId) {
while (pickResultId < pickId);
return pickResultId > pickId ? null : picked;
}
public void lookAt(Point3f eyePosition, Point3f viewFocus, Vector3f vecUp) {
environment.getView().lookAt(eyePosition, viewFocus, vecUp);
}
public void addParallelBranch(BranchGroup bg) {
environment.addParallelBranch(bg);
}
public void addPerspectiveBranch(BranchGroup bg) {
environment.addPerspectiveBranch(bg);
}
public void addWidget(Widget w, float locX, float locY) {
hud.addWidget(w, locX, locY);
}
public File takeScreenShot() {
return sse.takeScreenshot(false);
}
public OperationScheduler getOperationScheduler() {
return renderLoop.getOperationScheduler();
}
abstract public void preExit();
public void exit() {
preExit();
renderLoop.end();
System.exit(0);
}
abstract public void onMouseButtonPressed(int mouseMask);
abstract public void onMouseButtonReleased(int mouseMask);
abstract public void onMouseWheelMoved(int mouseWheel);
abstract public void update(long gameTime, long frameTime, TimingMode timingMode, long gameMilliSeconds);
abstract public void init();
public OBJModel loadModelOBJ(URL url) {
try {
return new OBJLoader().loadModel(url);
} catch (Exception ex) {
return null;
}
}
public AC3DModel loadModelAC3D(URL url) {
try {
return new AC3DLoader().loadModel(url);
} catch (Exception ex) {
return null;
}
}
public AseModel loadModelASE(URL url) {
try {
return new AseLoader().loadModel(url);
} catch (Exception ex) {
return null;
}
}
public Model loadModelBSP(URL url) {
try {
return new BSPLoader().loadModel(url);
} catch (Exception ex) {
return null;
}
}
public Cal3dModel loadModelCAL3D(URL url) {
try {
return new Cal3dLoader().loadModel(url);
} catch (Exception ex) {
return null;
}
}
public CelShadingModel loadModelCELSHADING(URL url) {
try {
return new CelShadingLoader().loadModel(url);
} catch (Exception ex) {
return null;
}
}
public org.xith3d.loaders.models.impl.dae.Model loadModelDAE(URL url) throws Exception {
throw new Exception("now implemented yet");
}
public MD2Model loadModelMD2(URL url) {
try {
return new MD2Loader().loadModel(url);
} catch (Exception ex) {
return null;
}
}
public MD5Model loadModelMD5(URL url) {
try {
return new MD5Loader().loadModel(url);
} catch (Exception ex) {
return null;
}
}
public TDSModel loadModelTDS(URL url) {
try {
return new TDSLoader().loadModel(url);
} catch (Exception ex) {
return null;
}
}
public void setURLBase(String base) {
URL_Base = base;
}
public URL getURL(String fileName) {
return TK_FileUtils.getURL(URL_Base + fileName);
}
public void lookAtDefault() {
lookAt(new Point3f(0f, 0f, 5f), Point3f.ZERO, Vector3f.POSITIVE_Y_AXIS);
}
}
Below is my game ( I am open to ideas :> )
package com.tk.programs.world.xith3D.xith3DGame;
import com.tk.libraries.gui.xith3D.TK_Xith3DUniverse;
import java.awt.event.KeyEvent;
import org.xith3d.loop.UpdatingThread.TimingMode;
import org.xith3d.scenegraph.BranchGroup;
public class Run {
public static void main(String[] s) {
new TK_Xith3DUniverse() {
@Override
public void onMouseButtonPressed(int mouseMask) {
System.out.println("mp" + mouseMask);
}
@Override
public void onMouseButtonReleased(int mouseMask) {
System.out.println("mr" + mouseMask);
}
@Override
public void onMouseWheelMoved(int mouseWheel) {
System.out.println("mw" + mouseWheel);
}
@Override
public void update(long gameTime, long frameTime, TimingMode timingMode, long gameMilliSeconds) {
if (keyPressed[KeyEvent.VK_ESCAPE]) {
exit();
}
}
@Override
public void init() {
setURLBase("C:\\Documents\\Utils\\src\\com\\tk\\programs\\world\\xith3D\\xith3DGame\\data\\");
BranchGroup bg = new BranchGroup();
bg.addChild(loadModelOBJ(getURL("jeep.obj")));
addPerspectiveBranch(bg);
}
@Override
public void preExit() {
}
};
}
}
and last one; Below is my exception list
run:
WARNING: Theme "GTK" could not be loaded. Using Fallback-Theme
javax.media.opengl.GLException: Method "glClientActiveTexture" not available
at com.sun.opengl.impl.GLImpl.glClientActiveTexture(GLImpl.java:993)
at org.xith3d.render.jsr231.TextureShaderPeer.clutchTextureUnit(TextureShaderPeer.java:457)
at org.xith3d.render.jsr231.TextureShaderPeer.shade(TextureShaderPeer.java:731)
at org.xith3d.render.RenderPeer.setState(RenderPeer.java:291)
at org.xith3d.render.RenderPeer.renderAtom(RenderPeer.java:333)
at org.xith3d.render.jsr231.RenderPeerImpl.drawBin(RenderPeerImpl.java:374)
at org.xith3d.render.jsr231.RenderPeerImpl.renderMain(RenderPeerImpl.java:628)
at org.xith3d.render.jsr231.RenderPeerImpl.renderRenderPass(RenderPeerImpl.java:760)
at org.xith3d.render.jsr231.RenderPeerImpl.render(RenderPeerImpl.java:844)
at org.xith3d.render.jsr231.CanvasPeerImplBase.doRender(CanvasPeerImplBase.java:306)
at org.xith3d.render.jsr231.CanvasPeerImplAWT.display(CanvasPeerImplAWT.java:570)
at com.sun.opengl.impl.GLDrawableHelper.display(GLDrawableHelper.java:78)
at javax.media.opengl.GLCanvas$DisplayAction.run(GLCanvas.java:435)
at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:194)
at javax.media.opengl.GLCanvas$DisplayOnEventDispatchThreadAction.run(GLCanvas.java:452)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
BUILD SUCCESSFUL (total time: 6 seconds)
The question is: Why are these exceptions happening?
I need desperate help.