JOGLKBD.java :  » Game » Jake2-0.9.5 » Jake2 » sys » Java Open Source

Java Open Source » Game » Jake2 0.9.5 
Jake2 0.9.5 » Jake2 » sys » JOGLKBD.java
package jake2.sys;

import jake2.client.Key;

import java.awt.*;
import java.awt.event.*;

import javax.swing.ImageIcon;

final public class JOGLKBD extends KBD
{
  static Robot robot;
  public static InputListener listener = new InputListener();
  static Cursor emptyCursor = null;
  static Component c = null;
  
  static int win_w2 = 0;
  static int win_h2 = 0;
  
  static {
    try {
      robot = new Robot();
    } catch (AWTException e) {
      System.exit(1);
    }
  }
    
  public void Init() {
  }

  public void Update() {
    // get events
    HandleEvents();
  }

  public void Close() {
  }
  
  private void HandleEvents() 
  {
    int key;

    Jake2InputEvent event;
    while ( (event=InputListener.nextEvent()) != null ) {
      switch(event.type) {
        case Jake2InputEvent.KeyPress:
        case Jake2InputEvent.KeyRelease:
          Do_Key_Event(XLateKey((KeyEvent)event.ev), event.type == Jake2InputEvent.KeyPress);
          break;

        case Jake2InputEvent.MotionNotify:
//          if (IN.ignorefirst) {
//            IN.ignorefirst = false;
//            break;
//          }
          if (IN.mouse_active) {
            mx = (((MouseEvent)event.ev).getX() - win_w2) * 2;
            my = (((MouseEvent)event.ev).getY() - win_h2) * 2;
          } else {
            mx = 0;
            my = 0;
          }
          break;
        // see java.awt.MouseEvent
        case Jake2InputEvent.ButtonPress:
          key = mouseEventToKey((MouseEvent)event.ev); 
          Do_Key_Event(key, true);
          break;
 
        case Jake2InputEvent.ButtonRelease:
          key = mouseEventToKey((MouseEvent)event.ev); 
          Do_Key_Event(key, false);
          break;
          
        case Jake2InputEvent.WheelMoved:
          int dir = ((MouseWheelEvent)event.ev).getWheelRotation();
          if (dir > 0) {
            Do_Key_Event(Key.K_MWHEELDOWN, true);
            Do_Key_Event(Key.K_MWHEELDOWN, false);
          } else {
            Do_Key_Event(Key.K_MWHEELUP, true);
            Do_Key_Event(Key.K_MWHEELUP, false);              
          }
          break;
           
        case Jake2InputEvent.CreateNotify :
        case Jake2InputEvent.ConfigureNotify :
          Component c = ((ComponentEvent)event.ev).getComponent();
          win_x = 0;
          win_y = 0;
          win_w2 = c.getWidth() / 2;
          win_h2 = c.getHeight() / 2;
          while (c != null) {
            if (c instanceof Container) {
              Insets insets = ((Container)c).getInsets();
              win_x += insets.left;
              win_y += insets.top;
            }
            win_x += c.getX();
            win_y += c.getY();
            c = c.getParent();
          }
          break;
      }
    }
            
    if (mx != 0 || my != 0) {
      // move the mouse to the window center again
      robot.mouseMove(win_x + win_w2, win_y + win_h2);
    }    
  }

  // strange button numbering in java.awt.MouseEvent
  // BUTTON1(left) BUTTON2(center) BUTTON3(right)
  // K_MOUSE1      K_MOUSE3        K_MOUSE2
  private final int mouseEventToKey(MouseEvent ev) {
      switch (ev.getButton()) {
      case MouseEvent.BUTTON3:
          return Key.K_MOUSE2;
      case MouseEvent.BUTTON2:
          return Key.K_MOUSE3;
      default:
          return Key.K_MOUSE1;
      }
  }

