Quartz UI ↗
Browse docs
On this page
Private preview · 0.57.0-devView Markdown

QuartzUIGASBindingComponent: declaration reference

0.57.0-dev · beta source documentation. Native, Blueprint, Editor and rendering examples are source-reviewed, not executed in Unreal during this scan. See validation and limits.

Pinned source (source: Source/QuartzUIGAS/Public/QuartzUIGASBindingComponent.h) · integration recipe · practical guide

EQuartzUIGASBindingComponentState

Public type. High-level lifecycle state for the feature-owned GAS adapter component.

Prerequisites / integration: Exact-player view plus native asset/source ownership; GAS additionally requires GameplayAbilities. Use the QuartzUIGASBindingComponent recipe in the host module QuartzUIGAS.

Minimal example / lifecycle: Enable GameplayAbilities; add component; leave action policy Disabled. Component owns scope/retries/source subscriptions.

Avoid: Enabling AllDiscovered without intended gameplay authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIGAS/Public/QuartzUIGASBindingComponent.h#L16)

FQuartzUIGASBindingComponentStateChanged

Public delegate. GASBinding Component State Changed: callback signature for optional gas activation/retry component for exact player.

Prerequisites / integration: Exact-player view plus native asset/source ownership; GAS additionally requires GameplayAbilities. Use the QuartzUIGASBindingComponent recipe in the host module QuartzUIGAS.

Minimal example / lifecycle: Enable GameplayAbilities; add component; leave action policy Disabled. Component owns scope/retries/source subscriptions.

Avoid: Enabling AllDiscovered without intended gameplay authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIGAS/Public/QuartzUIGASBindingComponent.h#L25)

FQuartzUIGASBindingComponentFailed

Public delegate. GASBinding Component Failed: callback signature for optional gas activation/retry component for exact player.

Prerequisites / integration: Exact-player view plus native asset/source ownership; GAS additionally requires GameplayAbilities. Use the QuartzUIGASBindingComponent recipe in the host module QuartzUIGAS.

Minimal example / lifecycle: Enable GameplayAbilities; add component; leave action policy Disabled. Component owns scope/retries/source subscriptions.

Avoid: Enabling AllDiscovered without intended gameplay authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIGAS/Public/QuartzUIGASBindingComponent.h#L30)

UQuartzUIGASBindingComponent

Public type. Feature-friendly GAS adapter for one exact local player. Add this component (or a project Blueprint subclass with optional policy defaults) to a local PlayerController, HUD, pawn, or bounded owner chain. GameFeatureAction_AddComponents can therefore own registration and teardown without a project C++ module or custom target. The component owns only the binding scope; the GameInstance subsystem keeps ownership of the retained browser shell across map travel.

Prerequisites / integration: Exact-player view plus native asset/source ownership; GAS additionally requires GameplayAbilities. Use the QuartzUIGASBindingComponent recipe in the host module QuartzUIGAS.

Minimal example / lifecycle: Enable GameplayAbilities; add component; leave action policy Disabled. Component owns scope/retries/source subscriptions.

Avoid: Enabling AllDiscovered without intended gameplay authority. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIGAS/Public/QuartzUIGASBindingComponent.h#L46)

Complete header

Source snapshot, not an additional example. Unreal annotations distinguish exposed Blueprint nodes from native-only/private methods.

#pragma once

#include "CoreMinimal.h"
#include "QuartzUIBindingScope.h"
#include "QuartzUIBindingComponentBase.h"
#include "QuartzUIGASConfig.h"

#include "QuartzUIGASBindingComponent.generated.h"

class ULocalPlayer;
class UQuartzUIGASBindingScope;
class UQuartzUIGASResolver;

/** High-level lifecycle state for the feature-owned GAS adapter component. */
UENUM(BlueprintType)
enum class EQuartzUIGASBindingComponentState : uint8
{
	Inactive,
	WaitingForLocalPlayer,
	WaitingForShell,
	Bound,
	Failed
};

DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(
	FQuartzUIGASBindingComponentStateChanged,
	EQuartzUIGASBindingComponentState, PreviousState,
	EQuartzUIGASBindingComponentState, NewState);

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(
	FQuartzUIGASBindingComponentFailed,
	FName, ErrorCode);

