void CClientPathNode::DoPulse(void) { list<CClientEntity*>::iterator iter = m_List.begin(); for (; iter != m_List.end(); iter++) { // TEST! if ((*iter)->GetType() == CCLIENTVEHICLE) { CClientVehicle* pVehicle = static_cast<CClientVehicle*>(*iter); CVector vecMoveSpeed; pVehicle->GetMoveSpeed(vecMoveSpeed); vecMoveSpeed.fZ = 0.0f; pVehicle->SetMoveSpeed(vecMoveSpeed); } (*iter)->SetPosition(m_vecPosition); } }
/////////////////////////////////////////////////////////////// // // CClientModelCacheManagerImpl::ProcessVehicleList // /////////////////////////////////////////////////////////////// void CClientModelCacheManagerImpl::ProcessVehicleList(std::map<ushort, float>& outNeedCacheList, const std::vector<CClientVehicle*>& vehicleList, float fMaxStreamDistanceSq) { const ulong ulTimeNow = CClientTime::GetTime(); for (std::vector<CClientVehicle*>::const_iterator iter = vehicleList.begin(); iter != vehicleList.end(); ++iter) { CClientVehicle* pVehicle = *iter; const ushort usModelId = pVehicle->GetModel(); if (usModelId < 400 || usModelId > 611) continue; // Check if currently within distance { // Check distance CVector vecPosition; pVehicle->GetPosition(vecPosition); float fDistSq = (m_vecCameraPos - vecPosition).LengthSquared(); if (fDistSq < fMaxStreamDistanceSq) { // Add model to needed list InsertIntoNeedCacheList(outNeedCacheList, usModelId, fDistSq); AddProcessStat("p", true, PURESYNC_TYPE_NONE, usModelId, vecPosition, vecPosition); continue; } } CClientPlayer* pDriver = DynamicCast<CClientPlayer>(pVehicle->GetControllingPlayer()); if (!pDriver) continue; // Check if will be within distance soon ePuresyncType syncType = pDriver->GetLastPuresyncType(); if (syncType == PURESYNC_TYPE_PURESYNC || syncType == PURESYNC_TYPE_LIGHTSYNC) { ulong ulSyncAge = ulTimeNow - pDriver->GetLastPuresyncTime(); if (ulSyncAge < 8000) { // Get velocity from somewhere CVector vecVelocity; if (syncType == PURESYNC_TYPE_LIGHTSYNC) vecVelocity = pDriver->GetLightsyncCalcedVelocity(); else { pVehicle->GetMoveSpeed(vecVelocity); vecVelocity *= m_fGameFps; } // Extrapolate position for 2 seconds time float fSecondsToAdd = std::min(6000UL, ulSyncAge + 2000) * 0.001f; CVector vecPosition; pVehicle->GetPosition(vecPosition); CVector vecNewPosition = vecPosition + vecVelocity * fSecondsToAdd; // Check distance float fDistSq = (m_vecCameraPos - vecNewPosition).LengthSquared(); if (fDistSq < fMaxStreamDistanceSq) { // Add model to needed list InsertIntoNeedCacheList(outNeedCacheList, usModelId, fDistSq); AddProcessStat("l", true, syncType, usModelId, vecPosition, vecNewPosition); continue; } AddProcessStat("n", false, syncType, usModelId, vecPosition, vecNewPosition); continue; } } } }
void CClientPacketRecorder::RecordLocalData(CClientPlayer* pLocalPlayer) { if (m_bRecording && m_szFilename) { // Open our file FILE* pFile = fopen(m_szFilename, "ab+"); if (pFile) { // Write our timestamp if (m_bFrameBased) { long lFrameStamp = m_lFrames - m_lRelative; fwrite(&lFrameStamp, sizeof(long), 1, pFile); } else { long lTimeStamp = CClientTime::GetTime() - m_lRelative; fwrite(&lTimeStamp, sizeof(long), 1, pFile); } // fwrite ( &ulTimeStamp, sizeof ( unsigned long ), 1, pFile ); // Write the packet ID fputc(0xFE, pFile); // Grab the vehicle CClientVehicle* pVehicle = pLocalPlayer->GetOccupiedVehicle(); if (pVehicle) { // Read out the matrix, movespeed and turnspeed CMatrix matVehicle; CVector vecMoveSpeed; CVector vecTurnSpeed; pVehicle->GetMatrix(matVehicle); pVehicle->GetMoveSpeed(vecMoveSpeed); pVehicle->GetTurnSpeed(vecTurnSpeed); float fHealth = pVehicle->GetHealth(); // Write it fwrite(&matVehicle.vRight.fX, sizeof(float), 1, pFile); fwrite(&matVehicle.vRight.fY, sizeof(float), 1, pFile); fwrite(&matVehicle.vRight.fZ, sizeof(float), 1, pFile); fwrite(&matVehicle.vFront.fX, sizeof(float), 1, pFile); fwrite(&matVehicle.vFront.fY, sizeof(float), 1, pFile); fwrite(&matVehicle.vFront.fZ, sizeof(float), 1, pFile); fwrite(&matVehicle.vUp.fX, sizeof(float), 1, pFile); fwrite(&matVehicle.vUp.fY, sizeof(float), 1, pFile); fwrite(&matVehicle.vUp.fZ, sizeof(float), 1, pFile); fwrite(&matVehicle.vPos.fX, sizeof(float), 1, pFile); fwrite(&matVehicle.vPos.fY, sizeof(float), 1, pFile); fwrite(&matVehicle.vPos.fZ, sizeof(float), 1, pFile); fwrite(&vecMoveSpeed.fX, sizeof(float), 1, pFile); fwrite(&vecMoveSpeed.fY, sizeof(float), 1, pFile); fwrite(&vecMoveSpeed.fZ, sizeof(float), 1, pFile); fwrite(&vecTurnSpeed.fX, sizeof(float), 1, pFile); fwrite(&vecTurnSpeed.fY, sizeof(float), 1, pFile); fwrite(&vecTurnSpeed.fZ, sizeof(float), 1, pFile); fwrite(&fHealth, sizeof(float), 1, pFile); // Write the controller state CControllerState cs; g_pGame->GetPad()->GetCurrentControllerState(&cs); fwrite(&cs, sizeof(CControllerState), 1, pFile); } // Close the file fclose(pFile); } } }