RealtimeStyleTransferRuntime/Plugins/GameFeatures/TopDownArena/Source/TopDownArenaRuntime/Private/TopDownArenaAttributeSet.cpp

77 lines
2.4 KiB
C++

// 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<FLifetimeProperty>& 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);
}
}