VisClient/org/hfbk/vis/VisClientPanel.java

Go to the documentation of this file.
00001 package org.hfbk.vis;
00002 
00003 import java.awt.AWTEvent;
00004 import java.awt.Dimension;
00005 import java.awt.dnd.DropTarget;
00006 import java.awt.event.KeyAdapter;
00007 import java.awt.event.KeyEvent;
00008 
00009 import org.hfbk.util.ScriptShell;
00010 import org.hfbk.vis.visnode.Screenshooter;
00011 import org.lwjgl.LWJGLException;
00012 import org.lwjgl.opengl.AWTGLCanvas;
00013 import org.lwjgl.opengl.PixelFormat;
00014 import org.lwjgl.util.vector.Vector3f;
00015 
00050 public class VisClientPanel extends AWTGLCanvas{
00051         
00052 
00053         VisClient client=new VisClient(this);
00054 
00055         Allesfresser allesfresser=new Allesfresser(client);
00056         
00057         UdpListener udplistener;
00058 
00059         ScriptRouter keyrouter=new ScriptRouter(client);
00060                 
00066         KeyAdapter keys=new     KeyAdapter() {
00067                 public void keyReleased(KeyEvent e) {
00068                         int key = e.getKeyCode();
00069                         if (e.isControlDown()){
00070                                 // first dispatch to user prefs defined routes and return if 
00071                                 // key is already handled by a route
00072                                 if (keyrouter.dispatch(KeyEvent.getKeyText(key),null)) return; 
00073                                 
00074                                 switch(key){ 
00075                                 case KeyEvent.VK_F10:
00076                                         client.root.add(new Screenshooter());
00077                                         break;
00078                                 case KeyEvent.VK_V:
00079                                         allesfresser.frissClipboard();
00080                                         break;  
00081                                 case KeyEvent.VK_H:
00082                                         client.hudEnabled=!client.hudEnabled;
00083                                         break;  
00084                                 case KeyEvent.VK_W:
00085                                         client.reset();
00086                                         break;
00087                                 case KeyEvent.VK_K:
00088                                         if (client.hoovered!=null && client.hoovered.parent!=null)
00089                                                 client.hoovered.close();
00090                                                 client.hoovered.parent.remove(client.hoovered);
00091                                         break;
00092                                 case KeyEvent.VK_R:
00093                                         client.resetValues();
00094                                         break;                  
00095                                 case KeyEvent.VK_M:
00096                                         Prefs.current.map^=true;
00097                                         break;                  
00098                                 case KeyEvent.VK_P:
00099                                         new PrefsDialog();
00100                                         break;
00101                                 case KeyEvent.VK_T:
00102                                         new ScriptShell(client);
00103                                         break;
00104                                 }
00105                         }else switch(key){
00106                                 case KeyEvent.VK_F1:
00107                                         new VisClientScripter(client).source("scripts/help.vs");
00108                                         break;
00109                                 case KeyEvent.VK_BACK_SPACE:                            
00110                                         client.stepViewpoint(-1);
00111                                         break;
00112                                 case KeyEvent.VK_SHIFT:
00113                                         if (client.root.lastVisNode!=null)
00114                                                 client.setViewpoint(client.root.lastVisNode.traverse(client.root,new Vector3f()),1);
00115                                         break;
00116                         }
00117                 }               
00118         };
00119         
00120 
00121         static PixelFormat getPixelFormat(){
00122                 return new PixelFormat().withSamples(4);
00123         }
00124         
00125         public Dimension getPreferredSize() {
00126                 return new Dimension(640,480);
00127         }
00128         
00134         public VisClientPanel() throws LWJGLException {
00135          
00136                 //super(getPixelFormat());
00137                 
00138         //      setSize(640, 480);
00139 
00140                 addKeyListener(keys);
00141                                  
00142                 setDropTarget(new DropTarget(this,allesfresser)); //to handle drag'n drop objects
00143                 
00144                 if (Prefs.current.udp) udplistener=new UdpListener(client);
00145                 
00146                 enableEvents(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK);
00147                 
00148                 
00149                 Thread updater=new Thread("Update Loop"){
00150                         public void run() {
00151                                 while (true) 
00152                                         update();
00153                         }
00154                 };
00155                 updater.setDaemon(true);
00156                 updater.start();
00157         }
00158 
00159 
00164         public void processEvent(AWTEvent e) {
00165                 super.processEvent(e);
00166                 client.processEvent(e);         
00167         }
00168         
00183         public void update() {
00184                 try {
00185                         while(hasToRender)
00186                                 Thread.sleep(10);
00187                 } catch (InterruptedException e) {}                     
00188                 hasToRender=true;
00189                 repaint();              
00190         }
00191         boolean hasToRender=true;
00192         
00197         protected void initGL() {       
00198                 /*if (GLContext.getCapabilities().GL_ARB_multisample) {
00199                         System.out.println("multisample!");
00200                         GL11.glEnable(ARBMultisample.GL_MULTISAMPLE_ARB);
00201                 }*/
00202                 
00203                 client.init();
00204         }
00205         
00209         protected void paintGL() {
00210 
00211                 if (Prefs.current.udp && udplistener==null)
00212                         udplistener=new UdpListener(client);            
00213                 else if (!Prefs.current.udp && udplistener!=null){ 
00214                         udplistener.close();                            
00215                         udplistener=null;                                       
00216                 }
00217                 client.paintGL(getWidth(), getHeight());
00218                 
00219                 try {
00220                         swapBuffers(); // actually show this render
00221                 } catch (LWJGLException e) {
00222                         throw new RuntimeException(e);
00223                 }
00224                 
00225                 hasToRender=false;  //notify main loop
00226         //      repaint();
00227         }
00228 }

Generated on Tue Apr 7 17:57:20 2009 for visclient by  doxygen 1.5.1