2D-Platformer/Assets/Scripts/Systems/Actor/ActorWeaponSystem.cs
2022-02-12 12:53:50 +02:00

40 lines
No EOL
1.2 KiB
C#

using System;
using UnityEngine;
using Zenject;
namespace DefaultNamespace
{
public class ActorWeaponSystem : InjectableComponentSystem
{
[Serializable]
public class Settings
{
public float AccuracyRegainSpeed;
public AnimationCurve AccuracyRegainSpeedCurve;
public float MaxAccuracyAttackTime;
public float MaxAccuracyDegrade;
}
[Inject] private readonly Settings settings;
protected override void OnSystemUpdate()
{
var timeDelta = Time.DeltaTime;
Entities.ForEach(
(ref ActorWeaponReferenceData weaponReference, ref ActorWeaponAccuracyData accuracy) =>
{
accuracy.AccuracyAttackTime = Mathf.Clamp(accuracy.AccuracyAttackTime - timeDelta, 0, settings.MaxAccuracyAttackTime);
accuracy.Accuracy = Mathf.MoveTowards(
accuracy.Accuracy,
0,
timeDelta *
settings.AccuracyRegainSpeed *
accuracy.AccuracyRegainSpeed *
settings.AccuracyRegainSpeedCurve.Evaluate(accuracy.AccuracyAttackTime / settings.MaxAccuracyAttackTime));
accuracy.Accuracy = Mathf.Clamp(accuracy.Accuracy, -settings.MaxAccuracyDegrade, settings.MaxAccuracyDegrade);
accuracy.AccuracyMultiply = 1;
});
}
}
}