> For the complete documentation index, see [llms.txt](https://dante-3.gitbook.io/dante-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dante-3.gitbook.io/dante-docs/indicator-system-plugin/indicator-setup-config.md).

# Indicator Setup Config

**Headers:**

* `IndicatorSystem/Public/IndicatorSetupConfig.h`
* `IndicatorSystem/Public/IndicatorSetupActions.h`
* `IndicatorSystem/Public/Actions/*.h`

**Module:** `IndicatorSystem`

***

## Overview

`UIndicatorSetupConfig` is a **Primary Data Asset** that acts as the configuration file for an indicator. Instead of setting every property of a `UIndicatorDescriptor` in code, you compose a config asset in the editor from a list of small, reusable **Setup Action** objects. At runtime, `UIndicatorManagerComponent` executes each action in order during `BeginPlay`, applying their settings onto the descriptor.

This design means:

* **Zero code changes** to adjust indicator appearance — edit the data asset.
* **Reuse** the same config across multiple actor types.
* **Override** individual aspects by swapping or reordering actions.

***

## UIndicatorSetupConfig&#x20;

```cpp
UCLASS(BlueprintType, DisplayName = "Indicator Setup Config")
class UIndicatorSetupConfig : public UPrimaryDataAsset
```

### Property

```cpp
UPROPERTY(EditDefaultsOnly, Instanced, Category = IndicatorConfigs)
TArray<TObjectPtr<UIndicatorSetupActions>> Configs;
```

An ordered array of `UIndicatorSetupActions` instances. The `Instanced` specifier means each action is stored inline in the asset — you add them directly in the Details panel via the **+** button and configure their properties in-place.

***

## Execution Flow

```
Actor spawns → BeginPlay
  │
  ├─ UIndicatorManagerComponent creates UIndicatorDescriptor (all defaults)
  │
  ├─ Configs[0]->OnIndicatorSetupActivated(Manager, Descriptor)
  ├─ Configs[1]->OnIndicatorSetupActivated(Manager, Descriptor)
  ├─ Configs[N]->OnIndicatorSetupActivated(Manager, Descriptor)
  │
  └─ Descriptor registered with UIndicatorSubsystem → rendering begins

Actor destroyed → EndPlay
  │
  ├─ Configs[0]->OnIndicatorSetupDeactivated(Manager, Descriptor)
  ├─ Configs[1]->OnIndicatorSetupDeactivated(Manager, Descriptor)
  ├─ Configs[N]->OnIndicatorSetupDeactivated(Manager, Descriptor)
  │
  └─ Descriptor removed from UIndicatorSubsystem → rendering stops
```

> Actions are executed in **array order**. If two actions write the same descriptor property, the last one wins.

***

## See Also

* [UIndicatorManagerComponent](/dante-docs/indicator-system-plugin/indicator-manager-component.md) — executes actions at BeginPlay
* [UIndicatorDescriptor](/dante-docs/indicator-system-plugin/indicator-descriptor.md) — the object actions write to
* [UIndicatorSubsystem](/dante-docs/indicator-system-plugin/indicator-subsystem.md) — receives the configured descriptor
