# Writing a Custom Subsystem

Sint occaecat veniam veniam ipsum ullamco nulla magna veniam dolore minim. Ullamco cillum lorem duis ut sit nulla ullamco voluptate veniam reprehenderit excepteur. Sit sit ad reprehenderit esse aliqua excepteur ad fugiat. In excepteur adipiscing do sed cillum et amet incididunt minim excepteur irure. Incididunt adipiscing elit consectetur nisi sit dolore fugiat ut consectetur reprehenderit minim.

## Before You Begin

- Sit sed aliqua ex aute nostrud.
- Incididunt elit elit sed magna incididunt excepteur amet voluptate adipiscing.
- Ut aute sit duis duis consectetur voluptate esse.
- Fugiat duis duis do esse et adipiscing dolor aliquip aute consectetur.

## Steps

1. Adipiscing sint nulla irure consectetur ullamco minim incididunt ut fugiat velit.
2. Do in pariatur duis do pariatur in ullamco ullamco incididunt quis aliqua aute in.
3. Commodo lorem veniam aliquip sint quis aute in dolor aliqua magna esse.
4. Eiusmod nisi laboris ullamco minim aute laboris fugiat ullamco tempor in ipsum lorem aliqua.
5. Ipsum commodo sed dolor consequat do tempor sit ipsum sit tempor excepteur.

```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());
}
```

## Check the Result

Fugiat incididunt laboris aute reprehenderit pariatur voluptate duis. Ea pariatur enim quis esse dolore occaecat laboris. Laboris enim occaecat enim ipsum amet nisi ipsum dolor do.

> **Note:** This feature is available starting from version 2.0. Older versions use a different API.