40. Periodic Gameplay Effects
This commit is contained in:
parent
9f72aca7da
commit
6c9256d033
@ -8,9 +8,9 @@
|
|||||||
|
|
||||||
UGasaAttributeSet::UGasaAttributeSet()
|
UGasaAttributeSet::UGasaAttributeSet()
|
||||||
{
|
{
|
||||||
InitHealth( 100.f );
|
InitHealth( 50.f );
|
||||||
InitMaxHealth( 100.f );
|
InitMaxHealth( 100.f );
|
||||||
InitMana( 50.f );
|
InitMana( 25.f );
|
||||||
InitMaxMana( 50.f );
|
InitMaxMana( 50.f );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,8 +17,7 @@ void AGasaEffectActor::ApplyEffectToActor(AActor* Actor, TSubclassOf<UGameplayEf
|
|||||||
FGameplayEffectContextHandle
|
FGameplayEffectContextHandle
|
||||||
Context = AS->MakeEffectContext();
|
Context = AS->MakeEffectContext();
|
||||||
Context.AddSourceObject(Actor);
|
Context.AddSourceObject(Actor);
|
||||||
|
|
||||||
FGameplayEffectSpecHandle Spec = AS->MakeOutgoingSpec( EffectClass, 1.0f, Context );
|
FGameplayEffectSpecHandle Spec = AS->MakeOutgoingSpec( EffectClass, 1.0f, Context );
|
||||||
if (Spec.IsValid())
|
AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
|
||||||
AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
|
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,10 @@ class GASA_API AGasaEffectActor : public AGasaActor
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects")
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects")
|
||||||
TSoftClassPtr<UGameplayEffect> InstantEffectClass;
|
TSubclassOf<UGameplayEffect> InstantEffectClass;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects")
|
||||||
|
TSubclassOf<UGameplayEffect> DurationEffectClass;
|
||||||
|
|
||||||
AGasaEffectActor();
|
AGasaEffectActor();
|
||||||
|
|
||||||
|
@ -96,14 +96,11 @@ void AGasaGameState::BeginPlay()
|
|||||||
GI->NotifyGameFrameworkClassReady(EGameFrameworkClassFlag::GameState);
|
GI->NotifyGameFrameworkClassReady(EGameFrameworkClassFlag::GameState);
|
||||||
|
|
||||||
#if ENABLE_COG
|
#if ENABLE_COG
|
||||||
for (local_persist int32 do_once = 0; do_once == 0; ++ do_once )
|
CogWindowManager = NewObject<UCogWindowManager>(this);
|
||||||
{
|
CogWindowManagerRef = CogWindowManager;
|
||||||
CogWindowManager = NewObject<UCogWindowManager>(this);
|
|
||||||
CogWindowManagerRef = CogWindowManager;
|
|
||||||
|
|
||||||
// Add all the built-in windows
|
// Add all the built-in windows
|
||||||
Cog::AddAllWindows(*CogWindowManager);
|
Cog::AddAllWindows(*CogWindowManager);
|
||||||
}
|
|
||||||
#endif //ENABLE_COG
|
#endif //ENABLE_COG
|
||||||
}
|
}
|
||||||
|
|
||||||
|
147
Project/Source/Gasa/Game/GasaGameState.cpp~
Normal file
147
Project/Source/Gasa/Game/GasaGameState.cpp~
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
#include "GasaGameState.h"
|
||||||
|
|
||||||
|
#include "CogAll.h"
|
||||||
|
#include "CogWindowManager.h"
|
||||||
|
#include "GasaPlayerState.h"
|
||||||
|
#include "GasaGameInstance.h"
|
||||||
|
#include "Net/UnrealNetwork.h"
|
||||||
|
#include "Networking/GasaNetLibrary_Inlines.h"
|
||||||
|
using namespace Gasa;
|
||||||
|
|
||||||
|
AGasaGameState::AGasaGameState()
|
||||||
|
{
|
||||||
|
// Enable ticking
|
||||||
|
PrimaryActorTick.bCanEverTick = true;
|
||||||
|
PrimaryActorTick.SetTickFunctionEnable(true);
|
||||||
|
PrimaryActorTick.bStartWithTickEnabled = true;
|
||||||
|
|
||||||
|
// Replication
|
||||||
|
bReplicates = true;
|
||||||
|
bNetLoadOnClient = false;
|
||||||
|
NetDormancy = DORM_Awake;
|
||||||
|
NetCullDistanceSquared = NetCullDist_Default;
|
||||||
|
NetUpdateFrequency = 10.0f;
|
||||||
|
MinNetUpdateFrequency = 1.0f;
|
||||||
|
NetPriority = 5.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma region GameFramework
|
||||||
|
void AGasaGameState::OnGameFrameworkInitialized()
|
||||||
|
{
|
||||||
|
NetLog("Received gameplay framework initialization.");
|
||||||
|
if (IsServer())
|
||||||
|
{
|
||||||
|
if (PlayerArray.Num() > 0)
|
||||||
|
{
|
||||||
|
ListenServerHost = Cast<AGasaPlayerState>(PlayerArray[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NetLog("Was not able to assign HostingPlayer!", ELogV::Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BP_OnGameFrameworkInitialized();
|
||||||
|
}
|
||||||
|
#pragma endregion GameFramework
|
||||||
|
|
||||||
|
#pragma region Networking
|
||||||
|
void AGasaGameState::Client_OnRep_OnlinePlayers()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#pragma endregion Networking
|
||||||
|
|
||||||
|
#pragma region Seamless Travel
|
||||||
|
void AGasaGameState::Multicast_R_NotifySeamlessTravelEnd_Implementation()
|
||||||
|
{
|
||||||
|
NetLog("Multicast_R_NotifySeamlessTravelEnd_Implementation");
|
||||||
|
BP_Event_OnSeamlessTravelEnd.Broadcast();
|
||||||
|
Event_OnSeamlessTravelEnd.Broadcast();
|
||||||
|
}
|
||||||
|
#pragma endregion Seamless Travel
|
||||||
|
|
||||||
|
#pragma region GameStateBase
|
||||||
|
void AGasaGameState::HandleBeginPlay()
|
||||||
|
{
|
||||||
|
Super::HandleBeginPlay();
|
||||||
|
NetLog("HandleBeginPlay: Directly called from GM");
|
||||||
|
}
|
||||||
|
|
||||||
|
void AGasaGameState::SeamlessTravelTransitionCheckpoint(bool bToTransitionMap)
|
||||||
|
{
|
||||||
|
Super::SeamlessTravelTransitionCheckpoint(bToTransitionMap);
|
||||||
|
NetLog("SeamlessTravelTransitionCheckpoint");
|
||||||
|
NetLog(FString("ToTransitionMap: ") + FString(bToTransitionMap ? "true" : "false"));
|
||||||
|
|
||||||
|
if (bToTransitionMap)
|
||||||
|
{
|
||||||
|
Event_OnSeamlessTravelStart.Broadcast();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Multicast_R_NotifySeamlessTravelEnd();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#pragma endregion GameStateBase
|
||||||
|
|
||||||
|
#pragma region Actor
|
||||||
|
void AGasaGameState::BeginPlay()
|
||||||
|
{
|
||||||
|
Super::BeginPlay();
|
||||||
|
NetLog("BeginPlay");
|
||||||
|
|
||||||
|
// Notified as initialized here as any possible components should also be initialized by this point.
|
||||||
|
UGasaGameInstance*
|
||||||
|
GI = GetGameInstance<UGasaGameInstance>();
|
||||||
|
GI->Event_OnGameFrameworkInitialized.AddDynamic(this, & ThisClass::OnGameFrameworkInitialized);
|
||||||
|
GI->NotifyGameFrameworkClassReady(EGameFrameworkClassFlag::GameState);
|
||||||
|
|
||||||
|
#if ENABLE_COG
|
||||||
|
CogWindowManager = NewObject<UCogWindowManager>(this);
|
||||||
|
CogWindowManagerRef = CogWindowManager;
|
||||||
|
|
||||||
|
// Add all the built-in windows
|
||||||
|
Cog::AddAllWindows(*CogWindowManager);
|
||||||
|
#endif //ENABLE_COG
|
||||||
|
}
|
||||||
|
|
||||||
|
void AGasaGameState::PostInitializeComponents()
|
||||||
|
{
|
||||||
|
NetLog("PostInitializeComponents");
|
||||||
|
Super::PostInitializeComponents();
|
||||||
|
|
||||||
|
if ( ! GetWorld()->IsEditorWorld() && IsServer())
|
||||||
|
{
|
||||||
|
OnlinePlayers.Empty();
|
||||||
|
#if 0
|
||||||
|
const auto GI = Cast<UGasaGameInstance>(GetGameInstance());
|
||||||
|
if (GI != nullptr)
|
||||||
|
{
|
||||||
|
int32 NumConnections = GI->SessionSettings.bPublicGame
|
||||||
|
? GI->SessionSettings.PublicConnections
|
||||||
|
: GI->SessionSettings.PrivateConnections;
|
||||||
|
OnlinePlayers.Init(nullptr, NumConnections);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AGasaGameState::Tick(float DeltaSeconds)
|
||||||
|
{
|
||||||
|
Super::Tick(DeltaSeconds);
|
||||||
|
|
||||||
|
#if ENABLE_COG
|
||||||
|
if (CogWindowManager)
|
||||||
|
CogWindowManager->Tick(DeltaSeconds);
|
||||||
|
#endif //ENABLE_COG
|
||||||
|
}
|
||||||
|
#pragma endregion Actor
|
||||||
|
|
||||||
|
#pragma region UObject
|
||||||
|
void AGasaGameState::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
|
||||||
|
{
|
||||||
|
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
|
||||||
|
|
||||||
|
DOREPLIFETIME(AGasaGameState, ListenServerHost);
|
||||||
|
DOREPLIFETIME(AGasaGameState, OnlinePlayers);
|
||||||
|
}
|
||||||
|
#pragma endregion UObject
|
Loading…
Reference in New Issue
Block a user