171 lines
3.8 KiB
Java
171 lines
3.8 KiB
Java
//**********************************************************************************************
|
|
// (C) Copyright 2002 by Dipl. Phys. Joerg Plewe, HARDCODE Development
|
|
// All rights reserved. Copying, modification,
|
|
// distribution or publication without the prior written
|
|
// consent of the author is prohibited.
|
|
//
|
|
// Created on 26. Dezember 2001, 00:40
|
|
//**********************************************************************************************
|
|
package de.hardcode.jxinput.directinput;
|
|
|
|
import de.hardcode.jxinput.JXInputDevice;
|
|
import de.hardcode.jxinput.Axis;
|
|
import de.hardcode.jxinput.Directional;
|
|
import de.hardcode.jxinput.Button;
|
|
|
|
/**
|
|
*
|
|
* @author Herkules
|
|
*/
|
|
public class DirectInputDevice implements JXInputDevice
|
|
{
|
|
int mDeviceIdx;
|
|
|
|
private DIAxis[] mAxes;
|
|
private DIButton[] mButtons;
|
|
private DIDirectional[] mDirectionals;
|
|
|
|
/**
|
|
* The number of DirectInput devices available with the driver.
|
|
*/
|
|
public static int getNumberOfDevices()
|
|
{
|
|
if ( DirectInputDriver.isAvailable() )
|
|
return DirectInputDriver.getNumberOfDevices();
|
|
return 0;
|
|
}
|
|
|
|
|
|
/**
|
|
* Update the state of all devices.
|
|
*/
|
|
public static void update()
|
|
{
|
|
if ( DirectInputDriver.isAvailable() )
|
|
DirectInputDriver.nativeupdate();
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Creates a new instance of DirectInputDevice.
|
|
*/
|
|
public DirectInputDevice( int devidx )
|
|
{
|
|
mDeviceIdx = devidx;
|
|
|
|
init();
|
|
}
|
|
|
|
/**
|
|
* Reset the DirectInput connection.
|
|
*/
|
|
public static void reset()
|
|
{
|
|
if ( DirectInputDriver.isAvailable() )
|
|
DirectInputDriver.reset();
|
|
}
|
|
|
|
|
|
/**
|
|
* Initialisation of fields.
|
|
*/
|
|
private final void init()
|
|
{
|
|
//
|
|
// Allocate arrays for max. number of features
|
|
//
|
|
mAxes = new DIAxis [ getMaxNumberOfAxes() ];
|
|
mButtons = new DIButton [ getMaxNumberOfButtons() ];
|
|
mDirectionals = new DIDirectional [ getMaxNumberOfDirectionals() ];
|
|
|
|
//
|
|
// Fill arrays due to the state of the driver.
|
|
//
|
|
for ( int i = 0; i < mAxes.length; ++i )
|
|
{
|
|
if ( DirectInputDriver.isAxisAvailable( mDeviceIdx, i ) )
|
|
mAxes[ i ] = new DIAxis( mDeviceIdx, i );
|
|
}
|
|
|
|
for ( int i = 0; i < mButtons.length; ++i )
|
|
{
|
|
if ( DirectInputDriver.isButtonAvailable( mDeviceIdx, i ) )
|
|
mButtons[ i ] = new DIButton( mDeviceIdx, i );
|
|
}
|
|
|
|
for ( int i = 0; i < mDirectionals.length; ++i )
|
|
{
|
|
if ( DirectInputDriver.isDirectionalAvailable( mDeviceIdx, i ) )
|
|
mDirectionals[ i ] = new DIDirectional( mDeviceIdx, i );
|
|
}
|
|
}
|
|
|
|
/** Devices may have a name. */
|
|
public String getName()
|
|
{
|
|
String name = DirectInputDriver.getName( mDeviceIdx );
|
|
if ( null == name )
|
|
return "Win32 DirectInput Joystick";
|
|
return name;
|
|
}
|
|
|
|
|
|
/** Actual number of available buttons. */
|
|
public int getNumberOfButtons()
|
|
{
|
|
return DirectInputDriver.getNumberOfButtons( mDeviceIdx );
|
|
}
|
|
|
|
/** Actual number of available axes. */
|
|
public int getNumberOfAxes()
|
|
{
|
|
return DirectInputDriver.getNumberOfAxes( mDeviceIdx );
|
|
}
|
|
|
|
/** Actual number of available directional features. */
|
|
public int getNumberOfDirectionals()
|
|
{
|
|
return DirectInputDriver.getNumberOfDirectionals( mDeviceIdx );
|
|
}
|
|
|
|
/** Maximum number of buttons as an upper bound for index values. */
|
|
public int getMaxNumberOfButtons()
|
|
{
|
|
return DirectInputDriver.getMaxNumberOfButtons();
|
|
}
|
|
|
|
/** Maximum number of axes as an upper bound for index values. */
|
|
public int getMaxNumberOfAxes()
|
|
{
|
|
return DirectInputDriver.getMaxNumberOfAxes();
|
|
}
|
|
|
|
/** Maximum number of available directional features. */
|
|
public int getMaxNumberOfDirectionals()
|
|
{
|
|
return DirectInputDriver.getMaxNumberOfDirectionals();
|
|
}
|
|
|
|
|
|
public Axis getAxis(int idx)
|
|
{
|
|
return mAxes[ idx ];
|
|
}
|
|
|
|
public Button getButton(int idx)
|
|
{
|
|
return mButtons[ idx ];
|
|
}
|
|
|
|
public Directional getDirectional(int idx)
|
|
{
|
|
return mDirectionals[ idx ];
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|