RiftMayhem/Assets/Scripts/AbilitySystem/Effects/MovementSpeedModifierEffectInstance.cs
Pedro Gomes 5adce736df Endgame sets, regen & movement speed balance
- added 2 end game sets (mage and vampire)
- updated player health and mana regens (greatly decreased, mostly endgame ridiculous scaling)
- updated movement speed modifier and caps (greatly decreased, mostrly endgame ridiculous scaling)
2024-08-08 19:55:31 +01:00

107 lines
3.2 KiB
C#

using UnityEngine;
using UnityEngine.AI;
using Photon.Pun;
public class MovementSpeedModifierEffectInstance : StatusEffectInstance
{
public float currentSpeedModifierPercent;
private NavMeshAgent navMeshAgent;
private float baseSpeed;
private float baseTurnSpeed;
private float baseAcceleration;
protected override void Awake()
{
base.Awake();
navMeshAgent = GetComponent<NavMeshAgent>();
baseSpeed = navMeshAgent.speed;
baseTurnSpeed = navMeshAgent.angularSpeed;
baseAcceleration = navMeshAgent.acceleration;
}
public float ModifyMovementSpeed()
{
return baseSpeed * (1 + currentSpeedModifierPercent);
}
public float ModifyTurnSpeed()
{
return baseTurnSpeed * (1 + currentSpeedModifierPercent);
}
public float ModifyAcceleration()
{
return baseAcceleration * (1 + currentSpeedModifierPercent);
}
public float GetHighestAmount(float value)
{
float highestAmount = value;
for (int i = activeStacks.Count - 1; i >= 0; i--)
{
if (((MovementSpeedModifierEffect)activeStacks[i]).speedModifierPercentage > highestAmount)
highestAmount = ((MovementSpeedModifierEffect)activeStacks[i]).speedModifierPercentage;
}
return highestAmount;
}
[PunRPC]
public void RPC_ApplyMovementSpeedModifierEffect(int effectIndex, float value)
{
ApplyEffect(StatusEffectIndexer.Instance.StatusEffects[effectIndex], value);
}
public override void ApplyEffect(StatusEffect effect, float value)
{
base.ApplyEffect(effect, value);
UpdateNavMeshAgentSpeed();
}
protected override void AddStack(StatusEffect addedEffect, float value)
{
if (activeStacks.Count <= 0)
{
currentSpeedModifierPercent = value;
}
else if (canStack)
{
currentSpeedModifierPercent += value;
}
base.AddStack(addedEffect, value);
UpdateNavMeshAgentSpeed();
}
protected override void RefreshEffect(StatusEffect effect, float value)
{
base.RefreshEffect(effect, value);
currentSpeedModifierPercent = GetHighestAmount(value);
OnEffectStackAdded();
UpdateNavMeshAgentSpeed();
}
protected override void EffectStateEnded()
{
currentSpeedModifierPercent = 0;
UpdateNavMeshAgentSpeed();
base.EffectStateEnded();
}
private void UpdateNavMeshAgentSpeed()
{
if (navMeshAgent != null)
{
navMeshAgent.speed = ModifyMovementSpeed();
navMeshAgent.speed = Mathf.Clamp(navMeshAgent.speed, baseSpeed, GameConstants.CharacterBalancing.MovementSpeedCap);
navMeshAgent.angularSpeed = ModifyTurnSpeed();
navMeshAgent.angularSpeed = Mathf.Clamp(navMeshAgent.angularSpeed, baseTurnSpeed, baseTurnSpeed * (1 + GameConstants.CharacterBalancing.PercentAngularSpeedCap));
navMeshAgent.acceleration = ModifyAcceleration();
navMeshAgent.acceleration = Mathf.Clamp(navMeshAgent.acceleration, baseAcceleration, baseAcceleration * (1 + GameConstants.CharacterBalancing.PercentAccelerationCap));
}
}
}