void UNavCollision::Setup(UBodySetup* BodySetup) { // Create meshes from cooked data if not already done if (bHasConvexGeometry || BodySetup == NULL) { return; } BodySetupGuid = BodySetup->BodySetupGuid; // Make sure all are cleared before we start ClearCollision(); if (ShouldUseConvexCollision()) { // Find or create cooked navcollision data FByteBulkData* FormatData = GetCookedData(NAVCOLLISION_FORMAT); if (!bForceGeometryRebuild && FormatData) { // if it's not being already processed if (FormatData->IsLocked() == false) { // Create physics objects FNavCollisionDataReader CookedDataReader(*FormatData, TriMeshCollision, ConvexCollision, ConvexShapeIndices); bHasConvexGeometry = true; } } else { GatherCollision(); } } }
void UNavCollision::GatherCollision() { UStaticMesh* StaticMeshOuter = Cast<UStaticMesh>(GetOuter()); // get data from owner if (StaticMeshOuter && StaticMeshOuter->BodySetup) { ClearCollision(); NavigationHelper::GatherCollision(StaticMeshOuter->BodySetup, this); bHasConvexGeometry = true; } }
void KLandMine::Activate(int nCurLoop) { KDoodad::Activate(nCurLoop); if (m_nActiveFrame != 0 && nCurLoop >= m_nActiveFrame) { m_bAttackState = true; m_nActiveFrame = 0; m_dwAttakerID = m_dwThrowerID; m_dwThrowerID = ERROR_ID; m_pScene->ApplyObstacle(this, true); ClearCollision(); CheckCollisionObj(); } }
void UNavCollision::InvalidatePhysicsData() { ClearCollision(); CookedFormatData.FlushData(); }