Setup player preview for equipment panel
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
// © 2025 Naked People Team. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Subsystems/WorldSubsystem.h"
|
||||
#include "PlayerPreviewCaptureSubsystem.generated.h"
|
||||
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnPreviewCaptureActiveChanged, bool, bActive);
|
||||
|
||||
/**
|
||||
* Message bus between the equipment/inventory UI (C++) and the player-preview
|
||||
* sublevel that renders the impostor into a SceneCapture2D for the equipment panel.
|
||||
*
|
||||
* The capture is expensive, so it must run only while the panel is open. The preview
|
||||
* level's Level Blueprint owns the actual 30fps capture loop; it binds to
|
||||
* OnPreviewCaptureActiveChanged to start/stop that loop. The UI flips the state via
|
||||
* SetPreviewActive when the inventory screen activates / deactivates.
|
||||
*
|
||||
* A world subsystem is shared across the persistent level and its streamed sublevels,
|
||||
* so the preview level and the main UI talk through the same instance without either
|
||||
* needing a hard reference to the other.
|
||||
*/
|
||||
UCLASS()
|
||||
class NAKEDDESIRE_API UPlayerPreviewCaptureSubsystem : public UWorldSubsystem
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
// Called by the inventory/equipment UI on open (true) and close (false).
|
||||
UFUNCTION(BlueprintCallable, Category = "Preview")
|
||||
void SetPreviewActive(bool bActive);
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "Preview")
|
||||
bool IsPreviewActive() const { return bPreviewActive; }
|
||||
|
||||
// Bound by the preview level's Level Blueprint to start/stop its 30fps capture loop.
|
||||
// Read IsPreviewActive() on BeginPlay to sync initial state in case the panel was
|
||||
// somehow already open when the sublevel streamed in.
|
||||
UPROPERTY(BlueprintAssignable, Category = "Preview")
|
||||
FOnPreviewCaptureActiveChanged OnPreviewCaptureActiveChanged;
|
||||
|
||||
private:
|
||||
bool bPreviewActive = false;
|
||||
};
|
||||
Reference in New Issue
Block a user