various bug fixes

This commit is contained in:
Arnaud Jamin
2023-10-12 16:16:45 -04:00
parent 9be50bf331
commit 762167e3c2
27 changed files with 95 additions and 53 deletions
+46 -28
View File
@@ -80,6 +80,9 @@ void ACogSampleCharacter::GetLifetimeReplicatedProps(TArray< FLifetimeProperty >
DOREPLIFETIME_WITH_PARAMS_FAST(ACogSampleCharacter, ActiveAbilityHandles, Params);
DOREPLIFETIME_WITH_PARAMS_FAST(ACogSampleCharacter, Team, Params);
Params.Condition = COND_None;
DOREPLIFETIME_WITH_PARAMS_FAST(ACogSampleCharacter, Scale, Params);
}
@@ -117,7 +120,8 @@ void ACogSampleCharacter::EndPlay(const EEndPlayReason::Type EndPlayReason)
void ACogSampleCharacter::MarkComponentsAsPendingKill()
{
Super::MarkComponentsAsPendingKill();
ShutdownAbilitySystem();
UnregisterFromAbilitySystemEvents();
}
//--------------------------------------------------------------------------------------------------------------------------
@@ -262,6 +266,16 @@ void ACogSampleCharacter::InitializeAbilitySystem()
MARK_PROPERTY_DIRTY_FROM_NAME(ACogSampleCharacter, ActiveAbilityHandles, this);
}
bIsAbilitySystemInitialized = true;
AbilitySystem->AddLooseGameplayTags(InitialTags);
TryFinishInitialize();
}
//--------------------------------------------------------------------------------------------------------------------------
void ACogSampleCharacter::RegisterToAbilitySystemEvents()
{
//----------------------------------------
// Register to Tag change events
//----------------------------------------
@@ -280,32 +294,10 @@ void ACogSampleCharacter::InitializeAbilitySystem()
//----------------------------------------
GameplayEffectAddedHandle = AbilitySystem->OnActiveGameplayEffectAddedDelegateToSelf.AddUObject(this, &ACogSampleCharacter::OnGameplayEffectAdded);
GameplayEffectRemovedHandle = AbilitySystem->OnAnyGameplayEffectRemovedDelegate().AddUObject(this, &ACogSampleCharacter::OnGameplayEffectRemoved);
bIsAbilitySystemInitialized = true;
TryFinishInitialize();
}
//--------------------------------------------------------------------------------------------------------------------------
void ACogSampleCharacter::TryFinishInitialize()
{
if (bIsInitialized)
{
return;
}
if (HasActorBegunPlay() == false)
{
return;
}
bIsInitialized = true;
OnInitialized.Broadcast(this);
}
//--------------------------------------------------------------------------------------------------------------------------
void ACogSampleCharacter::ShutdownAbilitySystem()
void ACogSampleCharacter::UnregisterFromAbilitySystemEvents()
{
//----------------------------------------
// Unregister to Attribute events
@@ -325,11 +317,29 @@ void ACogSampleCharacter::ShutdownAbilitySystem()
//----------------------------------------
AbilitySystem->OnActiveGameplayEffectAddedDelegateToSelf.Remove(GameplayEffectAddedHandle);
AbilitySystem->OnAnyGameplayEffectRemovedDelegate().Remove(GameplayEffectRemovedHandle);
AbilitySystem->ClearActorInfo();
}
//--------------------------------------------------------------------------------------------------------------------------
void ACogSampleCharacter::TryFinishInitialize()
{
if (bIsInitialized)
{
return;
}
if (HasActorBegunPlay() == false)
{
return;
}
RegisterToAbilitySystemEvents();
bIsInitialized = true;
OnInitialized.Broadcast(this);
}
//--------------------------------------------------------------------------------------------------------------------------
void ACogSampleCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
{
@@ -615,7 +625,15 @@ void ACogSampleCharacter::OnGhostTagNewOrRemoved(const FGameplayTag InTag, int32
//--------------------------------------------------------------------------------------------------------------------------
void ACogSampleCharacter::OnScaleAttributeChanged(const FOnAttributeChangeData& Data)
{
SetActorScale3D(FVector(Data.NewValue));
Scale = Data.NewValue;
MARK_PROPERTY_DIRTY_FROM_NAME(ACogSampleCharacter, Scale, this);
OnRep_Scale();
}
//--------------------------------------------------------------------------------------------------------------------------
void ACogSampleCharacter::OnRep_Scale()
{
SetActorScale3D(FVector(Scale));
}
//--------------------------------------------------------------------------------------------------------------------------
+12 -1
View File
@@ -205,6 +205,9 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Ability)
TArray<TSubclassOf<UGameplayEffect>> Effects;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Ability)
FGameplayTagContainer InitialTags;
UPROPERTY(BlueprintAssignable)
FCogSampleCharacterEventDelegate OnInitialized;
@@ -261,7 +264,9 @@ private:
void InitializeAbilitySystem();
void ShutdownAbilitySystem();
void RegisterToAbilitySystemEvents();
void UnregisterFromAbilitySystemEvents();
void OnGameplayEffectAdded(UAbilitySystemComponent* AbilitySystemComponent, const FGameplayEffectSpec& GameplayEffectSpec, FActiveGameplayEffectHandle Handle);
@@ -275,12 +280,18 @@ private:
void UpdateActiveAbilitySlots();
UFUNCTION()
void OnRep_Scale();
UFUNCTION()
void OnRep_ActiveAbilityHandles();
UPROPERTY(ReplicatedUsing=OnRep_ActiveAbilityHandles, Transient)
TArray<FGameplayAbilitySpecHandle> ActiveAbilityHandles;
UPROPERTY(ReplicatedUsing = OnRep_Scale, Transient)
float Scale = 1.0f;
FDelegateHandle GameplayEffectAddedHandle;
FDelegateHandle GameplayEffectRemovedHandle;