48 lines
1022 B
C#
48 lines
1022 B
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace Zenject.SpaceFighter
|
|
{
|
|
// Responsibilities:
|
|
// - Interpolate rotation of enemy towards the current desired
|
|
// direction
|
|
public class EnemyRotationHandler : IFixedTickable
|
|
{
|
|
readonly Settings _settings;
|
|
readonly EnemyView _view;
|
|
|
|
public EnemyRotationHandler(
|
|
EnemyView view,
|
|
Settings settings)
|
|
{
|
|
_settings = settings;
|
|
_view = view;
|
|
}
|
|
|
|
public Vector2 DesiredLookDir
|
|
{
|
|
get; set;
|
|
}
|
|
|
|
public void FixedTick()
|
|
{
|
|
var lookDir = _view.LookDir;
|
|
|
|
var error = Vector3.Angle(lookDir, DesiredLookDir);
|
|
|
|
if (Vector3.Cross(lookDir, DesiredLookDir).z < 0)
|
|
{
|
|
error *= -1;
|
|
}
|
|
|
|
_view.AddTorque(error * _settings.TurnSpeed);
|
|
}
|
|
|
|
[Serializable]
|
|
public class Settings
|
|
{
|
|
public float TurnSpeed;
|
|
}
|
|
}
|
|
}
|