40. Periodic Gameplay Effects
This commit is contained in:
		| @@ -8,9 +8,9 @@ | ||||
|  | ||||
| UGasaAttributeSet::UGasaAttributeSet() | ||||
| { | ||||
| 	InitHealth( 100.f ); | ||||
| 	InitHealth( 50.f ); | ||||
| 	InitMaxHealth( 100.f ); | ||||
| 	InitMana( 50.f ); | ||||
| 	InitMana( 25.f ); | ||||
| 	InitMaxMana( 50.f ); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -19,6 +19,5 @@ void AGasaEffectActor::ApplyEffectToActor(AActor* Actor, TSubclassOf<UGameplayEf | ||||
| 	Context.AddSourceObject(Actor); | ||||
|  | ||||
| 	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: | ||||
|  | ||||
| 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects") | ||||
| 	TSoftClassPtr<UGameplayEffect> InstantEffectClass; | ||||
| 	TSubclassOf<UGameplayEffect> InstantEffectClass; | ||||
| 	 | ||||
| 	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects") | ||||
| 	TSubclassOf<UGameplayEffect> DurationEffectClass; | ||||
| 	 | ||||
| 	AGasaEffectActor(); | ||||
|  | ||||
|   | ||||
| @@ -96,14 +96,11 @@ void AGasaGameState::BeginPlay() | ||||
| 	GI->NotifyGameFrameworkClassReady(EGameFrameworkClassFlag::GameState); | ||||
| 	 | ||||
| #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 | ||||
| 		Cog::AddAllWindows(*CogWindowManager); | ||||
| 	} | ||||
| 	// Add all the built-in windows | ||||
| 	Cog::AddAllWindows(*CogWindowManager); | ||||
| #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 | ||||
		Reference in New Issue
	
	Block a user