Files
fs2open.github.com/code/io/trackir.cpp
T
2008-03-20 18:37:53 +00:00

164 lines
3.3 KiB
C++

#include "globalincs/pstypes.h"
#include "io/trackir.h"
#include "osapi/osapi.h"
#ifdef WIN32
#include <windows.h>
#endif
// CALLING THESE FUNCTIONS DIRECTLY IS VERY VERY DANGEROUS.
// Use TrackIR functions sans "_Proc" since they (hopefully) won't cause any crashes if the function pointers are NULL
// - Swifty
TRACKIR_INIT_FUNC TrackIR_Init_Proc = NULL; // Returns 0 if TrackIR has successfully initialized. Non-zero if error.
TRACKIR_QUERY_FUNC TrackIR_Query_Proc = NULL; // Must be called each frame before GetYaw and GetPitch
TRACKIR_GETYAW_FUNC TrackIR_GetYaw_Proc = NULL; // Returns a float between -1.0 and 1.0
TRACKIR_GETPITCH_FUNC TrackIR_GetPitch_Proc = NULL; // Returns a float between -1.0 and 1.0
TRACKIR_GETX_FUNC TrackIR_GetX_Proc = NULL;
TRACKIR_GETY_FUNC TrackIR_GetY_Proc = NULL;
TRACKIR_GETZ_FUNC TrackIR_GetZ_Proc = NULL;
TRACKIR_SHUTDOWN_FUNC TrackIR_ShutDown_Proc = NULL; // Must be called before the application closes
#ifdef WIN32
HMODULE trackIR_dll;
#endif
// Zero if TrackIR is not installed or is disabled. Non-zero otherwise
int trackir_enabled;
void initialize_trackir()
{
#ifdef WIN32
char dllPath[512];
GetCurrentDirectory(511, dllPath);
strcat(dllPath, "\\");
strcat(dllPath, "FS2_TrackIR.dll");
trackIR_dll = ::LoadLibrary(dllPath);
if(trackIR_dll != NULL)
{
TrackIR_Init_Proc = (TRACKIR_INIT_FUNC)GetProcAddress(trackIR_dll, "FS2_TrackIR_Init");
TrackIR_Query_Proc = (TRACKIR_QUERY_FUNC)GetProcAddress(trackIR_dll, "FS2_TrackIR_Query");
TrackIR_GetPitch_Proc = (TRACKIR_GETPITCH_FUNC)GetProcAddress(trackIR_dll, "FS2_TrackIR_GetPitch");
TrackIR_GetYaw_Proc = (TRACKIR_GETYAW_FUNC)GetProcAddress(trackIR_dll, "FS2_TrackIR_GetYaw");
TrackIR_GetX_Proc = (TRACKIR_GETX_FUNC)GetProcAddress(trackIR_dll, "FS2_TrackIR_GetX");
TrackIR_GetY_Proc = (TRACKIR_GETY_FUNC)GetProcAddress(trackIR_dll, "FS2_TrackIR_GetY");
TrackIR_GetZ_Proc = (TRACKIR_GETZ_FUNC)GetProcAddress(trackIR_dll, "FS2_TrackIR_GetZ");
TrackIR_ShutDown_Proc = (TRACKIR_SHUTDOWN_FUNC)GetProcAddress(trackIR_dll, "FS2_TrackIR_ShutDown");
if(TrackIR_Init_Proc == NULL)
{
trackir_enabled = 0;
return;
}
}
else
{
trackir_enabled = 0;
return;
}
if(!TrackIR_Init((HWND)os_get_window()))
{
trackir_enabled = 1;
return;
}
#endif
trackir_enabled = 0;
}
int TrackIR_Init( HWND hwnd)
{
if(TrackIR_Init_Proc == NULL)
{
return -1; // returning a -1 since the DLL proc will return non-zero values on error and zero upon success.
}
else
{
return TrackIR_Init_Proc(hwnd);
}
}
int TrackIR_Query()
{
if(TrackIR_Query_Proc == NULL)
{
return 1;
}
else
{
return TrackIR_Query_Proc();
}
}
float TrackIR_GetYaw()
{
if(TrackIR_GetYaw_Proc == NULL)
{
return 0;
}
else
{
return TrackIR_GetYaw_Proc();
}
}
float TrackIR_GetPitch()
{
if(TrackIR_GetPitch_Proc == NULL)
{
return 0;
}
else
{
return TrackIR_GetPitch_Proc();
}
}
float TrackIR_GetX()
{
if(TrackIR_GetX_Proc == NULL)
{
return 0;
}
else
{
return TrackIR_GetX_Proc();
}
}
float TrackIR_GetY()
{
if(TrackIR_GetY_Proc == NULL)
{
return 0;
}
else
{
return TrackIR_GetY_Proc();
}
}
float TrackIR_GetZ()
{
if(TrackIR_GetZ_Proc == NULL)
{
return 0;
}
else
{
return TrackIR_GetZ_Proc();
}
}
int TrackIR_ShutDown()
{
if(TrackIR_ShutDown_Proc == NULL)
{
return 0;
}
else
{
return TrackIR_ShutDown_Proc();
}
}