Compare commits
	
		
			10 Commits
		
	
	
		
			ef002ccf53
			...
			old_repo_o
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d97ee1d302 | |||
| 1b5d2a3ff6 | |||
| ca779b627b | |||
| a885201b81 | |||
| 07c5420bc2 | |||
| fe2abe1972 | |||
| e8fb014d29 | |||
| c4e40037ed | |||
| 33b3723b82 | |||
| ae1e28a072 | 
							
								
								
									
										51
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,31 +1,38 @@
 | 
			
		||||
Project/Binaries
 | 
			
		||||
Project/Intermediate
 | 
			
		||||
Project/Saved/Crashes
 | 
			
		||||
Project/Saved/SourceControl
 | 
			
		||||
Project/Saved/ShaderDebugInfo
 | 
			
		||||
Project/Saved/Logs
 | 
			
		||||
Project/Saved/Autosaves
 | 
			
		||||
Project/Saved/Config/CrashReportClient
 | 
			
		||||
Project/Saved/Config/WindowsEditor
 | 
			
		||||
Project/Saved/Config/WorldState
 | 
			
		||||
Project/Saved/AutoScreenshot.png
 | 
			
		||||
Project/Platforms
 | 
			
		||||
*/Binaries/Win64/*.patch_*.*
 | 
			
		||||
 | 
			
		||||
Project/.idea
 | 
			
		||||
Project/.vs
 | 
			
		||||
Project/.vsconfig
 | 
			
		||||
*.sln
 | 
			
		||||
*.target
 | 
			
		||||
*.modules
 | 
			
		||||
Project/.idea
 | 
			
		||||
 | 
			
		||||
Project/Saved/Screenshots
 | 
			
		||||
*/Binaries/Win64/*.patch_*.*
 | 
			
		||||
Project/Saved/ImGui
 | 
			
		||||
Project/Saved/ImGui/imgui.ini
 | 
			
		||||
GasaGen_*.pdb
 | 
			
		||||
Project/Binaries
 | 
			
		||||
Project/Binaries/GasaGen.exe
 | 
			
		||||
Project/Binaries/GasaGen.map
 | 
			
		||||
Project/Binaries/GasaGen.obj
 | 
			
		||||
Project/Binaries/vc140.pdb
 | 
			
		||||
 | 
			
		||||
Project/Intermediate
 | 
			
		||||
 | 
			
		||||
Project/Platforms
 | 
			
		||||
 | 
			
		||||
Project/Saved/Config/ConsoleHistory.ini
 | 
			
		||||
*.pdb
 | 
			
		||||
 | 
			
		||||
Project/Saved/Autosaves
 | 
			
		||||
Project/Saved/AutoScreenshot.png
 | 
			
		||||
Project/Saved/Config/CrashReportClient
 | 
			
		||||
Project/Saved/Config/WindowsEditor
 | 
			
		||||
Project/Saved/Config/WorldState
 | 
			
		||||
Project/Saved/Crashes
 | 
			
		||||
Project/Saved/Diff
 | 
			
		||||
Project/Saved/ImGui
 | 
			
		||||
Project/Saved/ImGui/imgui.ini
 | 
			
		||||
Project/Saved/Logs
 | 
			
		||||
Project/Saved/Screenshots
 | 
			
		||||
Project/Saved/ShaderDebugInfo
 | 
			
		||||
Project/Saved/SourceControl
 | 
			
		||||
 | 
			
		||||
*.modules
 | 
			
		||||
*.pdb
 | 
			
		||||
*.sln
 | 
			
		||||
*.target
 | 
			
		||||
 | 
			
		||||
GasaGen_*.pdb
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								Project/Binaries/Win64/UnrealEditor-GasaEditor.dll
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Binaries/Win64/UnrealEditor-GasaEditor.dll
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -49,6 +49,15 @@ r.ReflectionMethod=1
 | 
			
		||||
r.Shadow.Virtual.Enable=1
 | 
			
		||||
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
 | 
			
		||||
r.CustomDepth=3
 | 
			
		||||
r.DefaultFeature.Bloom=False
 | 
			
		||||
r.DefaultFeature.AmbientOcclusion=False
 | 
			
		||||
r.DefaultFeature.AmbientOcclusionStaticFraction=False
 | 
			
		||||
r.DefaultFeature.AutoExposure=False
 | 
			
		||||
r.DefaultFeature.MotionBlur=False
 | 
			
		||||
r.AntiAliasingMethod=0
 | 
			
		||||
r.MSAACount=1
 | 
			
		||||
r.ScreenPercentage.Default=25.000000
 | 
			
		||||
r.SupportSkyAtmosphere=False
 | 
			
		||||
 | 
			
		||||
[/Script/WorldPartitionEditor.WorldPartitionEditorSettings]
 | 
			
		||||
CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet'
 | 
			
		||||
@@ -130,3 +139,4 @@ ManualIPAddress=
 | 
			
		||||
+CollisionChannelRedirects=(OldName="Dynamic",NewName="WorldDynamic")
 | 
			
		||||
+CollisionChannelRedirects=(OldName="VehicleMovement",NewName="Vehicle")
 | 
			
		||||
+CollisionChannelRedirects=(OldName="PawnMovement",NewName="Pawn")
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ Tag_GlobalPPV=Global_PPV
 | 
			
		||||
Template_PlayerCamera=/Game/Actors/BP_CameraMount.BP_CameraMount_C
 | 
			
		||||
Template_HUD_HostUI=/Game/UI/UI_Host.UI_Host_C
 | 
			
		||||
Template_HostWidgetController=/Game/UI/BP_HostWidgetController.BP_HostWidgetController_C
 | 
			
		||||
TaggedMessageTable=/Game/Core/Tables/DT_TaggedMessages.DT_TaggedMessages
 | 
			
		||||
 | 
			
		||||
[/Script/GameplayAbilities.AbilitySystemGlobals]
 | 
			
		||||
bUseDebugTargetFromHud=true
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								Project/Config/DefaultGameplayTags.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Project/Config/DefaultGameplayTags.ini
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
[/Script/GameplayTags.GameplayTagsSettings]
 | 
			
		||||
ImportTagsFromConfig=True
 | 
			
		||||
WarnOnInvalidTags=True
 | 
			
		||||
ClearInvalidTags=False
 | 
			
		||||
AllowEditorTagUnloading=True
 | 
			
		||||
AllowGameTagUnloading=False
 | 
			
		||||
FastReplication=False
 | 
			
		||||
InvalidTagCharacters="\"\',"
 | 
			
		||||
+GameplayTagTableList=/Game/Core/Tables/DT_PrimaryAttributes.DT_PrimaryAttributes
 | 
			
		||||
NumBitsForContainerSize=6
 | 
			
		||||
NetIndexFirstBitSegment=16
 | 
			
		||||
+GameplayTagList=(Tag="Attributes.Vital.Health",DevComment="")
 | 
			
		||||
+GameplayTagList=(Tag="Attributes.Vital.Mana",DevComment="")
 | 
			
		||||
+GameplayTagList=(Tag="Attributes.Vital.MaxHealth",DevComment="")
 | 
			
		||||
+GameplayTagList=(Tag="Attributes.Vital.MaxMana",DevComment="")
 | 
			
		||||
+GameplayTagList=(Tag="Message.Crystal.Health",DevComment="")
 | 
			
		||||
+GameplayTagList=(Tag="Message.Crystal.Mana",DevComment="")
 | 
			
		||||
+GameplayTagList=(Tag="Message.Potion.Health",DevComment="")
 | 
			
		||||
+GameplayTagList=(Tag="Message.Potion.Mana",DevComment="")
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_AreaFire.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_AreaFire.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_CrystalHeal.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_CrystalHeal.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_CrystalMana.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_CrystalMana.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_PotionHealth.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_PotionHealth.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_PotionMana.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/AbilitySystem/GE_PotionMana.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/BP_AreaFire.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/BP_AreaFire.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/BP_AreaFire_RawEffect.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/BP_AreaFire_RawEffect.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/DT_PrimaryAttributes.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/DT_PrimaryAttributes.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/DT_TaggedMessages.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/DT_TaggedMessages.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/Game/BP_HUD.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/Game/BP_HUD.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/Pickups/BP_HealthCrystal.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/Pickups/BP_HealthCrystal.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/Pickups/BP_HealthPotion.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/Pickups/BP_HealthPotion.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/Pickups/BP_HealthPotion_RawEffect.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/Pickups/BP_HealthPotion_RawEffect.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/Pickups/BP_ManaCrystal.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/Pickups/BP_ManaCrystal.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/Pickups/BP_ManaPotion_RawEffect.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/Pickups/BP_ManaPotion_RawEffect.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/Tables/CT_Potion.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/Tables/CT_Potion.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/Tables/DT_PrimaryAttributes.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/Tables/DT_PrimaryAttributes.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Core/Tables/DT_TaggedMessages.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Core/Tables/DT_TaggedMessages.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/Levels/StartupMap.umap
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/Levels/StartupMap.umap
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/UI/BP_HostWidgetController.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/UI/BP_HostWidgetController.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/UI/DT_StyleText_EffectMessage.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/UI/DT_StyleText_EffectMessage.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/UI/Globes/MI_BlackBG.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/UI/Globes/MI_BlackBG.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/UI/RTD_Default.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/UI/RTD_Default.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/UI/UI_EffectMessage.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/UI/UI_EffectMessage.uasset
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/UI/UI_GlobeTemplate.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/UI/UI_GlobeTemplate.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Project/Content/UI/UI_Host.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Project/Content/UI/UI_Host.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
{
 | 
			
		||||
	"ColumnWidths":
 | 
			
		||||
	{
 | 
			
		||||
		"DevComment": 405,
 | 
			
		||||
		"Tag": 381
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
	"ColumnWidths":
 | 
			
		||||
	{
 | 
			
		||||
		"TextStyle": 1099
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
	"ColumnWidths":
 | 
			
		||||
	{
 | 
			
		||||
		"Image": 487,
 | 
			
		||||
		"Tag": 246,
 | 
			
		||||
		"Message": 439,
 | 
			
		||||
		"MessageTemplate": 232
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										38
									
								
								Project/Source/Gasa/AbilitySystem/EffectProperties.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								Project/Source/Gasa/AbilitySystem/EffectProperties.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
#include "EffectProperties.h"
 | 
			
		||||
 | 
			
		||||
#include "AbilitySystemComponent.h"
 | 
			
		||||
#include "AbilitySystemGlobals.h"
 | 
			
		||||
#include "GameplayEffect.h"
 | 
			
		||||
#include "GameplayEffectExtension.h"
 | 
			
		||||
#include "GameFramework/Pawn.h"
 | 
			
		||||
#include "GameFramework/PlayerController.h"
 | 
			
		||||
 | 
			
		||||
void FEffectProperties::Populate(FGameplayEffectModCallbackData const& Data)
 | 
			
		||||
{
 | 
			
		||||
	Context             = Data.EffectSpec.GetContext();
 | 
			
		||||
	SourceAbilitySystem = Context.GetOriginalInstigatorAbilitySystemComponent();
 | 
			
		||||
 | 
			
		||||
	if (IsValid(SourceAbilitySystem)
 | 
			
		||||
		&& SourceAbilitySystem->AbilityActorInfo.IsValid()
 | 
			
		||||
		&& SourceAbilitySystem->AbilityActorInfo->AvatarActor.IsValid())
 | 
			
		||||
	{
 | 
			
		||||
		FGameplayAbilityActorInfo* AbilityInfo = SourceAbilitySystem->AbilityActorInfo.Get();
 | 
			
		||||
		SourceAvatar     = AbilityInfo->AvatarActor.Get();
 | 
			
		||||
		SourceController = AbilityInfo->PlayerController.Get();
 | 
			
		||||
 | 
			
		||||
		if (SourceController == nullptr && SourceAvatar)
 | 
			
		||||
		{
 | 
			
		||||
			APawn* Pawn = Cast<APawn>(SourceAvatar);
 | 
			
		||||
			if (Pawn)
 | 
			
		||||
				SourceController = Pawn->GetController();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (Data.Target.AbilityActorInfo.IsValid() && Data.Target.AbilityActorInfo->AvatarActor.IsValid())
 | 
			
		||||
	{
 | 
			
		||||
		FGameplayAbilityActorInfo* AbilityInfo = Data.Target.AbilityActorInfo.Get();
 | 
			
		||||
		TargetAvatar        = AbilityInfo->AvatarActor.Get();
 | 
			
		||||
		TargetController    = AbilityInfo->PlayerController.Get();
 | 
			
		||||
		TargetAbilitySystem = UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(TargetAvatar);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								Project/Source/Gasa/AbilitySystem/EffectProperties.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								Project/Source/Gasa/AbilitySystem/EffectProperties.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "GameplayEffectTypes.h"
 | 
			
		||||
#include "GasaCommon.h"
 | 
			
		||||
 | 
			
		||||
#include "EffectProperties.generated.h"
 | 
			
		||||
 | 
			
		||||
USTRUCT()
 | 
			
		||||
struct GASA_API FEffectProperties
 | 
			
		||||
{
 | 
			
		||||
	GENERATED_BODY()
 | 
			
		||||
 | 
			
		||||
	FGameplayEffectContextHandle Context;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(VisibleAnywhere)
 | 
			
		||||
	UAbilitySystemComponent* SourceAbilitySystem;
 | 
			
		||||
	
 | 
			
		||||
	UPROPERTY(VisibleAnywhere)
 | 
			
		||||
	AActor* SourceAvatar;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(VisibleAnywhere)
 | 
			
		||||
	AController* SourceController;
 | 
			
		||||
	
 | 
			
		||||
	UPROPERTY(VisibleAnywhere)
 | 
			
		||||
	UAbilitySystemComponent* TargetAbilitySystem;
 | 
			
		||||
	
 | 
			
		||||
	UPROPERTY(VisibleAnywhere)
 | 
			
		||||
	AActor* TargetAvatar;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(VisibleAnywhere)
 | 
			
		||||
	APlayerController* TargetController;
 | 
			
		||||
 | 
			
		||||
	void Populate(FGameplayEffectModCallbackData const& Data);
 | 
			
		||||
};
 | 
			
		||||
@@ -1 +1,33 @@
 | 
			
		||||
#include "GasaAbilitySystemComponent.h"
 | 
			
		||||
#include "GasaAbilitySystemComponent.h"
 | 
			
		||||
 | 
			
		||||
#include "Engine/Engine.h"
 | 
			
		||||
#include "Engine/GameViewportClient.h"
 | 
			
		||||
#include "Game/GasaGameState.h"
 | 
			
		||||
#include "Game/GasaPlayerController.h"
 | 
			
		||||
#include "GameFramework/HUD.h"
 | 
			
		||||
#include "Slate/SceneViewport.h"
 | 
			
		||||
#include "UI/GasaHUD.h"
 | 
			
		||||
#include "CogDebugDraw.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
using namespace Gasa;
 | 
			
		||||
 | 
			
		||||
void UGasaAbilitySystemComp::OnAbilityActorInfoSet()
 | 
			
		||||
{
 | 
			
		||||
	if ( ! OnGameplayEffectAppliedDelegateToSelf.IsBoundToObject(this))
 | 
			
		||||
		OnGameplayEffectAppliedDelegateToSelf.AddUObject(this, & ThisClass::EffectApplied);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UGasaAbilitySystemComp::EffectApplied(UAbilitySystemComponent* AbilitySystem, FGameplayEffectSpec const& Spec,
 | 
			
		||||
	FActiveGameplayEffectHandle ActiveEffect)
 | 
			
		||||
{
 | 
			
		||||
	Log("EFFECT APPLIED?");
 | 
			
		||||
	FGameplayTagContainer Tags;
 | 
			
		||||
	Spec.GetAllAssetTags(Tags);
 | 
			
		||||
	Event_OnEffectAppliedAssetTags.Broadcast(Tags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UGasaAbilitySystemComp::InitAbilityActorInfo(AActor* InOwnerActor, AActor* InAvatarActor)
 | 
			
		||||
{
 | 
			
		||||
	Super::InitAbilityActorInfo(InOwnerActor, InAvatarActor);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,27 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "AbilitySystemComponent.h"
 | 
			
		||||
 | 
			
		||||
#include "GasaCommon.h"
 | 
			
		||||
 | 
			
		||||
#include "GasaAbilitySystemComponent.generated.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DECLARE_MULTICAST_DELEGATE_OneParam(FEffectAssetTagsSig, FGameplayTagContainer const& /*Tags*/);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
UCLASS(BlueprintType)
 | 
			
		||||
