// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Components/ActorComponent.h" #include "StatusEffect.h" #include "Components/WrapBox.h" #include "StatusSystem.generated.h" USTRUCT() struct FActiveStatusEffect { GENERATED_BODY() UPROPERTY() float TimeInitiated; UPROPERTY() float TimeTillExpiry; UPROPERTY() UStatusEffect* StatusEffect; UPROPERTY() UUserWidget* StatusIcon; bool operator==(const FActiveStatusEffect& Comp) const { return StatusEffect == Comp.StatusEffect; } }; UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) class THE_TWILIGHT_ABYSS_API UStatusSystem : public UActorComponent { GENERATED_BODY() public: // Sets default values for this component's properties UStatusSystem(); UPROPERTY() TSubclassOf HUDStatusIndicatorsWidget; UPROPERTY() TSubclassOf HUDStatusIconWidget; UPROPERTY() UUserWidget* HUDStatusIndicators; UPROPERTY() UWrapBox* StatusIconsBox; UPROPERTY(VisibleAnywhere) TArray ActiveStatusEffects; protected: // Called when the game starts virtual void BeginPlay() override; public: // Called every frame virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; UFUNCTION() void AddStatusEffect(UStatusEffect* StatusEffect, float DurationMultiplier = 1.0f, bool Invoke = true); UFUNCTION() void RemoveStatusEffect(UStatusEffect* StatusEffect); UFUNCTION() FActiveStatusEffect GetActiveStatusEffect(UStatusEffect* StatusEffect); };