Files
FunnyGirl/Source/FunnyGirl/Public/UI/AudioPlaybackThrobber.h
T
2026-05-19 13:42:41 +07:00

106 lines
3.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Components/Widget.h"
#include "AudioPlaybackThrobber.generated.h"
class SAudioPlaybackThrobber;
class UAudioComponent;
class USoundWave;
UCLASS(BlueprintType, Blueprintable)
class FUNNYGIRL_API UAudioPlaybackThrobber : public UWidget
{
GENERATED_BODY()
public:
UAudioPlaybackThrobber();
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback", meta = (ClampMin = "1", ClampMax = "16"))
int32 BarCount = 7;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback", meta = (ClampMin = "0.5"))
float BarWidth = 3.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback", meta = (ClampMin = "0.0"))
float BarGap = 2.5f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback", meta = (ClampMin = "0.0", ClampMax = "1.0"))
float MinHeightFraction = 0.18f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback", meta = (ClampMin = "0.0"))
float AnimationSpeed = 4.8f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback", meta = (ClampMin = "0.0", ClampMax = "1.0"))
float GlowStrength = 0.35f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback", meta = (ClampMin = "0.0", ClampMax = "1.0"))
float CenterBoost = 0.35f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback")
FLinearColor BarColor = FLinearColor(0.18f, 0.82f, 1.0f, 1.0f);
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback")
FLinearColor IdleBarColor = FLinearColor(0.18f, 0.82f, 1.0f, 0.18f);
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback")
bool bIsPlaying = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback|Audio")
TObjectPtr<UAudioComponent> AudioComponent;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback|Audio")
bool bUseAudioEnvelope = false;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback|Audio", meta = (ClampMin = "0.0"))
float AudioEnvelopeGain = 5.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback|Audio", meta = (ClampMin = "0.1"))
float AudioEnvelopeGamma = 0.65f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback|Audio", meta = (ClampMin = "0.0"))
float AudioEnvelopeSmoothingSpeed = 16.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback|Audio", meta = (ClampMin = "0.0", ClampMax = "1.0"))
float ManualAudioLevel = 0.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback|Audio", meta = (ClampMin = "0.0", ClampMax = "1.0"))
float AudioSilenceThreshold = 0.03f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Audio Playback|Audio", meta = (ClampMin = "0.0", ClampMax = "1.0"))
float AudioSilenceOpacity = 0.08f;
UFUNCTION(BlueprintCallable, Category = "Audio Playback")
void SetIsPlaying(bool bInIsPlaying);
UFUNCTION(BlueprintPure, Category = "Audio Playback")
bool IsPlaying() const { return bIsPlaying; }
UFUNCTION(BlueprintCallable, Category = "Audio Playback|Audio")
void SetAudioComponent(UAudioComponent* InAudioComponent);
UFUNCTION(BlueprintCallable, Category = "Audio Playback|Audio")
void SetUseAudioEnvelope(bool bInUseAudioEnvelope);
UFUNCTION(BlueprintCallable, Category = "Audio Playback|Audio")
void SetManualAudioLevel(float InAudioLevel);
protected:
virtual void BeginDestroy() override;
virtual TSharedRef<SWidget> RebuildWidget() override;
virtual void SynchronizeProperties() override;
virtual void ReleaseSlateResources(bool bReleaseChildren) override;
private:
UFUNCTION()
void HandleAudioEnvelopeValue(const USoundWave* PlayingSoundWave, const float EnvelopeValue);
void UnbindAudioComponent();
void BindAudioComponent();
TSharedPtr<SAudioPlaybackThrobber> MyThrobber;
bool bAudioEnvelopeDelegateBound = false;
};