/*
 * Author: Nikolay Dvurechensky
 * Site: https://www.dvurechensky.pro/
 * Gmail: dvurechenskysoft@gmail.com
 * Last Updated: 12 мая 2025 08:07:05
 * Version: 1.0.1
 */

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;
        }
    }
}
