RiftMayhem/Assets/Scripts/AbilitySystem/Effects/MovementSpeedModifierEffectInstance.cs
Pedro Gomes 6847241e83 Multiple Updates
- ALOT of new icons
- Network Area of EffectOverTime With Tick Event ability type
- Movement Speed modifier effect
- Vampire class signature ability
- vampire new ultimate ability
2024-07-29 20:22:18 +01:00

90 lines
2.2 KiB
C#

using UnityEngine;
using UnityEngine.AI;
using Photon.Pun;
public class MovementSpeedModifierEffectInstance : StatusEffectInstance
{
public float currentSpeedModifierPercent;
private NavMeshAgent navMeshAgent;
private float baseSpeed;
protected override void Awake()
{
base.Awake();
navMeshAgent = GetComponent<NavMeshAgent>();
baseSpeed = navMeshAgent.speed;
}
public float ModifyMovementSpeed()
{
return baseSpeed * (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();
}
}
}