// // Update Headpose in Game. // void FTNoIR_Protocol::sendHeadposeToGame( const double *headpose ) { virtSCRotX = -headpose[Pitch]; // degrees virtSCRotY = -headpose[Yaw]; virtSCRotZ = headpose[Roll]; virtSCPosX = headpose[TX]/100.f; // cm to meters virtSCPosY = headpose[TY]/100.f; virtSCPosZ = -headpose[TZ]/100.f; // // It's only useful to send data, if the connection was made. // if (!blnSimConnectActive) { if (SUCCEEDED(simconnect_open(&hSimConnect, "FaceTrackNoIR", NULL, 0, 0, 0))) { qDebug() << "FTNoIR_Protocol::sendHeadposeToGame() says: SimConnect active!"; //set up the events we want to listen for HRESULT hr; simconnect_subscribetosystemevent(hSimConnect, EVENT_PING, "Frame"); hr = simconnect_mapclienteventtosimevent(hSimConnect, EVENT_INIT, ""); hr = simconnect_addclienteventtonotificationgroup(hSimConnect, GROUP0, EVENT_INIT, false); hr = simconnect_setnotificationgrouppriority(hSimConnect, GROUP0, SIMCONNECT_GROUP_PRIORITY_HIGHEST); ////hr = SimConnect_MapInputEventToClientEvent(hSimConnect, INPUT0, "VK_COMMA", EVENT_INIT); ////hr = SimConnect_SetInputGroupState(hSimConnect, INPUT0, SIMCONNECT_STATE_ON); blnSimConnectActive = true; } } else { // // Write the 6DOF-data to FSX // // // // Only do this when the data has changed. This way, the HAT-switch can be used when tracking is OFF. // // // if ((prevPosX != virtPosX) || (prevPosY != virtPosY) || (prevPosZ != virtPosZ) || // (prevRotX != virtRotX) || (prevRotY != virtRotY) || (prevRotZ != virtRotZ)) { //// if (S_OK == simconnect_set6DOF(hSimConnect, virtPosX, virtPosY, virtPosZ, virtRotX, virtRotZ, virtRotY)) { //// qDebug() << "FTNoIR_Protocol::run() says: SimConnect data written!"; //// } // } // // prevPosX = virtPosX; // prevPosY = virtPosY; // prevPosZ = virtPosZ; // prevRotX = virtRotX; // prevRotY = virtRotY; // prevRotZ = virtRotZ; if (SUCCEEDED(simconnect_calldispatch(hSimConnect, processNextSimconnectEvent, NULL))) { qDebug() << "FTNoIR_Protocol::sendHeadposeToGame() says: Dispatching"; } else { qDebug() << "FTNoIR_Protocol::sendHeadposeToGame() says: Error Dispatching!"; } } }
// // Update Headpose in Game. // void FTNoIR_Protocol::sendHeadposeToGame( THeadPoseData *headpose, THeadPoseData *rawheadpose ) { PDWORD_PTR MsgResult = 0; virtSCRotX = -1.0f * headpose->pitch; // degrees virtSCRotY = -1.0f * headpose->yaw; virtSCRotZ = headpose->roll; virtSCPosX = headpose->x/100.f; // cm to meters virtSCPosY = headpose->y/100.f; virtSCPosZ = -1.0f * headpose->z/100.f; // // It's only useful to send data, if the connection was made. // if (!blnSimConnectActive) { if (SUCCEEDED(simconnect_open(&hSimConnect, "FaceTrackNoIR", NULL, 0, 0, 0))) { qDebug() << "FTNoIR_Protocol::sendHeadposeToGame() says: SimConnect active!"; //set up the events we want to listen for HRESULT hr; simconnect_subscribetosystemevent(hSimConnect, EVENT_PING, "Frame"); hr = simconnect_mapclienteventtosimevent(hSimConnect, EVENT_INIT, ""); hr = simconnect_addclienteventtonotificationgroup(hSimConnect, GROUP0, EVENT_INIT, false); hr = simconnect_setnotificationgrouppriority(hSimConnect, GROUP0, SIMCONNECT_GROUP_PRIORITY_HIGHEST); ////hr = SimConnect_MapInputEventToClientEvent(hSimConnect, INPUT0, "VK_COMMA", EVENT_INIT); ////hr = SimConnect_SetInputGroupState(hSimConnect, INPUT0, SIMCONNECT_STATE_ON); blnSimConnectActive = true; if (hMainWindow != NULL) { SendMessageTimeout( (HWND) hMainWindow, RegisterWindowMessageA(FT_PROGRAMID), 0, 0, 0, 2000, MsgResult); } } } else { // // Write the 6DOF-data to FSX // // // // Only do this when the data has changed. This way, the HAT-switch can be used when tracking is OFF. // // // if ((prevPosX != virtPosX) || (prevPosY != virtPosY) || (prevPosZ != virtPosZ) || // (prevRotX != virtRotX) || (prevRotY != virtRotY) || (prevRotZ != virtRotZ)) { //// if (S_OK == simconnect_set6DOF(hSimConnect, virtPosX, virtPosY, virtPosZ, virtRotX, virtRotZ, virtRotY)) { //// qDebug() << "FTNoIR_Protocol::run() says: SimConnect data written!"; //// } // } // // prevPosX = virtPosX; // prevPosY = virtPosY; // prevPosZ = virtPosZ; // prevRotX = virtRotX; // prevRotY = virtRotY; // prevRotZ = virtRotZ; if SUCCEEDED(simconnect_calldispatch(hSimConnect, processNextSimconnectEvent, NULL)) { qDebug() << "FTNoIR_Protocol::sendHeadposeToGame() says: Dispatching"; } else { qDebug() << "FTNoIR_Protocol::sendHeadposeToGame() says: Error Dispatching!"; } }