//### Bezier Logic Interface
//Describes public functions of any BezierLogic component
//
//It controlls only particles path, it does not controll any other aspect ot their behaviour or loock.
//
//License information: [ASSET STORE TERMS OF SERVICE AND EULA](https://unity3d.com/legal/as_terms)
//
//Developed by [MathArtCode](https://www.assetstore.unity3d.com/en/#!/search/page=1/sortby=popularity/query=publisher:8738) team, 2015

using UnityEngine;

namespace Assets.Scripts.BezierCurvedParticlesFlow.Interfaces {
    public interface IBezierLogic {
        // Returns a coordinate point relative to curve 'time' where 0 is bezier curve beginning and 1 is end of the bezier curve (length vise)        
        Vector3 GetPoint(float t);

        // Returns a velocity point relative to curve 'time' where 0 is bezier curve beginning and 1 is end of the bezier curve (length vise)
        Vector3 GetVelocity(float t);

        // Returns a normalized velocity point relative to curve 'time' where 0 is bezier curve beginning and 1 is end of the bezier curve (length vise)
        Vector3 GetDirection(float t);

        // Sets a value of a point
        //- positioning (end points) have indexes 0, 3, 6, ... 
        //- angles (control points) have indexes 1,2, 4,5, ...
        void SetControlPoint(int index, Vector3 point);

        //Gets a point value
        //- positioning (end points) have indexes 0, 3, 6, ... 
        //- angles (control points) have indexes 1,2, 4,5, ...
        Vector3 GetControlPoint(int index);

        //Gets all avaliable points ammount (including end points)
        int ControlPointCount { get; }

        //Removes 
        void RemovePoint(int selectedIndex);
    }
}