# FAutoMeshEngineOnStateChanged

`FAutoMeshEngineOnStateChanged` belongs to the AutoMesh Engine runtime module.

Reprehenderit aliqua ea labore commodo ut amet ad sed et. Lorem adipiscing minim enim elit aliqua esse minim minim cillum et voluptate. Velit ipsum laboris laboris commodo ad adipiscing sint dolor ullamco laboris quis ullamco esse ex. Et esse exercitation eiusmod ipsum labore aliquip sit elit nulla veniam lorem pariatur adipiscing commodo.

## Declaration

```cpp
UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
class AUTO_MESH_ENGINE_API UMyComponent : public UActorComponent
{
    GENERATED_BODY()

public:
    UMyComponent();

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Settings")
    float UpdateInterval = 0.1f;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Settings")
    bool bAutoActivate = true;

    UFUNCTION(BlueprintCallable, Category = "AutoMesh Engine")
    void SetConfiguration(const FMyConfig& Config);

protected:
    virtual void BeginPlay() override;
    virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;

private:
    FMyConfig CurrentConfig;
    float TimeSinceLastUpdate = 0.0f;
};
```

## 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(
    FAutoMesh EngineBasicTest,
    "AutoMesh Engine.Core.BasicFunctionality",
    EAutomationTestFlags::ApplicationContextMask | EAutomationTestFlags::ProductFilter
)

bool FAutoMesh EngineBasicTest::RunTest(const FString& Parameters)
{
    UAutoMesh EngineSubsystem* Subsystem = NewObject<UAutoMesh EngineSubsystem>();
    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;
}
```