From 4534825e23c2dac117e8de04d3bb1eae64dffd33 Mon Sep 17 00:00:00 2001
From: client_Hale <339726288@qq.com>
Date: 星期一, 25 三月 2019 21:08:01 +0800
Subject: [PATCH] 382 寻路逻辑增加又可跳跃又可走到的目标点的距离检测判断
---
Fight/Stage/MapEditor/Game/ClientSceneManager.cs | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 171 insertions(+), 0 deletions(-)
diff --git a/Fight/Stage/MapEditor/Game/ClientSceneManager.cs b/Fight/Stage/MapEditor/Game/ClientSceneManager.cs
index 4e7a52f..3712f2b 100644
--- a/Fight/Stage/MapEditor/Game/ClientSceneManager.cs
+++ b/Fight/Stage/MapEditor/Game/ClientSceneManager.cs
@@ -251,6 +251,7 @@
}
private List<MapTrasfer> m_ChkedList = new List<MapTrasfer>();
+ private List<MapTrasfer> m_ChkedList1 = new List<MapTrasfer>();
public Vector3 GetTransPoint(Vector3 start, Vector3 next)
{
@@ -259,6 +260,176 @@
return GetNext(start, next);
}
+ public Vector3 GetNext1(Vector3 start, Vector3 dest)
+ {
+ m_ChkedList1.Clear();
+
+ if (PathFinder.WalkAble(start, dest))
+ {
+ float _dis = PathFinder.CalculateDistance(start, dest);
+ Debug.Log("寰楀嚭鐨勮窛绂诲钩鏂逛负: " + _dis);
+
+ int _chkTransID = -1;
+ int _chkIndex = -1;
+ float _compareDis = float.MaxValue;
+ float _chkDis1;
+ float _chkDis2;
+ float _totalDis = 0;
+ foreach (var _t in m_MapData.transfers)
+ {
+ if (_t.transferPoints.Length >= 2)
+ {
+ if (!PathFinder.WalkAble(_t.transferPoints[0].position, dest)
+ && !PathFinder.WalkAble(_t.transferPoints[_t.transferPoints.Length - 1].position, dest))
+ {
+ continue;
+ }
+
+ _chkDis1 = Vector3.Distance(_t.transferPoints[0].position, dest);
+ _chkDis2 = Vector3.Distance(_t.transferPoints[_t.transferPoints.Length - 1].position, dest);
+
+ if (_chkDis1 > _compareDis && _chkDis2 > _compareDis)
+ {
+ continue;
+ }
+
+ if (_chkDis1 < _chkDis2)
+ {
+ _compareDis = _chkDis1;
+ _chkIndex = 0;
+ }
+ else
+ {
+ _compareDis = _chkDis2;
+ _chkIndex = _t.transferPoints.Length - 1;
+ }
+ m_ChkedList1.Add(_t);
+ }
+ }
+ Debug.LogFormat("绂荤粓鐐规渶杩戠殑鐐逛负椋炶穬缁�: {0} 鐨勭 {1} 涓偣", _chkTransID, _chkIndex);
+ if (m_ChkedList1.Count == 0)
+ {
+ return Vector3.zero;
+ }
+ var _t1 = m_ChkedList1[m_ChkedList1.Count - 1];
+ for (int i = 0; i < _t1.transferPoints.Length - 1; ++i)
+ {
+ var _p1 = _t1.transferPoints[i].position;
+ _p1.y = 0;
+ var _p2 = _t1.transferPoints[i + 1].position;
+ _p2.y = 0;
+ _totalDis += Vector3.Distance(_p1, _p2);
+ // Debug.LogFormat(" ### 2涓偣鐨勮窛绂�: {0}, {1}", Vector3.Distance(_p1, _p2), _totalDis);
+ }
+ var _p = _t1.transferPoints[_chkIndex].position;
+ _p.y = 0;
+ _totalDis += Vector3.Distance(_p, dest);
+ //Debug.LogFormat(" ### 缁堢偣鍜岃烦璺冪偣鐨勮窛绂�: {0}, {1}", Vector3.Distance(_p, dest), _totalDis);
+ var _nextIdx = _chkIndex == 0 ? _t1.transferPoints.Length - 1 : 0;
+ _p = _t1.transferPoints[_nextIdx].position;
+ var _startDis = PathFinder.CalculateDistance(start, _p);
+ _totalDis += _startDis;
+ //Debug.LogFormat(" ### 璧风偣鍜岃烦璺冪偣鐨勮窛绂�: {0}, {1}", _startDis, _totalDis);
+ if (_totalDis < _dis)
+ {
+ return _p;
+ }
+ var _next = GetNext11(start, _p, ref _totalDis, _dis);
+ if (_totalDis < _dis)
+ {
+ return _next;
+ }
+ else
+ {
+ return Vector3.zero;
+ }
+ }
+ else
+ {
+ return GetNext(start, dest);
+ }
+ }
+
+ private Vector3 GetNext11(Vector3 start, Vector3 dest, ref float dis, float totalDis)
+ {
+ float _chkDis1;
+ float _chkDis2;
+ float _compareDis = float.MaxValue;
+ int _chkTransID = -1;
+ int _chkIndex = -1;
+
+ foreach (var _t in m_MapData.transfers)
+ {
+ if (m_ChkedList1.Contains(_t))
+ {
+ continue;
+ }
+
+ if (_t.transferPoints.Length >= 2)
+ {
+ if (!PathFinder.WalkAble(_t.transferPoints[0].position, dest)
+ && !PathFinder.WalkAble(_t.transferPoints[_t.transferPoints.Length - 1].position, dest))
+ {
+ continue;
+ }
+ _chkDis1 = Vector3.Distance(_t.transferPoints[0].position, dest);
+ _chkDis2 = Vector3.Distance(_t.transferPoints[_t.transferPoints.Length - 1].position, dest);
+
+ if (_chkDis1 > _compareDis && _chkDis2 > _compareDis)
+ {
+ continue;
+ }
+
+ if (_chkDis1 < _chkDis2)
+ {
+ _compareDis = _chkDis1;
+ _chkIndex = 0;
+ }
+ else
+ {
+ _compareDis = _chkDis2;
+ _chkIndex = _t.transferPoints.Length - 1;
+ }
+
+ m_ChkedList1.Add(_t);
+ _chkTransID = _t.id;
+ }
+ }
+
+ if (m_ChkedList1.Count == 0)
+ {
+ return Vector3.zero;
+ }
+
+ var _t1 = m_ChkedList1[m_ChkedList1.Count - 1];
+
+ if (_chkTransID != -1)
+ {
+ for (int i = 0; i < _t1.transferPoints.Length - 1; ++i)
+ {
+ var _p1 = _t1.transferPoints[i].position;
+ _p1.y = 0;
+ var _p2 = _t1.transferPoints[i + 1].position;
+ _p2.y = 0;
+ dis += Vector3.Distance(_p1, _p2);
+ // Debug.LogFormat(" ### 2涓偣鐨勮窛绂�: {0}", Vector3.Distance(_p1, _p2));
+ }
+ var _p = _t1.transferPoints[_chkIndex].position;
+ _p.y = 0;
+ dis += Vector3.Distance(_p, dest);
+ _p = _t1.transferPoints[_chkIndex].position;
+ _p.y = 0;
+ //Debug.LogFormat(" ### 缁堢偣鍜岃烦璺冪偣鐨勮窛绂�: {0}", Vector3.Distance(_p, dest));
+ int _nextIdx = _chkIndex == 0 ? _t1.transferPoints.Length - 1 : 0;
+ return GetNext11(start, _t1.transferPoints[_nextIdx].position, ref dis, totalDis);
+ }
+ else
+ {
+ int _nextIdx = _chkIndex == 0 ? _t1.transferPoints.Length - 1 : 0;
+ return _t1.transferPoints[_nextIdx].position;
+ }
+ }
+
private Vector3 GetNext(Vector3 start, Vector3 next)
{
Vector3 _targetPos = Vector3.zero;
--
Gitblit v1.8.0