# EVoxelCameraState

`EVoxelCameraState` belongs to the VoxelCamera runtime module.

Sit ad irure nisi labore eiusmod minim laboris lorem fugiat minim ad fugiat nostrud labore. In fugiat occaecat ex lorem reprehenderit consequat veniam consequat voluptate. Cillum ea lorem incididunt minim ad minim velit amet nisi aute aliqua cillum ex. Nulla consequat nulla commodo aliqua velit laboris in. Ut magna amet magna voluptate esse ut exercitation duis aute. Velit esse fugiat esse minim laboris reprehenderit sint nostrud veniam et.

## Declaration

```cpp
// Declare delegates for event-driven communication
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnStateChanged, EMyState, NewState);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnProgressUpdated, float, Progress, FString, Message);

UPROPERTY(BlueprintAssignable, Category = "Events")
FOnStateChanged OnStateChanged;

UPROPERTY(BlueprintAssignable, Category = "Events")
FOnProgressUpdated OnProgressUpdated;

// Broadcasting events
void UMyManager::UpdateState(EMyState NewState)
{
    CurrentState = NewState;
    OnStateChanged.Broadcast(NewState);
    OnProgressUpdated.Broadcast(GetProgress(), GetStatusMessage());
}
```

## Members

| Event | Parameters | Description |
| --- | --- | --- |
| OnStateChanged | EMyState NewState | Fired when state transitions |
| OnProgressUpdated | float Progress, FString Message | Fired on progress change |
| OnError | FString ErrorMessage, int32 Code | Fired on error |
| OnInitialized | bool bSuccess | Fired after initialization |

## Example

```cpp
// Unit test example
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
    FVoxelCameraBasicTest,
    "VoxelCamera.Core.BasicFunctionality",
    EAutomationTestFlags::ApplicationContextMask | EAutomationTestFlags::ProductFilter
)

bool FVoxelCameraBasicTest::RunTest(const FString& Parameters)
{
    UVoxelCameraSubsystem* Subsystem = NewObject<UVoxelCameraSubsystem>();
    TestNotNull(TEXT("Subsystem should be created"), Subsystem);

    Subsystem->Initialize();
    TestTrue(TEXT("Subsystem should be initialized"), Subsystem->IsInitialized());

    FMyQueryParams Params;
    Params.Radius = 500.0f;
    TestTrue(TEXT("Query params should be valid"), Params.IsValid());

    return true;
}
```