using UnityEngine;

namespace pdinklag.CPW.Common
{
    /// <summary>
    /// Interface for camera control.
    /// </summary>
    public interface ICamera
    {
        /// <summary>
        /// The camera's position.
        /// </summary>
        Vector3 Position { get; set; }

        /// <summary>
        /// Sets the camera's target.
        /// </summary>
        ITarget Target { set; }

        /// <summary>
        /// Zooms the camera lens to the specified FOV.
        /// </summary>
        /// <param name="ctx">the execution context</param>
        /// <param name="targetFOV">the target FOV</param>
        /// <param name="duration">the zoom duration</param>
        YieldInstructionCode SetFOV(IContext ctx, float targetFOV, float duration);

        /// <summary>
        /// Zooms the camera lens to the specified FOV instantly.
        /// </summary>
        /// <param name="targetFOV">the target FOV</param>
        void SetFOV(float targetFOV);
    }
}
