40 lines
No EOL
1.2 KiB
C#
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;
|
|
});
|
|
}
|
|
}
|
|
} |