74 lines
1.9 KiB
C++
74 lines
1.9 KiB
C++
// Project Lab - NHTV Igad
|
|
|
|
#pragma once
|
|
|
|
#include "GameFramework/Actor.h"
|
|
#include "Effect.generated.h"
|
|
|
|
UCLASS()
|
|
class UNREALPROJECT_API AEffect : public AActor
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
AEffect();
|
|
|
|
virtual void BeginPlay() override;
|
|
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
|
|
|
|
virtual void Tick( float DeltaSeconds ) override;
|
|
|
|
UFUNCTION()
|
|
void Init(float duration, AActor* followActor = nullptr, bool clientSideOnly = false);
|
|
|
|
UFUNCTION(BlueprintNativeEvent)
|
|
void BeginEffect();
|
|
|
|
// Destroys this particle system + waits for deactivateParticlesBefore seconds after deactivating particle systems
|
|
UFUNCTION(BlueprintCallable, NetMulticast, Reliable, Category="Effect")
|
|
void End();
|
|
|
|
// Event fired when end is called
|
|
UFUNCTION(BlueprintImplementableEvent)
|
|
void OnEnd();
|
|
|
|
// Function used to update the position of this effect
|
|
UFUNCTION(BlueprintNativeEvent)
|
|
void CalculatePosition();
|
|
|
|
UFUNCTION()
|
|
void OnRootParticleSystemFinished(UParticleSystemComponent* sys);
|
|
UFUNCTION()
|
|
void OnRootAudioFinished();
|
|
|
|
UFUNCTION(BlueprintCallable, Category="Effect")
|
|
AActor* GetFollower() const;
|
|
|
|
// Time before the end of the duration in which the particle system is deactivated
|
|
UPROPERTY(BlueprintReadOnly, EditDefaultsOnly, Category="Particles")
|
|
float deactivateParticlesBefore;
|
|
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Effect", meta = (ExposeOnSpawn))
|
|
float m_lifeTime;
|
|
private:
|
|
void DeactivateParticles();
|
|
|
|
TArray<UActorComponent*> m_particleSystems;
|
|
UParticleSystemComponent* m_rootParticleSystem;
|
|
UAudioComponent* m_rootAudio;
|
|
|
|
UPROPERTY(Replicated, ReplicatedUsing = CalculatePosition)
|
|
AActor* m_followActor;
|
|
UPROPERTY(Replicated)
|
|
float m_duration;
|
|
bool m_follow;
|
|
};
|
|
|
|
UCLASS()
|
|
class ATargetedEffect : public AEffect
|
|
{
|
|
GENERATED_BODY()
|
|
public:
|
|
UPROPERTY(Replicated, BlueprintReadOnly)
|
|
FVector target;
|
|
}; |