/**
 * Feature-friendly GAS adapter for one exact local player.
 *
 * Add this component (or a project Blueprint subclass with optional policy
 * defaults) to a local PlayerController, HUD, pawn, or bounded owner chain.
 * GameFeatureAction_AddComponents can therefore own registration and teardown
 * without a project C++ module or custom target. The component owns only the
 * binding scope; the GameInstance subsystem keeps ownership of the retained
 * browser shell across map travel.
 */
UCLASS(BlueprintType, Blueprintable, ClassGroup = (QuartzUI),
	meta = (BlueprintSpawnableComponent, DisplayName = "QuartzUI GAS Binding"))
class QUARTZUIGAS_API UQuartzUIGASBindingComponent : public UQuartzUIBindingComponentBase
{
	GENERATED_BODY()

public:
	UQuartzUIGASBindingComponent();

	/** Requests binding now and keeps reconciling ordinary startup races. */
	UFUNCTION(BlueprintCallable, Category = "QuartzUI|GAS", meta = (DisplayName = "Activate GAS UI Binding"))
	bool ActivateGASBinding();

	/** Idempotently cancels retries and releases all GAS/UI subscriptions. */
	UFUNCTION(BlueprintCallable, Category = "QuartzUI|GAS", meta = (DisplayName = "Deactivate GAS UI Binding"))
	bool DeactivateGASBinding();

	/** Retries a failed or pending binding without recreating the component. */
	UFUNCTION(BlueprintCallable, Category = "QuartzUI|GAS", meta = (DisplayName = "Retry GAS UI Binding"))
	bool RetryGASBinding();

	UFUNCTION(BlueprintPure, Category = "QuartzUI|GAS")
	UQuartzUIGASBindingScope* GetBindingScope() const { return BindingScope; }

	UFUNCTION(BlueprintPure, Category = "QuartzUI|GAS")
	EQuartzUIGASBindingComponentState GetBindingState() const { return BindingState; }

	UPROPERTY(BlueprintAssignable, Category = "QuartzUI|GAS")
	FQuartzUIGASBindingComponentStateChanged OnBindingStateChanged;

	UPROPERTY(BlueprintAssignable, Category = "QuartzUI|GAS")
	FQuartzUIGASBindingComponentFailed OnBindingFailed;

	/** Optional aliases/policy overrides. Null performs zero-authoring automatic discovery. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|GAS")
	TObjectPtr<UQuartzUIGASConfig> Config;

	/** Observation is automatic; browser gameplay mutation remains an explicit policy choice. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|GAS")
	EQuartzUIGASBrowserAbilityActionPolicy BrowserAbilityActionPolicy =
		EQuartzUIGASBrowserAbilityActionPolicy::Disabled;

	/** Optional project resolver override; the generic exact-player resolver is the default. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "QuartzUI|GAS")
	TSubclassOf<UQuartzUIGASResolver> ResolverClass;

protected:
	virtual bool ValidateBindingRequest(FName& OutError) const override;
	virtual bool HasLiveBinding() const override;
	virtual EQuartzUIBindingAttachResult AttachBinding(
		ULocalPlayer* LocalPlayer,
		UQuartzUIView* Shell,
		FName& OutError) override;
	virtual void ReleaseBinding() override;
	virtual void HandleBindingLifecycleStateChanged(
		EQuartzUIBindingComponentLifecycleState PreviousState,
		EQuartzUIBindingComponentLifecycleState NewState) override;
	virtual void HandleBindingFailure(FName ErrorCode) override;

private:
	void ReleaseScope();

	UFUNCTION()
	void HandleScopeStateChanged(
		EQuartzUIBindingScopeState PreviousState,
		EQuartzUIBindingScopeState NewState);

	UFUNCTION()
	void HandleScopeFailed(FName ErrorCode);

	UPROPERTY(Transient)
	TObjectPtr<UQuartzUIGASBindingScope> BindingScope;

	EQuartzUIGASBindingComponentState BindingState = EQuartzUIGASBindingComponentState::Inactive;
};