79 lines
2.7 KiB
C++
79 lines
2.7 KiB
C++
// Project Lab - NHTV Igad
|
|
|
|
#pragma once
|
|
|
|
#include "DealDamageProxy.h"
|
|
#include "ProjectileBase.generated.h"
|
|
|
|
/**
|
|
*
|
|
*/
|
|
UCLASS()
|
|
class UNREALPROJECT_API AProjectileBase : public ADealDamageProxy
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
AProjectileBase();
|
|
virtual void BeginPlay() override;
|
|
virtual void Tick(float DeltaSeconds) override;
|
|
|
|
UFUNCTION(BlueprintNativeEvent, Category = "Projectile")
|
|
void FixedProjectileTick(float DeltaTime);
|
|
virtual void NativeFixedProjectileTick(float DeltaTime);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Projectile")
|
|
void Move(float DeltaTime);
|
|
virtual void NativeMove(float DeltaTime);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Projectile")
|
|
bool IsFinished() const { return m_finished; }
|
|
|
|
UFUNCTION(BlueprintNativeEvent, Category = "Projectile")
|
|
void OnProjectileFinished();
|
|
virtual void NativeOnProjectileFinished();
|
|
|
|
UFUNCTION(BlueprintNativeEvent, Category = "Projectile")
|
|
void OnProjectileHit(ANetworkCharacter* hitCharacter);
|
|
virtual void NativeOnProjectileHit(ANetworkCharacter* hitCharacter);
|
|
|
|
virtual void NativeServerOnFinish();
|
|
UFUNCTION(BlueprintImplementableEvent, Category = "Project")
|
|
void ServerOnFinish();
|
|
|
|
// Transfers projectile to the finished state, disabling collision, but still updating ticks
|
|
UFUNCTION(BlueprintCallable, NetMulticast, Reliable, Category = "Projectile")
|
|
void Finish();
|
|
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Replicated, Category = "Projectile", meta = (ExposeOnSpawn))
|
|
float speed;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Replicated, Category = "Projectile", meta = (ExposeOnSpawn))
|
|
EAbilityFilter filter;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Replicated, Category = "Projectile", meta = (ExposeOnSpawn))
|
|
float maxDistance;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Replicated, Category = "Projectile", meta = (ExposeOnSpawn))
|
|
bool autoMove = true;
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Replicated, Category = "Projectile", meta = (ExposeOnSpawn))
|
|
bool autoDestroy = true;
|
|
|
|
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "Projectile")
|
|
float distanceTraveled;
|
|
|
|
UPROPERTY(BlueprintReadOnly, EditDefaultsOnly, Category = "Projectile")
|
|
float keepAliveAfterFinish;
|
|
|
|
UPROPERTY(BlueprintReadOnly, Category = "Projectile")
|
|
UPrimitiveComponent* collider;
|
|
|
|
protected:
|
|
// Internal event handlers
|
|
UFUNCTION()
|
|
void m_OnOverlapBegin(class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
|
|
UFUNCTION()
|
|
void m_OnHit(class AActor* OtherActor, class UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit);
|
|
|
|
bool m_finished;
|
|
float m_finishTimer;
|
|
float m_fixedTimer;
|
|
};
|