protected Input() {
		System.out.println("Starting input...");

		// keyboard events
		for (Field f : KeyEvent.class.getDeclaredFields()) {
            try {
                if (java.lang.reflect.Modifier.isStatic(f.getModifiers()) && (f.getType() == int.class || f.getType() == short.class) && f.getName().startsWith("VK") ) {
                    f.setAccessible(true);
                    String name=f.getName();
                    int id = f.getInt(null); 
                    keyNames.put(name,Input.FIRST_KB_BUTTON+id);
                }
            } catch (IllegalArgumentException | IllegalAccessException ex) {
                ex.printStackTrace();
            }
        }

		// mouse events
		keyNames.put("mouse_left",   FIRST_MOUSE_BUTTON+0);
		keyNames.put("mouse_middle", FIRST_MOUSE_BUTTON+1);
		keyNames.put("mouse_right",  FIRST_MOUSE_BUTTON+2);

		keyNames.put("mouse_xpos", FIRST_MOUSE_AXIS+0);
		keyNames.put("mouse_xneg", FIRST_MOUSE_AXIS+1);
		keyNames.put("mouse_ypos", FIRST_MOUSE_AXIS+2);
		keyNames.put("mouse_yneg", FIRST_MOUSE_AXIS+3);
		keyNames.put("mouse_wpos", FIRST_MOUSE_AXIS+4);
		keyNames.put("mouse_wneg", FIRST_MOUSE_AXIS+5);

		// axis data
		for(int i=0;i<TOTAL_KEYS;++i) {
		    data.items_new[i].rangeMax=1.0f;
		    data.items_new[i].rangeMin=0.0f;
		    data.items_new[i].rangeHalf=0.5f;
		    data.items_old[i].rangeMax=1.0f;
		    data.items_old[i].rangeMin=0.0f;
		    data.items_old[i].rangeHalf=0.5f;
		}
/*
		for(int i=0;i<NUM_MOUSE_AXIES;++i) {
			data.items_new[FIRST_MOUSE_AXIS+i].rangeMax =2.0f;
			data.items_new[FIRST_MOUSE_AXIS+i].rangeMin = 0.0f;
			data.items_new[FIRST_MOUSE_AXIS+i].rangeHalf=1.0f;
			data.items_old[FIRST_MOUSE_AXIS+i].rangeMax =2.0f;
			data.items_old[FIRST_MOUSE_AXIS+i].rangeMin = 0.0f;
			data.items_old[FIRST_MOUSE_AXIS+i].rangeHalf=1.0f;
		}*/

		System.out.println("Ready...");
	}