Example #1
0
        //处理寻路
        private void HandleSeek(SeekPathCom seekPathCom, SpeedCom speedCom)
        {
            //请求寻路
            if (seekPathCom.ReqSeek)
            {
                Vector2Int curPos  = seekPathCom.CurrPos;
                Vector2Int tarPos  = seekPathCom.TargetPos;
                MapData    mapData = TempConfig.GetMapData(seekPathCom.MapPos);

                //List<Vector2Int> path = AstarHelp.FindPath(curPos, tarPos, mapData.ObstaclePos);
                //seekPathCom.MovePath = path;

                TaskHelp.AddTaskTwoParam(seekPathCom, mapData, ExcuteFindPath, FinishFindPath);
                seekPathCom.ReqSeek = false;
            }

            if (seekPathCom.CurrPos.Equals(seekPathCom.TargetPos))
            {
                return;
            }
            if (seekPathCom.MovePath == null || seekPathCom.MovePath.Count <= 0)
            {
                return;
            }

            MoveFollowPath(seekPathCom.Trans, seekPathCom.MovePath, ref seekPathCom.CurrPathIndex, speedCom.MaxSpeed, seekPathCom);
            //HandleSeekMove(seekPathCom, speedCom, viewCom);
        }
Example #2
0
        //处理寻路移动
        private void HandleSeekMove(SeekPathCom seekPathCom, SpeedCom speedCom)
        {
            if (seekPathCom.MovePath == null || seekPathCom.MovePath.Count < 1)
            {
                return;
            }

            Vector2Int lastPoint;
            Vector2Int targrtPoint;

            //最后一个点
            if (seekPathCom.MovePath.Count == 1)
            {
                lastPoint   = seekPathCom.CurrPos;
                targrtPoint = seekPathCom.MovePath[0];
            }
            else
            {
                lastPoint   = seekPathCom.MovePath[0];
                targrtPoint = seekPathCom.MovePath[1];
            }


            //走到目标点---->换下一个点
            if (Vector2.Distance(new Vector2(seekPathCom.Trans.localPosition.x, seekPathCom.Trans.localPosition.y), targrtPoint) <= 0.01f)
            {
                //更新当前所处地图位置
                seekPathCom.CurrPos = targrtPoint;
                //更新目标点
                seekPathCom.MovePath.RemoveAt(0);

                //到达目标点
                if (seekPathCom.MovePath.Count < 1)
                {
                    seekPathCom.MovePath = null;
                    //ECSLocate.ECSLog.LogError("寻路结束》》》》目标点 : ", viewCom.Trans.localPosition);
                    //更新位置
                    seekPathCom.Trans.localPosition = new Vector3(targrtPoint.x, targrtPoint.y, 0);
                    return;
                }

                //最后一个点
                if (seekPathCom.MovePath.Count == 1)
                {
                    lastPoint   = seekPathCom.CurrPos;
                    targrtPoint = seekPathCom.MovePath[0];
                }
                else
                {
                    lastPoint   = seekPathCom.MovePath[0];
                    targrtPoint = seekPathCom.MovePath[1];
                }
            }

            //移动
            float   deltaDistance = speedCom.MaxSpeed * Definition.DeltaTime;
            Vector2 movePos       = CalMovePosition(lastPoint, targrtPoint, deltaDistance);

            seekPathCom.Trans.Translate(movePos);
        }
Example #3
0
        protected override void HandleComs(List <BaseCom> comList)
        {
            stopwatch.Restart();

            SeekPathCom seekPathCom = GetCom <SeekPathCom>(comList[0]);
            SpeedCom    speedCom    = GetCom <SpeedCom>(comList[1]);

            HandleSeek(seekPathCom, speedCom);

            stopwatch.Stop();
            //Debug.Log("寻路系统一次轮询花费>>>>>>" + stopwatch.Elapsed.TotalMilliseconds);
        }