/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package com.badlogic.gdx.controllers.desktop.ois;
import java.util.ArrayList;
/** JNI wrapper for OIS (Object-oriented Input System).
* @author mzechner
* @author Nathan Sweet */
public class Ois {
private final long inputManagerPtr;
private final ArrayList<OisJoystick> joysticks = new ArrayList();
public Ois (long hwnd) {
inputManagerPtr = createInputManager(hwnd);
String[] names = getJoystickNames(inputManagerPtr);
for (int i = 0, n = names.length; i < n; i++)
joysticks.add(new OisJoystick(createJoystick(inputManagerPtr), names[i]));
}
public ArrayList<OisJoystick> getJoysticks () {
return joysticks;
}
public void update () {
for (int i = 0, n = joysticks.size(); i < n; i++)
joysticks.get(i).update();
}
public int getVersionNumber () {
return getVersionNumber(inputManagerPtr);
}
public String getVersionName () {
return getVersionName(inputManagerPtr);
}
public String getInputSystemName () {
return getInputSystemName(inputManagerPtr);
}
// @off
/*JNI
#include <OISJoyStick.h>
#include <OISInputManager.h>
#include <sstream>
*/
private native long createInputManager (long hwnd); /*
OIS::ParamList params;
#ifndef __APPLE__
std::ostringstream hwndStr;
hwndStr << hwnd;
params.insert(std::make_pair("WINDOW", hwndStr.str()));
#endif
OIS::InputManager *inputManager = OIS::InputManager::createInputSystem(params);
return (jlong)inputManager;
*/
private native String[] getJoystickNames (long inputManagerPtr); /*
OIS::InputManager* inputManager = (OIS::InputManager*)inputManagerPtr;
OIS::DeviceList map = inputManager->listFreeDevices();
int joystickCount = inputManager->getNumberOfDevices(OIS::OISJoyStick);
jobjectArray names = (jobjectArray)env->NewObjectArray(joystickCount, env->FindClass("java/lang/String"), env->NewStringUTF(""));
int index = 0;
for (OIS::DeviceList::iterator i = map.begin(); i != map.end(); ++i) {
if (i->first != OIS::OISJoyStick) continue;
env->SetObjectArrayElement(names, index++, env->NewStringUTF(i->second.c_str()));
}
return names;
*/
private native int getVersionNumber (long inputManagerPtr); /*
OIS::InputManager* inputManager = (OIS::InputManager*)inputManagerPtr;
return inputManager->getVersionNumber();
*/
private native String getVersionName (long inputManagerPtr); /*
OIS::InputManager* inputManager = (OIS::InputManager*)inputManagerPtr;
return env->NewStringUTF(inputManager->getVersionName().c_str());
*/
private native String getInputSystemName (long inputManagerPtr); /*
OIS::InputManager* inputManager = (OIS::InputManager*)inputManagerPtr;
return env->NewStringUTF(inputManager->inputSystemName().c_str());
*/
private native long createJoystick (long inputManagerPtr); /*
OIS::InputManager* inputManager = (OIS::InputManager*)inputManagerPtr;
try {
return (jlong)static_cast<OIS::JoyStick*>(inputManager->createInputObject(OIS::OISJoyStick, true));
} catch (std::exception &ex) {
printf("Error creating joystick: %s\n", ex.what());
fflush(stdout);
return 0;
}
*/
}