diff options
Diffstat (limited to 'demos/GLLandScape/GLLandScape1w1Applet.java')
-rwxr-xr-x | demos/GLLandScape/GLLandScape1w1Applet.java | 416 |
1 files changed, 416 insertions, 0 deletions
diff --git a/demos/GLLandScape/GLLandScape1w1Applet.java b/demos/GLLandScape/GLLandScape1w1Applet.java new file mode 100755 index 0000000..90da5f3 --- /dev/null +++ b/demos/GLLandScape/GLLandScape1w1Applet.java @@ -0,0 +1,416 @@ + +import gl4java.GLContext; +import java.awt.*; +import java.applet.*; +import java.awt.event.*; + +public class GLLandScape1w1Applet extends Applet + implements MouseListener, KeyListener, ActionListener +{ + GLLandScape1w1 landScape = null; + + Button bAddPlane = null; + Button bRemPlane = null; + Button bTexture = null; + Button bShading = null; + Button bFog = null; + Button bNewFractal = null; + Button bInfo = null; + + Button bFps; TextField tFps; + + boolean gameOn = true; + + SpeedTimer tMySpeed = null; + + public void init() + { + init(0,0); + } + + public void init(int w, int h) + { + super.init(); + + setLayout(new BorderLayout()); + + Panel glFeatures = new Panel(); + glFeatures.setLayout(new GridLayout(6,1)); + glFeatures.add(bAddPlane =new Button("+ Plane")); + glFeatures.add(bRemPlane =new Button("- Plane")); + glFeatures.add(bTexture =new Button("Texture")); + glFeatures.add(bShading =new Button("Shading")); + glFeatures.add(bFog =new Button("Fogging")); + glFeatures.add(bNewFractal =new Button("Fractal")); + bAddPlane.addMouseListener(this); + bRemPlane.addMouseListener(this); + bTexture.addMouseListener(this); + bShading.addMouseListener(this); + bFog.addMouseListener(this); + bNewFractal.addMouseListener(this); + add("East", glFeatures); + + Panel pFps = new Panel(); + pFps.setLayout(new GridLayout(1,3)); + pFps.add(bInfo =new Button("info")); + pFps.add(bFps =new Button("get fps")); + pFps.add(tFps =new TextField()); + bInfo.addMouseListener(this); + bFps.addMouseListener(this); + tFps.addActionListener(this); + add("South", pFps); + + if(w==0 && h==0) + { + Dimension d = getSize(); + landScape= new GLLandScape1w1(d.width, d.height); + } else { + landScape= new GLLandScape1w1(w, h); + } + landScape.setAnimateFps(30.0); + landScape.addMouseListener(this); + landScape.addKeyListener(this); + + tMySpeed = new SpeedTimer(landScape, 200); + + landScape.requestFocus(); + landScape.setMySpeed(0); + + add("Center", landScape); + } + + public void destroy() + { + landScape.stop(); + landScape.cvsDispose(); + landScape.removeMouseListener(this); + landScape.removeKeyListener(this); + } + + public void start() + { + landScape.start(); + } + + public void stop() + { + landScape.stop(); + } + + public static void main( String args[] ) { + String gljLib=null; + String glLib=null; + String gluLib=null; + + if(args.length>0) + gljLib = args[0]; + if(args.length>1) + glLib = args[1]; + if(args.length>2) + gluLib = args[2]; + + if(GLContext.loadNativeLibraries(gljLib, glLib, gluLib)==false) + System.out.println("GLCanvasV2 could not load native libs:"+ + gljLib + ", " + glLib + ", " + gluLib); + + GLContext.gljNativeDebug = false; + GLContext.gljClassDebug = false; + + GLLandScape1w1Applet window = + new GLLandScape1w1Applet(); + + Frame f = new Frame(); + + f.addWindowListener( new WindowAdapter() + { + public void windowClosed(WindowEvent e) + { + System.exit(0); + } + public void windowClosing(WindowEvent e) + { + windowClosed(e); + } + } + ); + + f.setLayout(new BorderLayout()); + f.add("Center", window); + window.init(500,300); + window.start(); + Dimension ps = window.getPreferredSize(); + f.setBounds(-100,-100,99,99); + f.setVisible(true); + f.setVisible(false); + Insets i = f.getInsets(); + f.setBounds(0,0, + ps.width+i.left+i.right, + ps.height+i.top+i.bottom); + f.setVisible(true); + } + + // Methods required for the implementation of MouseListener + public void mouseEntered( MouseEvent evt ) + { + Component comp = evt.getComponent(); + if( comp.equals(landScape ) ) + { + landScape.requestFocus(); + } + } + + public void mouseExited( MouseEvent evt ) + { + } + + public void mousePressed( MouseEvent evt ) + { + } + public void mouseReleased( MouseEvent evt ) { + } + + public void mouseClicked( MouseEvent evt ) + { + Component comp = evt.getComponent(); + + if( comp.equals(bAddPlane ) ) + landScape.addPlane(); + else if( comp.equals(bRemPlane ) ) + landScape.removePlane(); + else if( comp.equals(bTexture ) ) + landScape.setTexture( ! landScape.getTextureState()); + else if( comp.equals(bNewFractal ) ) + landScape.newFractal(); + else if( comp.equals(bShading ) ) + landScape.setFlatShading(!landScape.getFlatShadeState()); + else if( comp.equals(bFog ) ) + landScape.setFog( ! landScape.getFogState()); + else if( comp.equals(landScape) ) + landScape.setSuspended(false); + else if( comp.equals(bFps) ) + { + double fps = 0; + + landScape.stopFpsCounter(); + fps=landScape.getFps(); + tFps.setText(String.valueOf(fps)); + landScape.resetFpsCounter(); + } + else if( comp.equals(bInfo) ) + { + InfoWin iw = new InfoWin(); + } + } + + + public void keyTyped(KeyEvent e) + { + } + + public void keyPressed(KeyEvent e) + { + int key = e.getKeyCode(); + + if( gameOn==true ) + { + if ( key==KeyEvent.VK_LEFT ) + { + landScape.myMove(landScape.TURNLEFT, 0.1f, true, true); + tMySpeed.start(); + } + else if ( key==KeyEvent.VK_RIGHT ) + { + landScape.myMove(landScape.TURNLEFT, -0.1f, true, true); + tMySpeed.start(); + } + else if ( key==KeyEvent.VK_UP ) + { + float v = tMySpeed.getSpeed(); + + if ( e.isShiftDown() ) + { + tMySpeed.setSpeed(v+2.0f); + } + else { + tMySpeed.setSpeed(v+1.0f); + } + tMySpeed.start(); + } + else if ( key==KeyEvent.VK_DOWN ) + { + float v = tMySpeed.getSpeed(); + + if ( e.isShiftDown() ) + tMySpeed.setSpeed(v/2.0f); + else + tMySpeed.setSpeed(v-1.0f); + tMySpeed.start(); + } + else if ( key==KeyEvent.VK_PAGE_UP ) + { + landScape.myMove(landScape.LOOKUP, 0.1f, true,true); + tMySpeed.start(); + } + else if ( key==KeyEvent.VK_PAGE_DOWN ) + { + landScape.myMove(landScape.LOOKUP, -0.1f, true,true); + tMySpeed.start(); + } + else if ( key==KeyEvent.VK_END ) + { + landScape.myMove(landScape.LOOKSET, 0f, true,true); + tMySpeed.start(); + } + } + } + + public void keyReleased(KeyEvent e) + { + int key = e.getKeyCode(); + + if( gameOn==true && + ( key==KeyEvent.VK_UP || + key==KeyEvent.VK_DOWN + ) + ) + { + //ts.start(); + } + else if( gameOn==true && + ( key==KeyEvent.VK_LEFT || + key==KeyEvent.VK_RIGHT + ) + ) + { + //landScape.noMySpeed(); + } + } + + public void actionPerformed(ActionEvent event) + { + Object source = event.getSource(); + + if ( source == tFps ) + { + try { + double FramesPerSec= + Double.valueOf(tFps.getText()).doubleValue(); + landScape.setAnimateFps(FramesPerSec); + landScape.setSuspended(false); + } catch (NumberFormatException s) { + System.out.println("wrong fps format, use float .."); + } + + } + } + + class SpeedTimer implements Runnable { + protected Thread me = null; + protected boolean to=false, started=false; + protected int _t; + + protected float speed = 0.0f; + protected GLLandScape1w1 _ls; + + public SpeedTimer(GLLandScape1w1 ls, int t) + { _ls=ls; _t=t; } + + public void start() + { + if(me!=null) stop(); + to=false; + started=true; + + me = new Thread(this); + me.start(); + } + + public void stop() { + if(me!=null) + { + me.stop(); + me=null; + started=false; + to=false; + } + } + + public void run() { + if(me!=null) + { + try {me.sleep(_t,0);} catch (InterruptedException e){} + to=true; + while(speed>1.0f) + { + speed/=2.0f; + _ls.setMySpeed(speed); + try {me.sleep(_t,0);} catch (InterruptedException e){} + } + speed = 0.0f; + _ls.setMySpeed(0f); + } + } + + public boolean isActive() { return to; } + public boolean isStarted() { return started; } + + public float getSpeed() { return speed; } + public void setSpeed(float v) + { speed=v; + _ls.setMySpeed(speed); + } + + } + + class InfoWin extends Frame + implements ActionListener + { + protected Button DismissButton; + + String text = + "GLLandScape1w1 V 1.0\n"+ + "by Sven Goethel\n"+ + "\thttp://www.jausoft.com/gl4java.html\n"+ + "\tmailto:[email protected]\n\n"+ + "The original sources for the lanscape algorythms,\n"+ + "are taken from Nicholas Anderson's Landscape V1.0 !\n"+ + "\thttp://www.fortunecity.com/skyscraper/online/263\n"+ + "\tmailto:[email protected]\n\n"+ + "usage:\n"+ + "\t ARROW-UP : accelerate\n"+ + "\t ARROW-UP + SHIFT : accelerate fast \n"+ + "\t ARROW-DOWN : de-accelerate\n"+ + "\t ARROW-DOWN + SHIFT : de-accelerate fast\n"+ + "\t ARROW-LEFT : turn left\n"+ + "\t ARROW-right : turn right\n"+ + "\t PAGE-UP : look-up\n"+ + "\t PAGE-DOWN : look-down\n"+ + "\t END : look normal\n\n"+ + "Have a lot of fun - Sven Goethel\n"; + + public InfoWin() + { + setTitle("INFO"); + setName("INFO"); + + setLayout(new BorderLayout()); + add("Center", new TextArea(text, 25, 50)); + + add("South", DismissButton = new Button("dismiss")); + DismissButton.addActionListener(this); + + pack(); + setVisible(true); + + toFront(); + } + + public void actionPerformed(ActionEvent event) { + if ( event.getSource() == DismissButton) + { + setVisible(false); + dispose(); + } + } + } +} |