> 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/modular-experience-system/modular-experience-manager-component/public-api.md).

# Public API

##

### ChangeCurrentExperience

```cpp
UFUNCTION(BlueprintCallable, Category = "Experience")
void ChangeCurrentExperience(FPrimaryAssetId ExperienceId);
```

Starts the experience loading process. **Can only be called once** (on the server side). Asserts if called again.

**Usage from Blueprint:**

### IsExperienceLoaded

```cpp
UFUNCTION(BlueprintPure, Category = "Experience")
bool IsExperienceLoaded() const;
```

Checks whether the experience is fully loaded and all actions have been activated.

### GetCurrentExperience

```cpp
UFUNCTION(BlueprintPure, Category = "Experience")
const UModularExperienceDefinition* GetCurrentExperience() const;
```

Returns the loaded experience definition. Returns `nullptr` if not yet loaded.

### CallOrRegister\_OnExperienceLoaded (C++ Only)

```cpp
void CallOrRegister_OnExperienceLoaded(FOnExperienceLoaded::FDelegate&& Delegate);
```

Registers a delegate to be called when the experience loads. **Calls immediately if already loaded.** The most commonly used pattern in C++ code:

```cpp
ExperienceManager->CallOrRegister_OnExperienceLoaded(
    FOnExperienceLoaded::FDelegate::CreateUObject(this, &ThisClass::OnExperienceLoaded));
```

### ShouldShowLoadingScreen

```cpp
virtual bool ShouldShowLoadingScreen(FString& OutReason) const override;
```

`IModularLoadingProcessInterface` implementation. Returns `true` if state is not `Loaded`, keeping the loading screen visible.

***

## Internal Properties

| Property                | Type                                    | Description                                          |
| ----------------------- | --------------------------------------- | ---------------------------------------------------- |
| `CurrentExperience`     | `UModularExperienceDefinition*`         | Loaded experience definition                         |
| `CollectedActions`      | `TArray<UGameFeatureAction*>`           | Actions collected from the entire chain (root-first) |
| `ExperienceChain`       | `TArray<UModularExperienceDefinition*>` | Parent chain (root-first)                            |
| `LoadState`             | `EExperienceLoadState`                  | Current load state                                   |
| `OnExperienceLoaded`    | `FOnExperienceLoaded`                   | Multicast delegate fired when loading completes      |
| `BundleLoadHandle`      | `FStreamableHandle`                     | Asset bundle load handle                             |
| `ParentChainLoadHandle` | `FStreamableHandle`                     | Parent chain load handle                             |

## Delegate

```cpp
DECLARE_MULTICAST_DELEGATE_OneParam(FOnExperienceLoaded,
    const UModularExperienceDefinition* /*Experience*/);
```

Fires after the experience is fully loaded and all actions have been activated. This is a C++ native delegate — Blueprint users should use the `UModularExperienceSubsystem::OnExperienceReady` dynamic delegate or the `WaitForExperienceReady` async action.

***
