bool UPaperTileMapComponent::SetTileMap(class UPaperTileMap* NewTileMap) { if (NewTileMap != TileMap) { // Don't allow changing the tile map if we are "static". AActor* Owner = GetOwner(); if (!IsRegistered() || (Owner == nullptr) || (Mobility != EComponentMobility::Static)) { TileMap = NewTileMap; // Need to send this to render thread at some point MarkRenderStateDirty(); // Update physics representation right away RecreatePhysicsState(); // Since we have new mesh, we need to update bounds UpdateBounds(); return true; } } return false; }
void USkeletalMeshComponent::SetSkeletalMesh(USkeletalMesh* InSkelMesh) { if (InSkelMesh == SkeletalMesh) { // do nothing if the input mesh is the same mesh we're already using. return; } UPhysicsAsset* OldPhysAsset = GetPhysicsAsset(); Super::SetSkeletalMesh(InSkelMesh); #if WITH_EDITOR ValidateAnimation(); #endif if (GetPhysicsAsset() != OldPhysAsset && IsPhysicsStateCreated()) { RecreatePhysicsState(); } UpdateHasValidBodies(); InitAnim(false); #if WITH_APEX_CLOTHING ValidateClothingActors(); #endif }
void UPaperFlipbookComponent::FlipbookChangedPhysicsState() { // If the frame has changed and we're using animated collision, we need to recreate that state as well RecreatePhysicsState(); // We just totally changed the physics setup so update overlaps too UpdateOverlaps(); }
void UPaperTileMapComponent::ResizeMap(int32 NewWidthInTiles, int32 NewHeightInTiles) { if (OwnsTileMap()) { TileMap->ResizeMap(NewWidthInTiles, NewHeightInTiles); MarkRenderStateDirty(); RecreatePhysicsState(); UpdateBounds(); } }
UPaperTileLayer* UPaperTileMapComponent::AddNewLayer() { UPaperTileLayer* Result = nullptr; if (OwnsTileMap()) { Result = TileMap->AddNewLayer(); MarkRenderStateDirty(); RecreatePhysicsState(); UpdateBounds(); } return Result; }
void UDestructibleComponent::SetDestructibleMesh(class UDestructibleMesh* NewMesh) { #if WITH_APEX uint32 ChunkCount = NewMesh ? NewMesh->ApexDestructibleAsset->getChunkCount() : 0; ChunkInfos.Reset(ChunkCount); ChunkInfos.AddZeroed(ChunkCount); PhysxChunkUserData.Reset(ChunkCount); PhysxChunkUserData.AddZeroed(ChunkCount); #endif // WITH_APEX Super::SetSkeletalMesh( NewMesh ); #if WITH_EDITORONLY_DATA // If the SkeletalMesh has changed, update our transient value too. DestructibleMesh = GetDestructibleMesh(); #endif // WITH_EDITORONLY_DATA RecreatePhysicsState(); }