// Copyright IHY. Vertical Partition Streaming plugin. #include "VerticalPartitionVolume.h" #include "VerticalPartitionSettings.h" #include "VerticalPartitionLog.h" #include "Components/BoxComponent.h" #if WITH_EDITOR TFunction FVerticalPartitionEditorBridge::Handler; #endif AVerticalPartitionVolume::AVerticalPartitionVolume() { PrimaryActorTick.bCanEverTick = false; Box = CreateDefaultSubobject(TEXT("Bounds")); SetRootComponent(Box); Box->SetBoxExtent(FVector(5000.f, 5000.f, 25000.f)); Box->SetCollisionEnabled(ECollisionEnabled::NoCollision); Box->SetCollisionProfileName(TEXT("NoCollision")); Box->SetGenerateOverlapEvents(false); Box->ShapeColor = FColor(80, 200, 255); Box->bDrawOnlyIfSelected = false; Box->SetHiddenInGame(true); // Seed per-volume settings from project defaults. if (const UVerticalPartitionDeveloperSettings* Project = UVerticalPartitionDeveloperSettings::Get()) { Settings = Project->DefaultSettings; } } FBox AVerticalPartitionVolume::GetVolumeBounds() const { if (!Box) { return FBox(ForceInit); } const FVector Extent = Box->GetScaledBoxExtent(); const FVector Origin = Box->GetComponentLocation(); return FBox(Origin - Extent, Origin + Extent); } void AVerticalPartitionVolume::OnConstruction(const FTransform& Transform) { Super::OnConstruction(Transform); } #if WITH_EDITOR void AVerticalPartitionVolume::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) { Super::PostEditChangeProperty(PropertyChangedEvent); // Keep preview drawing fresh when ranges/segmentation change. if (Box) { Box->MarkRenderStateDirty(); } } void AVerticalPartitionVolume::AnalyzeCurrentLevel() { FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::Analyze); } void AVerticalPartitionVolume::BuildVerticalPartition(){ FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::Build); } void AVerticalPartitionVolume::RebuildChangedCells() { FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::RebuildChangedCells); } void AVerticalPartitionVolume::RebuildHLOD() { FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::RebuildHLOD); } void AVerticalPartitionVolume::ValidateCells() { FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::Validate); } void AVerticalPartitionVolume::PreviewChunks() { FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::PreviewChunks); } void AVerticalPartitionVolume::SpawnHLODPreview() { FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::SpawnHLODPreview); } void AVerticalPartitionVolume::ClearPreview() { FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::ClearPreview); } void AVerticalPartitionVolume::CommitConversion() { FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::Commit); } void AVerticalPartitionVolume::RestoreFromBackup() { FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::RestoreBackup); } void AVerticalPartitionVolume::ClearGeneratedData() { FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::ClearGenerated); } void AVerticalPartitionVolume::DumpReport() { FVerticalPartitionEditorBridge::Execute(this, EVerticalPartitionAction::DumpReport); } #endif