Implemented NPC Manager with NPC Stations
This commit is contained in:
parent
005361ff32
commit
efc9a0315e
BIN
EndlessVendetta/Content/BountySystem/Tutorial/Checkpoints/CP_GrabAssualtRifle.uasset
(Stored with Git LFS)
BIN
EndlessVendetta/Content/BountySystem/Tutorial/Checkpoints/CP_GrabAssualtRifle.uasset
(Stored with Git LFS)
Binary file not shown.
3
EndlessVendetta/Content/NPC/BP_NPC_Manager.uasset
Normal file
3
EndlessVendetta/Content/NPC/BP_NPC_Manager.uasset
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:86987c9bdd1a2707a515186793698bc07d938101b1de0b500286cc16629e9359
|
||||||
|
size 22534
|
3
EndlessVendetta/Content/NPC/NPCStation_Test1.uasset
Normal file
3
EndlessVendetta/Content/NPC/NPCStation_Test1.uasset
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:b049e683fe37a8cc646bbb5d5181a5fac5bb1f4be1accf14e2cc42102b32ce58
|
||||||
|
size 33754
|
3
EndlessVendetta/Content/NPC/NPCStation_Test2.uasset
Normal file
3
EndlessVendetta/Content/NPC/NPCStation_Test2.uasset
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:6181121e680650a713fd6faa5be4bde5b96ed85921fc5bf76c55f7fd7baa8071
|
||||||
|
size 35338
|
BIN
EndlessVendetta/Content/StarterContent/Architecture/Floor_400x400.uasset
(Stored with Git LFS)
BIN
EndlessVendetta/Content/StarterContent/Architecture/Floor_400x400.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset
(Stored with Git LFS)
BIN
EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset
(Stored with Git LFS)
Binary file not shown.
56
EndlessVendetta/Source/EndlessVendetta/NPC/NPC_Manager.cpp
Normal file
56
EndlessVendetta/Source/EndlessVendetta/NPC/NPC_Manager.cpp
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "NPC_Manager.h"
|
||||||
|
|
||||||
|
#include "Kismet/GameplayStatics.h"
|
||||||
|
|
||||||
|
// Sets default values
|
||||||
|
ANPC_Manager::ANPC_Manager()
|
||||||
|
{
|
||||||
|
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
|
||||||
|
PrimaryActorTick.bCanEverTick = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ANPC_Manager::UpdateNPC_Stations()
|
||||||
|
{
|
||||||
|
for (ANPC_Station* NPC_Station : NPC_Stations)
|
||||||
|
{
|
||||||
|
FVector PlayersLoc = PlayersActor->GetActorLocation();
|
||||||
|
FVector StationLoc = NPC_Station->GetActorLocation();
|
||||||
|
float Distance = FVector::Distance(PlayersLoc, StationLoc);
|
||||||
|
Distance > NPC_StationRenderDistance ? NPC_Station->DisableStation() : NPC_Station->EnableStation();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called when the game starts or when spawned
|
||||||
|
void ANPC_Manager::BeginPlay()
|
||||||
|
{
|
||||||
|
Super::BeginPlay();
|
||||||
|
|
||||||
|
PlayersActor = UGameplayStatics::GetPlayerPawn(GetWorld(), 0);
|
||||||
|
if (!IsValid(PlayersActor))
|
||||||
|
{
|
||||||
|
SetActorTickEnabled(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NPC_StationClasses.IsEmpty()) return;
|
||||||
|
FRotator DefaultRot = FRotator(0, 0, 0);
|
||||||
|
for (FVector StationPoint : StationPoints)
|
||||||
|
{
|
||||||
|
int RandInt = FMath::RandRange(0, NPC_StationClasses.Num() - 1);// make station points be relative to world
|
||||||
|
ANPC_Station* NPC_Station = GetWorld()->SpawnActor<ANPC_Station>(NPC_StationClasses[RandInt], StationPoint, DefaultRot);
|
||||||
|
if (IsValid(NPC_Station)) NPC_Stations.Add(NPC_Station);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called every frame
|
||||||
|
void ANPC_Manager::Tick(float DeltaTime)
|
||||||
|
{
|
||||||
|
Super::Tick(DeltaTime);
|
||||||
|
UpdateNPC_Stations();
|
||||||
|
}
|
||||||
|
|
45
EndlessVendetta/Source/EndlessVendetta/NPC/NPC_Manager.h
Normal file
45
EndlessVendetta/Source/EndlessVendetta/NPC/NPC_Manager.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "NPC_Station.h"
|
||||||
|
#include "GameFramework/Actor.h"
|
||||||
|
#include "NPC_Manager.generated.h"
|
||||||
|
|
||||||
|
UCLASS()
|
||||||
|
class ENDLESSVENDETTA_API ANPC_Manager : public AActor
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
AActor* PlayersActor;
|
||||||
|
|
||||||
|
// Used for Selecting Random Stations to Spawn
|
||||||
|
UPROPERTY(EditDefaultsOnly, Category = "NPC")
|
||||||
|
TArray<TSubclassOf<ANPC_Station>> NPC_StationClasses;
|
||||||
|
|
||||||
|
// How far can the station be from the player before it's diabled
|
||||||
|
UPROPERTY(EditDefaultsOnly, Category = "NPC")
|
||||||
|
float NPC_StationRenderDistance = 5000;
|
||||||
|
|
||||||
|
// references to All Spawned NPC Stations
|
||||||
|
TArray<ANPC_Station*> NPC_Stations;
|
||||||
|
|
||||||
|
// Dynamically Enables/Disables Stations based on distance to player
|
||||||
|
void UpdateNPC_Stations();
|
||||||
|
protected:
|
||||||
|
// Spawn points for NPC Stations
|
||||||
|
UPROPERTY(EditAnywhere, Category = "NPC", meta = (MakeEditWidget = "true"))
|
||||||
|
TArray<FVector> StationPoints;
|
||||||
|
|
||||||
|
// Called when the game starts or when spawned
|
||||||
|
virtual void BeginPlay() override;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Sets default values for this actor's properties
|
||||||
|
ANPC_Manager();
|
||||||
|
|
||||||
|
// Called every frame
|
||||||
|
virtual void Tick(float DeltaTime) override;
|
||||||
|
|
||||||
|
};
|
15
EndlessVendetta/Source/EndlessVendetta/NPC/NPC_Station.cpp
Normal file
15
EndlessVendetta/Source/EndlessVendetta/NPC/NPC_Station.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "NPC_Station.h"
|
||||||
|
|
||||||
|
// Sets default values
|
||||||
|
ANPC_Station::ANPC_Station()
|
||||||
|
{
|
||||||
|
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
|
||||||
|
PrimaryActorTick.bCanEverTick = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
27
EndlessVendetta/Source/EndlessVendetta/NPC/NPC_Station.h
Normal file
27
EndlessVendetta/Source/EndlessVendetta/NPC/NPC_Station.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "GameFramework/Actor.h"
|
||||||
|
#include "NPC_Station.generated.h"
|
||||||
|
|
||||||
|
UCLASS()
|
||||||
|
class ENDLESSVENDETTA_API ANPC_Station : public AActor
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Sets default values for this actor's properties
|
||||||
|
ANPC_Station();
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintImplementableEvent)
|
||||||
|
void EnableStation();
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintImplementableEvent)
|
||||||
|
void DisableStation();
|
||||||
|
|
||||||
|
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user