haxis/Source/UnrealProject/Creatures/NPCBase.h

110 lines
3.4 KiB
C++

// Project Lab - NHTV Igad
#pragma once
#include "Creatures/NetworkCharacter.h"
#include "NPCBase.generated.h"
/**
*
*/
UCLASS()
class UNREALPROJECT_API ANPCBase : public ANetworkCharacter
{
GENERATED_BODY()
public:
ANPCBase();
virtual void BeginPlay() override;
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
virtual void Tick(float deltaTime) override;
virtual int32 NativeDealDamage(class ANetworkCharacter* dealer, int32 damage, float armorPercentageIgnore, class UAbilityInfo* ability) override;
// Clears all the modifier stat modifications from this character
virtual void ResetModifiers();
void SetSpawn(class ASpawnerBase* spawn);
void UnsetSpawn();
void SetControlPoint(FVector controlPoint);
UPROPERTY(BlueprintAssignable, Category = "Collision")
FComponentBeginOverlapSignature OnComponentBeginOverlap;
UPROPERTY(BlueprintAssignable, Category = "Collision")
FComponentBeginOverlapSignature OnComponentExitOverlap;
UPROPERTY(VisibleAnywhere, Category = "Custom Collision")
float maxAvoidanceForce;
UPROPERTY(BlueprintReadWrite)
TArray< class ANPCBase*>collisionList;
UPROPERTY(BlueprintReadWrite)
class ANetworkCharacter* target;
UFUNCTION(BlueprintImplementableEvent, Category = "Animation")
void PlayFencAnimation();
UFUNCTION(BlueprintImplementableEvent, Category = "Animation")
void PlayNormalAnimation();
UFUNCTION(BlueprintImplementableEvent, Category = "Animation")
void PlayClimbingAnimation();
UFUNCTION(BlueprintImplementableEvent, Category = "Animation")
void PlayPointAnimation();
UFUNCTION(NetMulticast, Reliable, Category = "Animation")
void ChangeNPCAnimation(uint8 state);
//Trigger components for the vision of the npcs
float patrolTime;
float collisionRadius;
void CalcAvoidance(const FVector& target);
virtual void MoveToPoint(const FVector& target);
virtual void MoveToPointSlow(const FVector& target, float dist);
void PatrolBetweenLocations(FVector startlocation, FVector endLocation,float deltaTime);
ANPCBase* GetClosestObstacle();
FVector CalcAvoidanceVector();
FVector TruncateVector(FVector inVector, float maxForce);
FVector GetClosestPathLocation(FVector endlocation);
FVector aheadvec1;
FVector aheadvec2;
protected:
virtual void m_OnRep_Team() override;
UFUNCTION(BlueprintImplementableEvent, category = "death")
void PlayDeathAnimation(UAbilityInfo* ability);
virtual void OnDeath(UAbilityInfo* ability) override;
UFUNCTION()
void OnOverlapBegin(class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
UFUNCTION()
void OnOverlapEnd(class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);
UPROPERTY()
UMaterialInstanceDynamic* m_materialInstance;
// Base Stats
UPROPERTY(EditDefaultsOnly, Category = "Stats")
int32 baseMaxHealth;
UPROPERTY(EditDefaultsOnly, Category = "Stats")
int32 baseMaxMana;
// AKA Attacks per second
UPROPERTY(EditDefaultsOnly, Category = "Stats")
float baseAttackSpeed;
UPROPERTY(BlueprintReadWrite)
bool enableVisonCone;
bool m_dead;
UPROPERTY()
class ASpawnerBase* m_spawn;
FVector m_targetPoint;
bool m_isPulled;
bool m_hasGeneral;
class UMinionAnimInstance* animInstance;
private:
FVector m_lastLoc;
float m_walkSpeed;
bool lastcollision;
bool m_reachedStart;
FVector previousDirection;
float m_patrolTimer;
};