Files
BlitzNext/bbruntime/bbinput.cpp
T
blitz-research 08a613ed0e Initial commit.
2014-01-31 08:23:00 +13:00

288 lines
6.5 KiB
C++

#include "std.h"
#include "bbsys.h"
gxInput *gx_input;
gxDevice *gx_mouse;
gxDevice *gx_keyboard;
vector<gxDevice*> gx_joysticks;
static int mouse_x,mouse_y,mouse_z;
static const float JLT=-1.0f/3.0f;
static const float JHT=1.0f/3.0f;
bool input_create(){
if( gx_input=gx_runtime->openInput( 0 ) ){
if( gx_keyboard=gx_input->getKeyboard() ){
if( gx_mouse=gx_input->getMouse() ){
gx_joysticks.clear();
for( int k=0;k<gx_input->numJoysticks();++k ){
gx_joysticks.push_back( gx_input->getJoystick(k) );
}
mouse_x=mouse_y=mouse_z=0;
return true;
}
}
gx_runtime->closeInput( gx_input );
gx_input=0;
}
return false;
}
bool input_destroy(){
gx_joysticks.clear();
gx_runtime->closeInput( gx_input );
gx_input=0;
return true;
}
int bbKeyDown( int n ){
return gx_keyboard->keyDown( n );
}
int bbKeyHit( int n ){
return gx_keyboard->keyHit( n );
}
int bbGetKey(){
return gx_input->toAscii( gx_keyboard->getKey() );
}
int bbWaitKey(){
for(;;){
if( !gx_runtime->idle() ) RTEX( 0 );
if( int key=gx_keyboard->getKey( ) ){
if( key=gx_input->toAscii( key ) ) return key;
}
gx_runtime->delay( 20 );
}
}
void bbFlushKeys(){
gx_keyboard->flush();
}
int bbMouseDown( int n ){
return gx_mouse->keyDown( n );
}
int bbMouseHit( int n ){
return gx_mouse->keyHit( n );
}
int bbGetMouse(){
return gx_mouse->getKey();
}
int bbWaitMouse(){
for(;;){
if( !gx_runtime->idle() ) RTEX( 0 );
if( int key=gx_mouse->getKey() ) return key;
gx_runtime->delay( 20 );
}
}
int bbMouseWait(){
return bbWaitMouse();
}
int bbMouseX(){
return gx_mouse->getAxisState( 0 );
}
int bbMouseY(){
return gx_mouse->getAxisState( 1 );
}
int bbMouseZ(){
return gx_mouse->getAxisState( 2 )/120;
}
int bbMouseXSpeed(){
int dx=bbMouseX()-mouse_x;
mouse_x+=dx;
return dx;
}
int bbMouseYSpeed(){
int dy=bbMouseY()-mouse_y;
mouse_y+=dy;
return dy;
}
int bbMouseZSpeed(){
int dz=bbMouseZ()-mouse_z;
mouse_z+=dz;
return dz;
}
void bbFlushMouse(){
gx_mouse->flush();
}
void bbMoveMouse( int x,int y ){
gx_input->moveMouse( mouse_x=x,mouse_y=y );
}
int bbJoyType( int port ){
return gx_input->getJoystickType( port );
}
int bbJoyDown( int n,int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->keyDown( n );
}
int bbJoyHit( int n,int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->keyHit( n );
}
int bbGetJoy( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->getKey();
}
int bbWaitJoy( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
for(;;){
if( !gx_runtime->idle() ) RTEX( 0 );
if( int key=gx_joysticks[port]->getKey() ) return key;
gx_runtime->delay( 20 );
}
}
float bbJoyX( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->getAxisState(0);
}
float bbJoyY( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->getAxisState(1);
}
float bbJoyZ( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->getAxisState(2);
}
float bbJoyU( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->getAxisState(3);
}
float bbJoyV( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->getAxisState(4);
}
float bbJoyPitch( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->getAxisState(5)*180;
}
float bbJoyYaw( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->getAxisState(6)*180;
}
float bbJoyRoll( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->getAxisState(7)*180;
}
int bbJoyHat( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
return gx_joysticks[port]->getAxisState(8);
}
int bbJoyXDir( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
float t=gx_joysticks[port]->getAxisState(0);
return t<JLT ? -1 : ( t>JHT ? 1 : 0 );
}
int bbJoyYDir( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
float t=gx_joysticks[port]->getAxisState(1);
return t<JLT ? -1 : ( t>JHT ? 1 : 0 );
}
int bbJoyZDir( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
float t=gx_joysticks[port]->getAxisState(2);
return t<JLT ? -1 : ( t>JHT ? 1 : 0 );
}
int bbJoyUDir( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
float t=gx_joysticks[port]->getAxisState(3);
return t<JLT ? -1 : ( t>JHT ? 1 : 0 );
}
int bbJoyVDir( int port ){
if( port<0 || port>=gx_joysticks.size() ) return 0;
float t=gx_joysticks[port]->getAxisState(4);
return t<JLT ? -1 : ( t>JHT ? 1 : 0 );
}
void bbFlushJoy(){
for( int k=0;k<gx_joysticks.size();++k ) gx_joysticks[k]->flush();
}
void bbEnableDirectInput( int enable ){
gx_runtime->enableDirectInput( !!enable );
}
int bbDirectInputEnabled(){
return gx_runtime->directInputEnabled();
}
void input_link( void (*rtSym)( const char *sym,void *pc ) ){
rtSym( "%KeyDown%key",bbKeyDown );
rtSym( "%KeyHit%key",bbKeyHit );
rtSym( "%GetKey",bbGetKey );
rtSym( "%WaitKey",bbWaitKey );
rtSym( "FlushKeys",bbFlushKeys );
rtSym( "%MouseDown%button",bbMouseDown );
rtSym( "%MouseHit%button",bbMouseHit );
rtSym( "%GetMouse",bbGetMouse );
rtSym( "%WaitMouse",bbWaitMouse );
rtSym( "%MouseWait",bbWaitMouse );
rtSym( "%MouseX",bbMouseX );
rtSym( "%MouseY",bbMouseY );
rtSym( "%MouseZ",bbMouseZ );
rtSym( "%MouseXSpeed",bbMouseXSpeed );
rtSym( "%MouseYSpeed",bbMouseYSpeed );
rtSym( "%MouseZSpeed",bbMouseZSpeed );
rtSym( "FlushMouse",bbFlushMouse );
rtSym( "MoveMouse%x%y",bbMoveMouse );
rtSym( "%JoyType%port=0",bbJoyType );
rtSym( "%JoyDown%button%port=0",bbJoyDown );
rtSym( "%JoyHit%button%port=0",bbJoyHit );
rtSym( "%GetJoy%port=0",bbGetJoy );
rtSym( "%WaitJoy%port=0",bbWaitJoy );
rtSym( "%JoyWait%port=0",bbWaitJoy );
rtSym( "#JoyX%port=0",bbJoyX );
rtSym( "#JoyY%port=0",bbJoyY );
rtSym( "#JoyZ%port=0",bbJoyZ );
rtSym( "#JoyU%port=0",bbJoyU );
rtSym( "#JoyV%port=0",bbJoyV );
rtSym( "#JoyPitch%port=0",bbJoyPitch );
rtSym( "#JoyYaw%port=0",bbJoyYaw );
rtSym( "#JoyRoll%port=0",bbJoyRoll );
rtSym( "%JoyHat%port=0",bbJoyHat );
rtSym( "%JoyXDir%port=0",bbJoyXDir );
rtSym( "%JoyYDir%port=0",bbJoyYDir );
rtSym( "%JoyZDir%port=0",bbJoyZDir );
rtSym( "%JoyUDir%port=0",bbJoyUDir );
rtSym( "%JoyVDir%port=0",bbJoyVDir );
rtSym( "FlushJoy",bbFlushJoy );
rtSym( "EnableDirectInput%enable",bbEnableDirectInput );
rtSym( "%DirectInputEnabled",bbDirectInputEnabled );
}