using Game.Plugins.App.Sync;
using Plugins.JNGame.Sync.Frame.AStar.RVO2;
using UnityEngine;
using Vector2 = RVO.Vector2;

namespace Game.Plugins.App.Game.RVO2
{
    public class JNGRVO2Manager : JNGSyncFrameDefault
    {

        public readonly JNRVO2Simulator Simulator = new JNRVO2Simulator();


        public override void OnSyncLoad()
        {
            
            base.OnSyncLoad();
            Simulator.setTimeStep(0.25f);
            // Simulator.setAgentDefaults(15.0f, 10, 5.0f, 5.0f, 2.0f, 2.0f, new Vector2(0.0f, 0.0f));
            Simulator.processObstacles();
            // //设置Agent的默认属性
            float neighborDist = 15.0f;//检测与邻居避障的最大距离（要关心的范围），越大纳入思考的数据量越大，越小越不安全
            int maxNeighbors = 10;//检测与邻居避障的最大个数（要关心的其他单位），越大纳入思考的数据量越大，越小越不安全
            float timeHorizon = 5.0f; //预测提前规避时间, 提前得越多，速度变化越频繁
            float timeHorizonObst = 5.0f; //预测提前规避时间(针对固定障碍), 提前得越多，速度变化越频繁
            float radius = .25f;//阻挡半径
            float maxSpeed = 20f;//所能达到得最大速度
            Vector2 velocity = new Vector2(0.0f, 0.0f);//初始的 2元线性速度，影响出生单位时排挤其他的速度
            Simulator.setAgentDefaults(neighborDist, maxNeighbors, timeHorizon, timeHorizonObst,
                radius, maxSpeed, velocity);
            
        }


        public override void OnSyncUpdate(int dt, JNFrameInfo frame, Object input)
        {
            base.OnSyncUpdate(dt, frame, input);
            // Simulator.doStep();
            // if (frame.Index > 0)
            // {
            //     Simulator.doStep();
            // }
            Simulator.doStep();
        }
    }
    
}