void FTNoIR_Protocol::sendHeadposeToGame(const double* headpose) { float yaw = getRadsFromDegrees(headpose[Yaw]); float pitch = getRadsFromDegrees(headpose[Pitch]); float roll = getRadsFromDegrees(headpose[Roll]); float tx = headpose[TX] * 10.f; float ty = headpose[TY] * 10.f; float tz = headpose[TZ] * 10.f; shm.lock(); pMemData->data.RawX = 0; pMemData->data.RawY = 0; pMemData->data.RawZ = 0; pMemData->data.RawPitch = 0; pMemData->data.RawYaw = 0; pMemData->data.RawRoll = 0; pMemData->data.X = tx; pMemData->data.Y = ty; pMemData->data.Z = tz; pMemData->data.Yaw = yaw; pMemData->data.Pitch = pitch; pMemData->data.Roll = roll; pMemData->data.X1 = ++pMemData->data.DataID; pMemData->data.X2 = 0; pMemData->data.X3 = 0; pMemData->data.X4 = 0; pMemData->data.Y1 = 0; pMemData->data.Y2 = 0; pMemData->data.Y3 = 0; pMemData->data.Y4 = 0; if (intGameID != pMemData->GameID) { QString gamename; CSV::getGameData(pMemData->GameID, pMemData->table, gamename); pMemData->GameID2 = pMemData->GameID; intGameID = pMemData->GameID; QMutexLocker foo(&this->game_name_mutex); connected_game = gamename; } pMemData->data.DataID += 1; shm.unlock(); }
// // Update Headpose in Game. // void FTNoIR_Protocol::sendHeadposeToGame(double *headpose, double *rawheadpose ) { float virtPosX; float virtPosY; float virtPosZ; float virtRotX; float virtRotY; float virtRotZ; float headPosX; float headPosY; float headPosZ; float headRotX; float headRotY; float headRotZ; // // Scale the Raw measurements to the client measurements. // headRotX = getRadsFromDegrees(rawheadpose[Pitch]); headRotY = getRadsFromDegrees(rawheadpose[Yaw]); headRotZ = getRadsFromDegrees(rawheadpose[Roll]); headPosX = rawheadpose[TX] * 10; headPosY = rawheadpose[TY] * 10; headPosZ = rawheadpose[TZ] * 10; virtRotX = getRadsFromDegrees(headpose[Pitch]); virtRotY = getRadsFromDegrees(headpose[Yaw]); virtRotZ = getRadsFromDegrees(headpose[Roll]); virtPosX = headpose[TX] * 10; virtPosY = headpose[TY] * 10; virtPosZ = headpose[TZ] * 10; shm.lock(); pMemData->data.RawX = headPosX; pMemData->data.RawY = headPosY; pMemData->data.RawZ = headPosZ; pMemData->data.RawPitch = headRotX; pMemData->data.RawYaw = headRotY; pMemData->data.RawRoll = headRotZ; // // pMemData->data.X = virtPosX; pMemData->data.Y = virtPosY; pMemData->data.Z = virtPosZ; pMemData->data.Pitch = virtRotX; pMemData->data.Yaw = virtRotY; pMemData->data.Roll = virtRotZ; // // Leave some values 0 yet... // pMemData->data.X1 = pMemData->data.DataID + 10; pMemData->data.X2 = 0; pMemData->data.X3 = 0; pMemData->data.X4 = 0; pMemData->data.Y1 = 0; pMemData->data.Y2 = 0; pMemData->data.Y3 = 0; pMemData->data.Y4 = 0; // // Check if the handle that was sent to the Game, was changed (on x64, this will be done by the ED-API) // If the "Report Program Name" command arrives (which is a '1', for now), raise the event from here! // // // The game-ID was changed? // if (intGameID != pMemData->GameID) { QString gamename; CSV::getGameData(pMemData->GameID, pMemData->table, gamename); pMemData->GameID2 = pMemData->GameID; intGameID = pMemData->GameID; QMutexLocker foo(&this->game_name_mutex); connected_game = gamename; } pMemData->data.DataID += 1; shm.unlock(); }