  private static int XLateKey(KeyEvent ev) {
 
    int key = 0;
    int code = ev.getKeyCode();

    switch(code) {
//  00626                 case XK_KP_Page_Up:      key = K_KP_PGUP; break;
      case KeyEvent.VK_PAGE_UP: key = Key.K_PGUP; break;
 
//  00629                 case XK_KP_Page_Down: key = K_KP_PGDN; break;
      case KeyEvent.VK_PAGE_DOWN: key = Key.K_PGDN; break;

//  00632                 case XK_KP_Home: key = K_KP_HOME; break;
      case KeyEvent.VK_HOME: key = Key.K_HOME; break;

//  00635                 case XK_KP_End:  key = K_KP_END; break;
      case KeyEvent.VK_END: key = Key.K_END; break;
 
      case KeyEvent.VK_KP_LEFT: key = Key.K_KP_LEFTARROW; break;
      case KeyEvent.VK_LEFT: key = Key.K_LEFTARROW; break;
 
      case KeyEvent.VK_KP_RIGHT: key = Key.K_KP_RIGHTARROW; break;
      case KeyEvent.VK_RIGHT: key = Key.K_RIGHTARROW; break;

      case KeyEvent.VK_KP_DOWN: key = Key.K_KP_DOWNARROW; break;
      case KeyEvent.VK_DOWN: key = Key.K_DOWNARROW; break;

      case KeyEvent.VK_KP_UP: key = Key.K_KP_UPARROW; break;
      case KeyEvent.VK_UP: key = Key.K_UPARROW; break; 

      case KeyEvent.VK_ESCAPE: key = Key.K_ESCAPE; break; 

      
      case KeyEvent.VK_ENTER: key = Key.K_ENTER; break; 
//  00652                 case XK_KP_Enter: key = K_KP_ENTER;     break;

      case KeyEvent.VK_TAB: key = Key.K_TAB; break; 

      case KeyEvent.VK_F1: key = Key.K_F1; break;
      case KeyEvent.VK_F2: key = Key.K_F2; break;
      case KeyEvent.VK_F3: key = Key.K_F3; break;
      case KeyEvent.VK_F4: key = Key.K_F4; break;
      case KeyEvent.VK_F5: key = Key.K_F5; break;
      case KeyEvent.VK_F6: key = Key.K_F6; break;
      case KeyEvent.VK_F7: key = Key.K_F7; break;
      case KeyEvent.VK_F8: key = Key.K_F8; break;
      case KeyEvent.VK_F9: key = Key.K_F9; break;
      case KeyEvent.VK_F10: key = Key.K_F10; break;
      case KeyEvent.VK_F11: key = Key.K_F11; break;
      case KeyEvent.VK_F12: key = Key.K_F12; break; 

      case KeyEvent.VK_BACK_SPACE: key = Key.K_BACKSPACE; break; 

      case KeyEvent.VK_DELETE: key = Key.K_DEL; break; 
//  00683                 case XK_KP_Delete: key = K_KP_DEL; break;

      case KeyEvent.VK_PAUSE: key = Key.K_PAUSE; break; 
  
      case KeyEvent.VK_SHIFT: key = Key.K_SHIFT; break; 
      case KeyEvent.VK_CONTROL: key = Key.K_CTRL; break; 
      
      case KeyEvent.VK_ALT:
      case KeyEvent.VK_ALT_GRAPH: key = Key.K_ALT; break;
 
//  00700                 case XK_KP_Begin: key = K_KP_5; break;
//  00701
      case KeyEvent.VK_INSERT: key = Key.K_INS; break;
      // toggle console for DE and US keyboards
      case KeyEvent.VK_DEAD_ACUTE:
      case KeyEvent.VK_CIRCUMFLEX:
      case KeyEvent.VK_DEAD_CIRCUMFLEX: key = '`'; break;
       
      default:
        key = ev.getKeyChar();

        if (key >= 'A' && key <= 'Z')
          key = key - 'A' + 'a';
      break;
    }
    if (key > 255) key = 0;

    return key;
  }  
    
  public void Do_Key_Event(int key, boolean down) {
    Key.Event(key, down, Timer.Milliseconds());
  }
  
  public void centerMouse() {
    robot.mouseMove(win_x + win_w2, win_y + win_h2);
  }
  
  public void installGrabs()
  {
    if (emptyCursor == null) {
      ImageIcon emptyIcon = new ImageIcon(new byte[0]);
      emptyCursor = c.getToolkit().createCustomCursor(emptyIcon.getImage(), new Point(0, 0), "emptyCursor");
    }
    c.setCursor(emptyCursor);
    centerMouse();
  }
  
  public void uninstallGrabs()
  {
    c.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.