// Copyright Epic Games, Inc. All Rights Reserved. #include "TopDownArenaAttributeSet.h" #include "Net/UnrealNetwork.h" UTopDownArenaAttributeSet::UTopDownArenaAttributeSet() : BombsRemaining(1.0f) , BombCapacity(1.0f) , BombRange(2.0f) , MovementSpeed(400.0f) { } void UTopDownArenaAttributeSet::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const { Super::GetLifetimeReplicatedProps(OutLifetimeProps); DOREPLIFETIME_CONDITION_NOTIFY(ThisClass, BombsRemaining, COND_None, REPNOTIFY_Always); DOREPLIFETIME_CONDITION_NOTIFY(ThisClass, BombCapacity, COND_None, REPNOTIFY_Always); DOREPLIFETIME_CONDITION_NOTIFY(ThisClass, BombRange, COND_None, REPNOTIFY_Always); DOREPLIFETIME_CONDITION_NOTIFY(ThisClass, MovementSpeed, COND_None, REPNOTIFY_Always); } void UTopDownArenaAttributeSet::OnRep_BombsRemaining(const FGameplayAttributeData& OldValue) { GAMEPLAYATTRIBUTE_REPNOTIFY(ThisClass, BombsRemaining, OldValue); } void UTopDownArenaAttributeSet::OnRep_BombCapacity(const FGameplayAttributeData& OldValue) { GAMEPLAYATTRIBUTE_REPNOTIFY(ThisClass, BombCapacity, OldValue); } void UTopDownArenaAttributeSet::OnRep_BombRange(const FGameplayAttributeData& OldValue) { GAMEPLAYATTRIBUTE_REPNOTIFY(ThisClass, BombRange, OldValue); } void UTopDownArenaAttributeSet::OnRep_MovementSpeed(const FGameplayAttributeData& OldValue) { GAMEPLAYATTRIBUTE_REPNOTIFY(ThisClass, MovementSpeed, OldValue); } void UTopDownArenaAttributeSet::PreAttributeBaseChange(const FGameplayAttribute& Attribute, float& NewValue) const { Super::PreAttributeBaseChange(Attribute, NewValue); ClampAttribute(Attribute, NewValue); } void UTopDownArenaAttributeSet::PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) { Super::PreAttributeChange(Attribute, NewValue); ClampAttribute(Attribute, NewValue); } void UTopDownArenaAttributeSet::ClampAttribute(const FGameplayAttribute& Attribute, float& NewValue) const { if (Attribute == GetBombsRemainingAttribute()) { NewValue = FMath::Clamp(NewValue, 0.0f, GetBombCapacity()); } else if (Attribute == GetBombCapacityAttribute()) { NewValue = FMath::Max(NewValue, 1.0f); } else if (Attribute == GetBombRangeAttribute()) { NewValue = FMath::Max(NewValue, 1.0f); } else if (Attribute == GetMovementSpeedAttribute()) { NewValue = FMath::Clamp(NewValue, 200.0f, 800.0f); } }