- 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)
107 lines
3.2 KiB
C#
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));
|
|
}
|
|
}
|
|
} |