class GASA_API UGasaAbilitySystemComp : public UAbilitySystemComponent
 | 
			
		||||
{
 | 
			
		||||
	GENERATED_BODY()
 | 
			
		||||
public:
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
	FEffectAssetTagsSig Event_OnEffectAppliedAssetTags;
 | 
			
		||||
	
 | 
			
		||||
	void OnAbilityActorInfoSet();
 | 
			
		||||
 | 
			
		||||
	void EffectApplied(UAbilitySystemComponent* AbilitySystem, FGameplayEffectSpec const& Spec, FActiveGameplayEffectHandle ActiveEffect);
 | 
			
		||||
 | 
			
		||||
#pragma region AbilitySystemComponent
 | 
			
		||||
	void InitAbilityActorInfo(AActor* InOwnerActor, AActor* InAvatarActor) override;
 | 
			
		||||
#pragma endregion AbilitySystemComponent
 | 
			
		||||
};
 | 
			
		||||
@@ -18,7 +18,7 @@ namespace Gasa
 | 
			
		||||
 | 
			
		||||
	// From: UAbilitySystemGlobals::GetAbilitySystemComponentFromActor
 | 
			
		||||
	inline
 | 
			
		||||
	UGasaAbilitySystemComp* GetAbilitySystem(AActor* Actor, bool LookForComponent = false)
 | 
			
		||||
	UGasaAbilitySystemComp* GetAbilitySystem(AActor* Actor, bool LookForComponent = true)
 | 
			
		||||
	{
 | 
			
		||||
		if (Actor == nullptr)
 | 
			
		||||
			return nullptr;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
// Generated by GasaGen/GasaGen_UGasaAttributeSet.cpp
 | 
			
		||||
#include "GasaAttributeSet.h"
 | 
			
		||||
#include "GasaAttributeSet_Inlines.h"
 | 
			
		||||
#include "EffectProperties.h"
 | 
			
		||||
 | 
			
		||||
#include "AbilitySystemComponent.h"
 | 
			
		||||
#include "Net/UnrealNetwork.h"
 | 
			
		||||
@@ -41,6 +42,13 @@ void UGasaAttributeSet::Client_OnRep_MaxMana( FGameplayAttributeData& PrevMaxMan
 | 
			
		||||
}
 | 
			
		||||
#pragma endregion Rep Notifies
 | 
			
		||||
 | 
			
		||||
void UGasaAttributeSet::PostGameplayEffectExecute( FGameplayEffectModCallbackData const& Data )
 | 
			
		||||
{
 | 
			
		||||
	Super::PostGameplayEffectExecute( Data );
 | 
			
		||||
	FEffectProperties Props;
 | 
			
		||||
	Props.Populate( Data );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UGasaAttributeSet::PreAttributeChange( FGameplayAttribute const& Attribute, float& NewValue )
 | 
			
		||||
{
 | 
			
		||||
	Super::PreAttributeChange( Attribute, NewValue );
 | 
			
		||||
@@ -62,6 +70,7 @@ void UGasaAttributeSet::PreAttributeChange( FGameplayAttribute const& Attribute,
 | 
			
		||||
		NewValue = FMath::Clamp( NewValue, 0, 99999.000000 );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UGasaAttributeSet::GetLifetimeReplicatedProps( TArray<FLifetimeProperty>& OutLifetimeProps ) const
 | 
			
		||||
{
 | 
			
		||||
	Super::GetLifetimeReplicatedProps( OutLifetimeProps );
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,8 @@ public:
 | 
			
		||||
	#pragma endregion Getters
 | 
			
		||||
 | 
			
		||||
#pragma region Setters
 | 
			
		||||
	FORCEINLINE void SetHealth( float NewVal );
 | 
			
		||||
	    FORCEINLINE void
 | 
			
		||||
	                 SetHealth( float NewVal );
 | 
			
		||||
	FORCEINLINE void SetMaxHealth( float NewVal );
 | 
			
		||||
	FORCEINLINE void SetMana( float NewVal );
 | 
			
		||||
	FORCEINLINE void SetMaxMana( float NewVal );
 | 
			
		||||
@@ -86,10 +87,13 @@ public:
 | 
			
		||||
	#pragma endregion Setters
 | 
			
		||||
 | 
			
		||||
#pragma region AttributeSet
 | 
			
		||||
	    void PreAttributeChange( const FGameplayAttribute& Attribute, float& NewValue ) override;
 | 
			
		||||
#pragma endregion AttributeSet
 | 
			
		||||
	    void
 | 
			
		||||
	     PreAttributeChange( const FGameplayAttribute& Attribute, float& NewValue ) override;
 | 
			
		||||
	void PostGameplayEffectExecute( FGameplayEffectModCallbackData const& Data ) override;
 | 
			
		||||
	#pragma endregion AttributeSet
 | 
			
		||||
 | 
			
		||||
#pragma region UObject
 | 
			
		||||
	    void GetLifetimeReplicatedProps( TArray<FLifetimeProperty>& OutLifetimeProps ) const override;
 | 
			
		||||
	    void
 | 
			
		||||
	    GetLifetimeReplicatedProps( TArray<FLifetimeProperty>& OutLifetimeProps ) const override;
 | 
			
		||||
#pragma endregion UObject
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,8 @@ AGasaEffectActor::AGasaEffectActor()
 | 
			
		||||
 | 
			
		||||
	RootComponent = CreateDefaultSubobject<USceneComponent>("Root");
 | 
			
		||||
 | 
			
		||||
	Level = 1.f;
 | 
			
		||||
	
 | 
			
		||||
	InstantEffectUsage  = EInstantEffectUsagePolicy::DoNotApply;
 | 
			
		||||
	DurationEffectUsage = DefaultEffectUsagePolicy;
 | 
			
		||||
	InfiniteEffectUsage = DefaultEffectUsagePolicy;
 | 
			
		||||
@@ -24,7 +26,7 @@ void AGasaEffectActor::ApplyEffectToActor(AActor* Actor, TSubclassOf<UGameplayEf
 | 
			
		||||
	Context = AS->MakeEffectContext();
 | 
			
		||||
	Context.AddSourceObject(Actor);
 | 
			
		||||
 | 
			
		||||
	FGameplayEffectSpecHandle   Spec         = AS->MakeOutgoingSpec( EffectClass, 1.0f, Context );
 | 
			
		||||
	FGameplayEffectSpecHandle   Spec         = AS->MakeOutgoingSpec( EffectClass, Level, Context );
 | 
			
		||||
	FActiveGameplayEffectHandle ActiveEffect = AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
 | 
			
		||||
	if (bRemoveOnEndOverlap)
 | 
			
		||||
		ActiveEffectsToRemove.Add(ActiveEffect, AS);
 | 
			
		||||
@@ -39,16 +41,16 @@ void AGasaEffectActor::OnOverlap(AActor* Actor)
 | 
			
		||||
	
 | 
			
		||||
	if (InstantEffectClass && InstantEffectUsage == EInstantEffectUsagePolicy::ApplyOnOverlap)
 | 
			
		||||
	{
 | 
			
		||||
		FGameplayEffectSpecHandle Spec= AS->MakeOutgoingSpec( InstantEffectClass, 1.0f, Context );
 | 
			
		||||
		FGameplayEffectSpecHandle Spec= AS->MakeOutgoingSpec( InstantEffectClass, Level, Context );
 | 
			
		||||
		AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
 | 
			
		||||
	}
 | 
			
		||||
	if (DurationEffectClass)
 | 
			
		||||
	{
 | 
			
		||||
		if (Bitfield_IsSet(DurationEffectUsage, EEffectUsagePolicy::ApplyOnOverlap))
 | 
			
		||||
		{
 | 
			
		||||
        	FGameplayEffectSpecHandle   Spec         = AS->MakeOutgoingSpec( DurationEffectClass, 1.0f, Context );
 | 
			
		||||
        	FGameplayEffectSpecHandle   Spec         = AS->MakeOutgoingSpec( DurationEffectClass, Level, Context );
 | 
			
		||||
			FActiveGameplayEffectHandle ActiveEffect = AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
 | 
			
		||||
			if (Bitfield_IsSet(DurationEffectUsage, (int32)EEffectUsagePolicy::RemoveOnEndOverlap))
 | 
			
		||||
			if (Bitfield_IsSet(DurationEffectUsage, EEffectUsagePolicy::RemoveOnEndOverlap))
 | 
			
		||||
				ActiveDuration = ActiveEffect;
 | 
			
		||||
		}
 | 
			
		||||
		if (ActiveDuration.IsValid() && Bitfield_IsSet(DurationEffectUsage, EEffectUsagePolicy::RemoveOnOverlap))
 | 
			
		||||
@@ -59,9 +61,9 @@ void AGasaEffectActor::OnOverlap(AActor* Actor)
 | 
			
		||||
		bool bApplyOnOverlap = Bitfield_IsSet(InfiniteEffectUsage, EEffectUsagePolicy::ApplyOnOverlap);
 | 
			
		||||
		if (bApplyOnOverlap)
 | 
			
		||||
		{
 | 
			
		||||
			FGameplayEffectSpecHandle   Spec         = AS->MakeOutgoingSpec( InfiniteEffectClass, 1.0f, Context );
 | 
			
		||||
			FGameplayEffectSpecHandle   Spec         = AS->MakeOutgoingSpec( InfiniteEffectClass, Level, Context );
 | 
			
		||||
			FActiveGameplayEffectHandle ActiveEffect = AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
 | 
			
		||||
			if (Bitfield_IsSet(InfiniteEffectUsage, (int32)EEffectUsagePolicy::RemoveOnEndOverlap))
 | 
			
		||||
			if (Bitfield_IsSet(InfiniteEffectUsage, EEffectUsagePolicy::RemoveOnEndOverlap))
 | 
			
		||||
				ActiveInfinite = ActiveEffect;
 | 
			
		||||
		}
 | 
			
		||||
		if (ActiveInfinite.IsValid() && Bitfield_IsSet(InfiniteEffectUsage, EEffectUsagePolicy::RemoveOnOverlap))
 | 
			
		||||
@@ -81,28 +83,28 @@ void AGasaEffectActor::OnEndOverlap(AActor* Actor)
 | 
			
		||||
	
 | 
			
		||||
	if (InstantEffectClass && InstantEffectUsage == EInstantEffectUsagePolicy::ApplyOnEndOverlap)
 | 
			
		||||
	{
 | 
			
		||||
		FGameplayEffectSpecHandle Spec= AS->MakeOutgoingSpec( InstantEffectClass, 1.0f, Context );
 | 
			
		||||
		FGameplayEffectSpecHandle Spec= AS->MakeOutgoingSpec( InstantEffectClass, Level, Context );
 | 
			
		||||
		AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
 | 
			
		||||
	}
 | 
			
		||||
	if (DurationEffectClass)
 | 
			
		||||
	{
 | 
			
		||||
		if (Bitfield_IsSet(DurationEffectUsage, EEffectUsagePolicy::ApplyOnEndOverlap))
 | 
			
		||||
		{
 | 
			
		||||
			FGameplayEffectSpecHandle   Spec         = AS->MakeOutgoingSpec( DurationEffectClass, 1.0f, Context );
 | 
			
		||||
			FGameplayEffectSpecHandle   Spec         = AS->MakeOutgoingSpec( DurationEffectClass, Level, Context );
 | 
			
		||||
			FActiveGameplayEffectHandle ActiveEffect = AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
 | 
			
		||||
			if (Bitfield_IsSet(DurationEffectUsage, (int32)EEffectUsagePolicy::RemoveOnOverlap))
 | 
			
		||||
			if (Bitfield_IsSet(DurationEffectUsage, EEffectUsagePolicy::RemoveOnOverlap))
 | 
			
		||||
				ActiveDuration = ActiveEffect;
 | 
			
		||||
		}
 | 
			
		||||
		if (ActiveDuration.IsValid() && Bitfield_IsSet(DurationEffectUsage, (int32)EEffectUsagePolicy::RemoveOnEndOverlap))
 | 
			
		||||
		if (ActiveDuration.IsValid() && Bitfield_IsSet(DurationEffectUsage, EEffectUsagePolicy::RemoveOnEndOverlap))
 | 
			
		||||
			AS->RemoveActiveGameplayEffect(ActiveDuration);
 | 
			
		||||
	}
 | 
			
		||||
	if (InfiniteEffectClass)
 | 
			
		||||
	{
 | 
			
		||||
		if (Bitfield_IsSet(InfiniteEffectUsage, EEffectUsagePolicy::ApplyOnEndOverlap))
 | 
			
		||||
		{
 | 
			
		||||
			FGameplayEffectSpecHandle   Spec         = AS->MakeOutgoingSpec( InfiniteEffectClass, 1.0f, Context );
 | 
			
		||||
			FGameplayEffectSpecHandle   Spec         = AS->MakeOutgoingSpec( InfiniteEffectClass, Level, Context );
 | 
			
		||||
			FActiveGameplayEffectHandle ActiveEffect = AS->ApplyGameplayEffectSpecToSelf( * Spec.Data );
 | 
			
		||||
			if (Bitfield_IsSet(InfiniteEffectUsage, (int32)EEffectUsagePolicy::RemoveOnOverlap))
 | 
			
		||||
			if (Bitfield_IsSet(InfiniteEffectUsage, EEffectUsagePolicy::RemoveOnOverlap))
 | 
			
		||||
				ActiveInfinite = ActiveEffect;
 | 
			
		||||
		}
 | 
			
		||||
		if (ActiveInfinite.IsValid() && Bitfield_IsSet(InfiniteEffectUsage, EEffectUsagePolicy::RemoveOnEndOverlap))
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,11 @@ class GASA_API AGasaEffectActor : public AGasaActor
 | 
			
		||||
	GENERATED_BODY()
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	AGasaEffectActor();
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects")
 | 
			
		||||
	float Level;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Gameplay Effects")
 | 
			
		||||
	TSubclassOf<UGameplayEffect> InstantEffectClass;
 | 
			
		||||
 | 
			
		||||
@@ -61,9 +66,7 @@ public:
 | 
			
		||||
	
 | 
			
		||||
	FActiveGameplayEffectHandle ActiveDuration;
 | 
			
		||||
	FActiveGameplayEffectHandle ActiveInfinite;
 | 
			
		||||
 | 
			
		||||
	AGasaEffectActor();
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	UFUNCTION(BlueprintCallable, Category = "Gameplay Effects")
 | 
			
		||||
	void ApplyEffectToActor(AActor* Actor, TSubclassOf<UGameplayEffect> EffectClass, bool bRemoveOnEndOverlap = false);
 | 
			
		||||
 | 
			
		||||
@@ -73,4 +76,3 @@ public:
 | 
			
		||||
	UFUNCTION(BlueprintCallable)
 | 
			
		||||
	void OnEndOverlap(AActor* Actor);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -155,12 +155,13 @@ void AGasaCharacter::PossessedBy(AController* NewController)
 | 
			
		||||
		if (GetMesh() && IsReplicatingMovement() && (GetRemoteRole() == ROLE_AutonomousProxy && GetNetConnection() != nullptr))
 | 
			
		||||
			GetMesh()->bOnlyAllowAutonomousTickPose = true;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
	if (bAutoAbilitySystem)
 | 
			
		||||
	{
 | 
			
		||||
		// TODO(Ed): Do we need to do this for enemies?
 | 
			
		||||
		AbilitySystem->InitAbilityActorInfo(this, this);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AGasaCharacter::SetPlayerDefaults()
 | 
			
		||||
@@ -179,10 +180,12 @@ void AGasaCharacter::BeginPlay()
 | 
			
		||||
{
 | 
			
		||||
	Super::BeginPlay();
 | 
			
		||||
 | 
			
		||||
	// TODO(Ed): Find out if this is the best spot todo this
 | 
			
		||||
	// There is also OnPossessed, PostInitializeComponents, etc...
 | 
			
		||||
	if (bAutoAbilitySystem)
 | 
			
		||||
	{
 | 
			
		||||
		// TODO(Ed): Do we need to do this for enemies?
 | 
			
		||||
		AbilitySystem->InitAbilityActorInfo(this, this);
 | 
			
		||||
		Cast<UGasaAbilitySystemComp>(AbilitySystem)->OnAbilityActorInfoSet();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -232,8 +232,7 @@ void AGasaGameMode::HandleSeamlessTravelPlayer(AController*& Controller)
 | 
			
		||||
 | 
			
		||||
void AGasaGameMode::InitializeHUDForPlayer_Implementation(APlayerController* NewPlayer)
 | 
			
		||||
{
 | 
			
		||||
	// Super::InitializeHUDForPlayer_Implementation(NewPlayer);
 | 
			
		||||
	NewPlayer->ClientSetHUD(HUDClass);
 | 
			
		||||
	Super::InitializeHUDForPlayer_Implementation(NewPlayer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AGasaGameMode::InitSeamlessTravelPlayer(AController* NewController)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,147 +0,0 @@
 | 
			
		||||
#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
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
#include "Networking/GasaNetLibrary_Inlines.h"
 | 
			
		||||
 | 
			
		||||
#include "AbilitySystemComponent.h"
 | 
			
		||||
#include "DrawDebugHelpers.h"
 | 
			
		||||
#include "Engine/LocalPlayer.h"
 | 
			
		||||
#include "EnhancedInputComponent.h"
 | 
			
		||||
#include "EnhancedInputSubsystems.h"
 | 
			
		||||
@@ -18,6 +19,7 @@
 | 
			
		||||
#include "GasaGameInstance.h"
 | 
			
		||||
#include "GasaGameState.h"
 | 
			
		||||
#include "GasaPlayerState.h"
 | 
			
		||||
#include "AbilitySystem/GasaAbilitySystemComponent.h"
 | 
			
		||||
#include "Actors/CameraMount.h"
 | 
			
		||||
#include "UI/GasaHUD.h"
 | 
			
		||||
#include "UI/WidgetController.h"
 | 
			
		||||
@@ -66,14 +68,18 @@ void AGasaPlayerController::NetOwner_OnReady()
 | 
			
		||||
	if (IsClient())
 | 
			
		||||
		ServerRPC_R_NotifyOwningClientReady();
 | 
			
		||||
 | 
			
		||||
	Cam = GetWorld()->SpawnActor<ACameraMount>(GetDevOptions()->Template_PlayerCamera.Get(), FActorSpawnParameters() );
 | 
			
		||||
	SetViewTarget(Cam);
 | 
			
		||||
 | 
			
		||||
	AGasaPlayerState* PS         = GetPlayerState();
 | 
			
		||||
	APlayerCharacter* PlayerChar = GetPawn<APlayerCharacter>();
 | 
			
		||||
	{
 | 
			
		||||
		PlayerChar->AbilitySystem = PS->AbilitySystem;
 | 
			
		||||
		PlayerChar->Attributes    = PS->Attributes;
 | 
			
		||||
		PlayerChar->AbilitySystem->InitAbilityActorInfo(PS, this);
 | 
			
		||||
		Cam->AttachToActor(PlayerChar, FAttachmentTransformRules::KeepRelativeTransform);
 | 
			
		||||
		PS->AbilitySystem->InitAbilityActorInfo(PS, PlayerChar);
 | 
			
		||||
		Cast<UGasaAbilitySystemComp>(PS->AbilitySystem)->OnAbilityActorInfoSet();
 | 
			
		||||
	}
 | 
			
		||||
	Cam->AttachToActor(PlayerChar, FAttachmentTransformRules::KeepRelativeTransform);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AGasaPlayerController::OnGameFrameworkInitialized()
 | 
			
		||||
@@ -416,15 +422,11 @@ void AGasaPlayerController::BeginPlay()
 | 
			
		||||
void AGasaPlayerController::PostInitializeComponents()
 | 
			
		||||
{
 | 
			
		||||
	Super::PostInitializeComponents();
 | 
			
		||||
 | 
			
		||||
	Cam = GetWorld()->SpawnActor<ACameraMount>(GetDevOptions()->Template_PlayerCamera.Get(), FActorSpawnParameters() );
 | 
			
		||||
	SetViewTarget(Cam);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AGasaPlayerController::Tick(float DeltaSeconds)
 | 
			
		||||
{
 | 
			
		||||
	Super::Tick(DeltaSeconds);
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
	switch (HighlightState)
 | 
			
		||||
	{
 | 
			
		||||
 
 | 
			
		||||
@@ -84,6 +84,15 @@ public class Gasa : ModuleRules
 | 
			
		||||
	        PrivateIncludePathModuleNames.AddRange( new string[]
 | 
			
		||||
	        {
 | 
			
		||||
		        "CogCommon",
 | 
			
		||||
		        "CogAbility",
 | 
			
		||||
		        "CogAI",
 | 
			
		||||
		        "CogAll",
 | 
			
		||||
		        "CogDebug",
 | 
			
		||||
		        "CogDebugEditor",
 | 
			
		||||
		        "CogEngine",
 | 
			
		||||
		        "CogImgui",
 | 
			
		||||
		        "CogInput",
 | 
			
		||||
		        "CogWindow",
 | 
			
		||||
	        });
 | 
			
		||||
            PrivateDependencyModuleNames.AddRange(new string[]
 | 
			
		||||
            {
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,9 @@
 | 
			
		||||
 | 
			
		||||
#pragma region Engine Forwards
 | 
			
		||||
struct FInputActionValue;
 | 
			
		||||
struct FGameplayEffectContextHandle;
 | 
			
		||||
struct FGameplayEffectModCallbackData;
 | 
			
		||||
struct FGameplayTagContainer;
 | 
			
		||||
struct FOnAttributeChangeData;
 | 
			
		||||
struct FReplicationFlags;
 | 
			
		||||
 | 
			
		||||
@@ -42,6 +45,7 @@ class UInputAction;
 | 
			
		||||
class UInputMappingContext;
 | 
			
		||||
class USphereComponent;
 | 
			
		||||
class USpringArmComponent;
 | 
			
		||||
class UTexture2D;
 | 
			
		||||
#pragma endregion Engine Forwards
 | 
			
		||||
 | 
			
		||||
#pragma region Engine Plugin Forwards
 | 
			
		||||
@@ -70,6 +74,7 @@ class UGasaObject;
 | 
			
		||||
class UGasaOverlay;
 | 
			
		||||
class UGasaProgressBar;
 | 
			
		||||
class UGasaSizeBox;
 | 
			
		||||
class UGasaUserWidget;
 | 
			
		||||
class UHostWidgetController;
 | 
			
		||||
class UHUDHostWidget;
 | 
			
		||||
class UWidgetController;
 | 
			
		||||
@@ -158,7 +163,8 @@ namespace Gasa
 | 
			
		||||
 | 
			
		||||
	// Works for Unreal 5.4, Win64 MSVC (untested in other scenarios, for now)
 | 
			
		||||
	inline
 | 
			
		||||
	void Log( FString Message, EGasaVerbosity Verbosity = EGasaVerbosity::Log
 | 
			
		||||
	void Log( FString Message
 | 
			
		||||
		, EGasaVerbosity    Verbosity = EGasaVerbosity::Log
 | 
			
		||||
		, FLogCategoryBase& Category  = LogGasa
 | 
			
		||||
		, bool              DumpStack = false
 | 
			
		||||
		, int32             Line      = __builtin_LINE()
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,14 @@
 | 
			
		||||
 | 
			
		||||
#include "GasaCommon.h"
 | 
			
		||||
 | 
			
		||||
template<typename RowType>
 | 
			
		||||
inline
 | 
			
		||||
RowType* GetDataTableRowByTag(UDataTable* DT, FGameplayTag& Tag)
 | 
			
		||||
{
 | 
			
		||||
	RowType* Row = DT->FindRow<RowType>(Tag.GetTagName(), TEXT(""));
 | 
			
		||||
	return Row;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename KeyType, typename ValueType>
 | 
			
		||||
inline
 | 
			
		||||
void RemoveKeys(TMap<KeyType, ValueType> Map, TArray<KeyType> Keys)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,12 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "Engine/DataTable.h"
 | 
			
		||||
#include "Engine/DeveloperSettings.h"
 | 
			
		||||
 | 
			
		||||
#include "GasaCommon.h"
 | 
			
		||||
 | 
			
		||||
#include "GasaDevOptions.generated.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
UCLASS(Config=Game, DefaultConfig, meta=(DisplayName="Gasa"))
 | 
			
		||||
class GASA_API UGasaDevOptions : public UDeveloperSettings
 | 
			
		||||
{
 | 
			
		||||
@@ -15,6 +16,9 @@ public:
 | 
			
		||||
	// NOTE(Ed): Any Soft-References must have their includes defined in GasaDevOptions.cpp
 | 
			
		||||
	// They are used by GasaGen for the GasaDevOptionsCache
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(Config, EditAnywhere, BlueprintReadOnly, Category="UI")
 | 
			
		||||
	TSoftObjectPtr<UDataTable> TaggedMessageTable;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(Config, EditAnywhere, BlueprintReadOnly, Category="UI")
 | 
			
		||||
	TSoftClassPtr<ACameraMount> Template_PlayerCamera;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,9 @@ void FGasaDevOptionsCache::CachedDevOptions()
 | 
			
		||||
{
 | 
			
		||||
	UGasaDevOptions* DevOpts = GetMutDevOptions();
 | 
			
		||||
 | 
			
		||||
	TaggedMessageTable = DevOpts->TaggedMessageTable.LoadSynchronous();
 | 
			
		||||
	ensureMsgf( TaggedMessageTable != nullptr, TEXT( "TaggedMessageTable is null, DO NOT RUN PIE or else you may get a crash if not handled in BP or C++" ) );
 | 
			
		||||
 | 
			
		||||
	Template_PlayerCamera = DevOpts->Template_PlayerCamera.LoadSynchronous();
 | 
			
		||||
	ensureMsgf(
 | 
			
		||||
	    Template_PlayerCamera != nullptr, TEXT( "Template_PlayerCamera is null, DO NOT RUN PIE or else you may get a crash if not handled in BP or C++" )
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,8 @@ struct GASA_API FGasaDevOptionsCache
 | 
			
		||||
{
 | 
			
		||||
	GENERATED_BODY()
 | 
			
		||||
 | 
			
		||||
	UPROPERTY()
 | 
			
		||||
	UObject* TaggedMessageTable;
 | 
			
		||||
	UPROPERTY()
 | 
			
		||||
	UClass* Template_PlayerCamera;
 | 
			
		||||
	UPROPERTY()
 | 
			
		||||
 
 | 
			
		||||
@@ -14,12 +14,15 @@ void AGasaHUD::InitHostWidget(FWidgetControllerData const* WidgetControllerData)
 | 
			
		||||
	HostWidgetController       = NewObject<UHostWidgetController>(this, GetDevOptions()->Template_HostWidgetController.Get());
 | 
			
		||||
	HostWidgetController->Data = (* WidgetControllerData);
 | 
			
		||||
	HostWidget->SetWidgetController(HostWidgetController);
 | 
			
		||||
	HostWidgetController->BindCallbacksToDependencies();
 | 
			
		||||
	
 | 
			
		||||
	HostWidgetController->BroadcastInitialValues();
 | 
			
		||||
	HostWidget->AddToViewport();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AGasaHUD::DrawHUD()
 | 
			
		||||
{
 | 
			
		||||
	Super::DrawHUD();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#pragma region HUD
 | 
			
		||||
void AGasaHUD::ShowHUD()
 | 
			
		||||
{
 | 
			
		||||
@@ -32,4 +35,9 @@ void AGasaHUD::BeginPlay()
 | 
			
		||||
{
 | 
			
		||||
	Super::BeginPlay();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AGasaHUD::Tick(float DeltaSeconds)
 | 
			
		||||
{
 | 
			
		||||
	Super::Tick(DeltaSeconds);
 | 
			
		||||
}
 | 
			
		||||
#pragma endregion Actor
 | 
			
		||||
 
 | 
			
		||||
@@ -21,11 +21,14 @@ public:
 | 
			
		||||
	
 | 
			
		||||
	void InitHostWidget(FWidgetControllerData const* WidgetControllerData);
 | 
			
		||||
	
 | 
			
		||||
#pragma region HUD	
 | 
			
		||||
#pragma region HUD
 | 
			
		||||
	void DrawHUD() override;
 | 
			
		||||
	void ShowHUD() override;
 | 
			
		||||
#pragma endregion HUD	
 | 
			
		||||
 | 
			
		||||
#pragma region Actor
 | 
			
		||||
	void BeginPlay() override;
 | 
			
		||||
 | 
			
		||||
	void Tick(float DeltaSeconds) override;
 | 
			
		||||
#pragma endregion Actor
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
#include "GasaUserWidget.h"
 | 
			
		||||
#include "GasaUserWidget.h"
 | 
			
		||||
 | 
			
		||||
#include "Blueprint/WidgetBlueprintGeneratedClass.h"
 | 
			
		||||
#include "Blueprint/WidgetTree.h"
 | 
			
		||||
@@ -227,7 +227,7 @@ bool UGasaUserWidget::Initialize()
 | 
			
		||||
 | 
			
		||||
		// For backward compatibility, run the initialize event on widget that doesn't have a player context only when the class authorized it.
 | 
			
		||||
		bool bClassWantsToRunInitialized = BGClass && BGClass->bCanCallInitializedWithoutPlayerContext;
 | 
			
		||||
		if (!IsDesignTime() && (PlayerContext.IsValid() || bClassWantsToRunInitialized))
 | 
			
		||||
		if (!IsDesignTime() && (GetPlayerContext().IsValid() || bClassWantsToRunInitialized))
 | 
			
		||||
		{
 | 
			
		||||
			NativeOnInitialized();
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
#include "GlobeProgressBar.h"
 | 
			
		||||
#include "GlobeProgressBar.h"
 | 
			
		||||
 | 
			
		||||
#include "GasaImage.h"
 | 
			
		||||
#include "GasaOverlay.h"
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,9 @@
 | 
			
		||||
#include "AbilitySystem/GasaAbilitySystemComponent_Inlines.h"
 | 
			
		||||
#include "AbilitySystem/GasaAttributeSet.h"
 | 
			
		||||
#include "GameplayEffectTypes.h"
 | 
			
		||||
#include "GasaDevOptions.h"
 | 
			
		||||
#include "TaggedMessageRow.h"
 | 
			
		||||
using namespace Gasa;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -30,6 +33,20 @@ void UHostWidgetController::MaxManaChanged( FOnAttributeChangeData const& Attrib
 | 
			
		||||
}
 | 
			
		||||
#pragma endregion Attribute Changed Callbacks
 | 
			
		||||
 | 
			
		||||
void UHostWidgetController::OnEffectAppliedAssetTags( FGameplayTagContainer const& AssetTags )
 | 
			
		||||
{
 | 
			
		||||
	UDataTable* TaggedMessages = GetDevOptions()->TaggedMessageTable.Get();
 | 
			
		||||
	for ( FGameplayTag const& Tag : AssetTags )
 | 
			
		||||
	{
 | 
			
		||||
		FGameplayTag MessageTagCategory = FGameplayTag::RequestGameplayTag( FName( "Message" ) );
 | 
			
		||||
		if ( ! Tag.MatchesTag( MessageTagCategory ) )
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		FTaggedMessageRow* Row = TaggedMessages->FindRow<FTaggedMessageRow>( Tag.GetTagName(), TEXT( "" ) );
 | 
			
		||||
		OnTaggedAssetMessage.Broadcast( *Row );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UHostWidgetController::BroadcastInitialValues()
 | 
			
		||||
{
 | 
			
		||||
	// This function is managed by: GenGasa/GenGasa_HostWidgetController.cpp
 | 
			
		||||
@@ -66,4 +83,6 @@ void UHostWidgetController::BindCallbacksToDependencies()
 | 
			
		||||
	FOnGameplayAttributeValueChange& MaxManaAttributeChangedDelegate =
 | 
			
		||||
	    AbilitySystem->GetGameplayAttributeValueChangeDelegate( GasaAttribs->GetMaxManaAttribute() );
 | 
			
		||||
	MaxManaAttributeChangedDelegate.AddUObject( this, &ThisClass::MaxManaChanged );
 | 
			
		||||
 | 
			
		||||
	AbilitySystem->Event_OnEffectAppliedAssetTags.AddUObject( this, &UHostWidgetController::OnEffectAppliedAssetTags );
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,11 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "GasaCommon.h"
 | 
			
		||||
#include "TaggedMessageRow.h"
 | 
			
		||||
#include "WidgetController.h"
 | 
			
		||||
#include "HostWidgetController.generated.h"
 | 
			
		||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam( FAttributeFloatChangedSig, float, NewValue );
 | 
			
		||||
 | 
			
		||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam( FAttributeChangedSig, float, NewValue );
 | 
			
		||||
 | 
			
		||||
UCLASS( Blueprintable, BlueprintType )
 | 
			
		||||
class GASA_API UHostWidgetController : public UWidgetController
 | 
			
		||||
@@ -13,16 +16,16 @@ public:
 | 
			
		||||
	// Attribute Events are generated by GasaGen/GasaGen_HostWidgetController.cpp
 | 
			
		||||
 | 
			
		||||
	UPROPERTY( BlueprintAssignable, Category = "Attributes" )
 | 
			
		||||
	FAttributeFloatChangedSig Event_OnHealthChanged;
 | 
			
		||||
	FAttributeChangedSig Event_OnHealthChanged;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY( BlueprintAssignable, Category = "Attributes" )
 | 
			
		||||
	FAttributeFloatChangedSig Event_OnMaxHealthChanged;
 | 
			
		||||
	FAttributeChangedSig Event_OnMaxHealthChanged;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY( BlueprintAssignable, Category = "Attributes" )
 | 
			
		||||
	FAttributeFloatChangedSig Event_OnManaChanged;
 | 
			
		||||
	FAttributeChangedSig Event_OnManaChanged;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY( BlueprintAssignable, Category = "Attributes" )
 | 
			
		||||
	FAttributeFloatChangedSig Event_OnMaxManaChanged;
 | 
			
		||||
	FAttributeChangedSig Event_OnMaxManaChanged;
 | 
			
		||||
 | 
			
		||||
	void HealthChanged( FOnAttributeChangeData const& Data );
 | 
			
		||||
	void MaxHealthChanged( FOnAttributeChangeData const& Data );
 | 
			
		||||
@@ -30,6 +33,11 @@ public:
 | 
			
		||||
	void MaxManaChanged( FOnAttributeChangeData const& Data );
 | 
			
		||||
#pragma endregion Attribute Events
 | 
			
		||||
 | 
			
		||||
	UPROPERTY( BlueprintAssignable, Category = "Messages" )
 | 
			
		||||
	FTaggedMessageRowSig OnTaggedAssetMessage;
 | 
			
		||||
 | 
			
		||||
	void OnEffectAppliedAssetTags( FGameplayTagContainer const& AssetTags );
 | 
			
		||||
 | 
			
		||||
#pragma region WidgetController
 | 
			
		||||
	void BroadcastInitialValues() override;
 | 
			
		||||
	void BindCallbacksToDependencies() override;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								Project/Source/Gasa/UI/TaggedMessageRow.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Project/Source/Gasa/UI/TaggedMessageRow.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "GameplayTagContainer.h"
 | 
			
		||||
#include "GasaCommon.h"
 | 
			
		||||
#include "Engine/DataTable.h"
 | 
			
		||||
#include "Templates/SubclassOf.h"
 | 
			
		||||
 | 
			
		||||
#include "TaggedMessageRow.generated.h"
 | 
			
		||||
 | 
			
		||||
USTRUCT(BlueprintType)
 | 
			
		||||
struct FTaggedMessageRow : public FTableRowBase
 | 
			
		||||
{
 | 
			
		||||
	GENERATED_BODY()
 | 
			
		||||
	
 | 
			
		||||
	UPROPERTY(EditAnywhere, BlueprintReadOnly)
 | 
			
		||||
	FGameplayTag Tag;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(EditAnywhere, BlueprintReadOnly)
 | 
			
		||||
	FText Message;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(EditAnywhere, BlueprintReadOnly)
 | 
			
		||||
	TSubclassOf<UGasaUserWidget> MessageTemplate;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(EditAnywhere, BlueprintReadOnly)
 | 
			
		||||
	UTexture2D* Image;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FTaggedMessageRowSig, FTaggedMessageRow, Message);
 | 
			
		||||
@@ -72,7 +72,7 @@ void gen_UHostWidgetController()
 | 
			
		||||
				));
 | 
			
		||||
				attribute_events.append(fmt_newline);
 | 
			
		||||
				attribute_events.append( parse_variable(
 | 
			
		||||
					token_fmt( "field", (StrC) attribute_field.Name, stringize( FAttributeFloatChangedSig Event_On<field>Changed; ))
 | 
			
		||||
					token_fmt( "field", (StrC) attribute_field.Name, stringize( FAttributeChangedSig Event_On<field>Changed; ))
 | 
			
		||||
				));
 | 
			
		||||
				attribute_events.append(fmt_newline);
 | 
			
		||||
			}
 | 
			
		||||
@@ -209,6 +209,8 @@ void gen_UHostWidgetController()
 | 
			
		||||
					UGasaAttributeSet*      GasaAttribs   = Cast<UGasaAttributeSet>( Data.Attributes );
 | 
			
		||||
 | 
			
		||||
					<bindings>
 | 
			
		||||
 | 
			
		||||
					AbilitySystem->Event_OnEffectAppliedAssetTags.AddUObject(this, & UHostWidgetController::OnEffectAppliedAssetTags);
 | 
			
		||||
				})
 | 
			
		||||
			));
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -104,7 +104,7 @@ void gen_UGasaAttributeSet()
 | 
			
		||||
					body.append( def_pragma( txt("region AttributeSet")));
 | 
			
		||||
					body.append( code_str(
 | 
			
		||||
						void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) override;
 | 
			
		||||
						// void PostAttributeChange(const FGameplayAttribute& Attribute, float OldValue, float NewValue) override;
 | 
			
		||||
						void PostGameplayEffectExecute(FGameplayEffectModCallbackData const& Data) override;
 | 
			
		||||
					));
 | 
			
		||||
					body.append( def_pragma( txt("endregion AttributeSet")));
 | 
			
		||||
					body.append(fmt_newline);
 | 
			
		||||
@@ -170,6 +170,7 @@ void gen_UGasaAttributeSet()
 | 
			
		||||
		header.print(fmt_newline);
 | 
			
		||||
		source.print( def_include( txt("GasaAttributeSet.h")));
 | 
			
		||||
		source.print( def_include( txt("GasaAttributeSet_Inlines.h")));
 | 
			
		||||
		source.print( def_include( txt("EffectProperties.h")));
 | 
			
		||||
		source.print(fmt_newline);
 | 
			
		||||
		source.print( def_include( txt("AbilitySystemComponent.h")));
 | 
			
		||||
		source.print( def_include( txt("Net/UnrealNetwork.h")));
 | 
			
		||||
@@ -191,6 +192,17 @@ void gen_UGasaAttributeSet()
 | 
			
		||||
 | 
			
		||||
			impl_attribute_fields( body, class_name, attribute_fields);
 | 
			
		||||
 | 
			
		||||
			Code PostGameplayEffectExecute = parse_function( code(
 | 
			
		||||
				void UGasaAttributeSet::PostGameplayEffectExecute(FGameplayEffectModCallbackData const& Data)
 | 
			
		||||
				{
 | 
			
		||||
					Super::PostGameplayEffectExecute(Data);
 | 
			
		||||
					FEffectProperties Props;
 | 
			
		||||
					Props.Populate(Data);
 | 
			
		||||
				}
 | 
			
		||||
			));
 | 
			
		||||
			body.append(PostGameplayEffectExecute);
 | 
			
		||||
			body.append(fmt_newline);
 | 
			
		||||
 | 
			
		||||
			CodeFn PreAttributeChange;
 | 
			
		||||
			{
 | 
			
		||||
				CodeBody attribute_clamps = def_body( CodeT::Function_Body );
 | 
			
		||||
@@ -221,6 +233,8 @@ void gen_UGasaAttributeSet()
 | 
			
		||||
						}
 | 
			
		||||
					)));
 | 
			
		||||
				}
 | 
			
		||||
				attribute_clamps.append(fmt_newline);
 | 
			
		||||
				attribute_clamps.append(fmt_newline);
 | 
			
		||||
				PreAttributeChange = parse_function( token_fmt( "attribute_clamps", (StrC)attribute_clamps.to_string(), stringize(
 | 
			
		||||
					void UGasaAttributeSet::PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue)
 | 
			
		||||
					{
 | 
			
		||||
@@ -230,6 +244,7 @@ void gen_UGasaAttributeSet()
 | 
			
		||||
				)));
 | 
			
		||||
			}
 | 
			
		||||
			body.append(PreAttributeChange);
 | 
			
		||||
			body.append(fmt_newline);
 | 
			
		||||
 | 
			
		||||
			CodeFn GetLifetimeOfReplicatedProps;
 | 
			
		||||
			{
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										83
									
								
								scripts/clean_shit_up.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								scripts/clean_shit_up.ps1
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
# PowerShell script to set up Git LFS for Content directory
 | 
			
		||||
clear-host
 | 
			
		||||
 | 
			
		||||
$path_scripts = $PSScriptRoot
 | 
			
		||||
$path_helpers = join-path $path_scripts 'helpers'
 | 
			
		||||
$path_root    = split-path -Parent -Path $path_scripts
 | 
			
		||||
$path_ue      = join-path '../../Surgo' 'UE'
 | 
			
		||||
$path_project = join-path $path_root 'Project'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Set your repository paths here
 | 
			
		||||
$path_content = join-path $path_project 'Content'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Function to remove Content directory from Git history
 | 
			
		||||
function Remove-ContentFromGitHistory {
 | 
			
		||||
    push-location $path_repo
 | 
			
		||||
 | 
			
		||||
	$cgit_filter_branch   = 'filter-branch'
 | 
			
		||||
	$cgit_for_each_ref    = 'for-each-ref'
 | 
			
		||||
	$cgit_update_ref      = 'update-ref'
 | 
			
		||||
	$cgit_reflog_expire   = 'reflog expire'
 | 
			
		||||
	$cgit_garbage_collect = 'gc'
 | 
			
		||||
 | 
			
		||||
	$fgit_agressive       = '--aggressive'
 | 
			
		||||
	$fgit_all             = '--all'
 | 
			
		||||
	$fgit_cached          = '--cached'
 | 
			
		||||
	$fgit_format          = '--format'
 | 
			
		||||
	$fgit_expire_now      = '--expire=now'
 | 
			
		||||
	$fgit_ignore_unmatch  = '--ignore-unmatch'
 | 
			
		||||
	$fgit_index_filter    = '--index-filter'
 | 
			
		||||
	$fgit_force           = '--force'
 | 
			
		||||
    $fgit_prune_empty     = '--prune-empty'
 | 
			
		||||
	$fgit_prune_now       = '--prune=now'
 | 
			
		||||
    $fgit_tag_name_filter = '--tag-name-filter'
 | 
			
		||||
	$fgit_stdin           = '--stdin'
 | 
			
		||||
 | 
			
		||||
	$fgit_filter_concat   = 'cat'
 | 
			
		||||
	$fgit_filter_separate = '--'
 | 
			
		||||
 | 
			
		||||
	$fmt_delete_refs = 'delete $(refname)'
 | 
			
		||||
	$original_refs   = 'refs/original'
 | 
			
		||||
 | 
			
		||||
	$filter_cmd = 'git rm -r --cached'
 | 
			
		||||
 | 
			
		||||
    # Construct filter-branch command
 | 
			
		||||
    $filter_branch_args = @()
 | 
			
		||||
    $filter_branch_args += $fgit_force
 | 
			
		||||
    $filter_branch_args += $fgit_index_filter
 | 
			
		||||
    $filter_branch_args += "git rm -r $fgit_cached $fgit_ignore_unmatch $path_content"
 | 
			
		||||
    $filter_branch_args += $fgit_prune_empty
 | 
			
		||||
    $filter_branch_args += $fgit_tag_name_filter
 | 
			
		||||
    $filter_branch_args += $fgit_filter_concat
 | 
			
		||||
    $filter_branch_args += $fgit_filter_separate
 | 
			
		||||
    $filter_branch_args += $fgit_all
 | 
			
		||||
 | 
			
		||||
    # Execute filter-branch command
 | 
			
		||||
    & git $cgit_filter_branch $filter_branch_args
 | 
			
		||||
 | 
			
		||||
    # Construct for-each-ref command
 | 
			
		||||
    $for_each_ref_args = @()
 | 
			
		||||
    $for_each_ref_args += "$fgit_format='$fmt_delete_refs'"
 | 
			
		||||
    $for_each_ref_args += $original_refs
 | 
			
		||||
 | 
			
		||||
    # Execute for-each-ref and pipe to update-ref
 | 
			
		||||
    $refs_to_delete = & git $cgit_for_each_ref $for_each_ref_args
 | 
			
		||||
    $refs_to_delete | & git $cgit_update_ref $fgit_stdin
 | 
			
		||||
 | 
			
		||||
    # Construct and execute reflog expire command
 | 
			
		||||
    $reflog_expire_args = @()
 | 
			
		||||
    $reflog_expire_args += $fgit_expire_now
 | 
			
		||||
    $reflog_expire_args += $fgit_all
 | 
			
		||||
    & git $cgit_reflog_expire $reflog_expire_args
 | 
			
		||||
 | 
			
		||||
    # Construct and execute garbage collect command
 | 
			
		||||
    $gc_args = @()
 | 
			
		||||
    $gc_args += $fgit_prune_now
 | 
			
		||||
    $gc_args += $fgit_aggressive
 | 
			
		||||
    & git $cgit_garbage_collect $gc_args
 | 
			
		||||
 | 
			
		||||
	pop-location
 | 
			
		||||
}
 | 
			
		||||
Remove-ContentFromGitHistory
 | 
			
		||||
@@ -54,7 +54,7 @@ elseif ( $release -eq $false ) {
 | 
			
		||||
else {
 | 
			
		||||
	$optimize = $true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endregion Configuration
 | 
			
		||||
 | 
			
		||||
. $vendor_toolchain
 | 
			
		||||
. $incremental_checks
 | 
			
		||||
@@ -103,3 +103,4 @@ function run-gengasa
 | 
			
		||||
	Pop-Location
 | 
			
		||||
}
 | 
			
		||||
run-gengasa
 | 
			
		||||
#endregion Building
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								scripts/setup_content.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								scripts/setup_content.ps1
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
clear-host
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user