少年修仙传客户端代码仓库
client_linchunjie
2019-03-25 21cb6d1c277fd2483679a05902dde4b420ebc26c
Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts
4个文件已修改
229 ■■■■■ 已修改文件
Core/AI/NavmeshPathFind/PathFinder.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/MapTransferUtility.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/MapEditor/Game/ClientSceneManager.cs 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Equip/EquipModel.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/AI/NavmeshPathFind/PathFinder.cs
@@ -27,6 +27,23 @@
        return false;
    }
    public static float CalculateDistance(Vector3 start, Vector3 dest)
    {
        float _dis = float.MaxValue;
        start.y = 0;
        dest.y = 0;
        NavMesh.CalculatePath(start, dest, -1, _path);
        if (_path.corners != null && _path.corners.Length > 1)
        {
            _dis = 0;
            for (int i = 0; i < _path.corners.Length - 1; ++i)
            {
                _dis += Vector3.Distance(_path.corners[i], _path.corners[i + 1]);
            }
        }
        return _dis;
    }
    public static bool TryGetValidDest(Vector3 start, Vector3 dest, ref Vector3 validDest)
    {
        dest = AdjustPosition(dest);
Fight/MapTransferUtility.cs
@@ -266,6 +266,8 @@
        Vector3 _destPostion = Vector3.zero;
        var _curStage = StageLoad.Instance.currentStage as DungeonStage;
        // 判断是否能够得到到达指定点
        // 获取NPC位置数据
        GAStaticDefine.NPCLocation _npcLocation;
@@ -327,7 +329,6 @@
                                                          _nextMapID);
                    if (_transportID != -1)
                    {
                        var _curStage = StageLoad.Instance.currentStage as DungeonStage;
                        if (_curStage)
                        {
                            Vector3 _moveToPos;
@@ -380,14 +381,39 @@
            Debug.LogErrorFormat("移动至NPC: {0} 时找不到一个可以到达的点.", NpcID);
            yield break;
        }
        float _dist = 0.01f;
        var _config = NPCConfig.Get(NpcID);
        if (_config != null)
        {
            _dist = Mathf.Max(GeneralDefine.CloseNpcDist + _config.ModelRadius - 0.3f, 0);
        }
        if (PathFinder.WalkAble(_hero.Pos, _destPostion, _dist) || NpcID == 32504001)
        {
            while (true)
            {
                Vector3 _nextPos = ClientSceneManager.Instance.GetNext1(_hero.Pos, _destPostion);
                if (_nextPos == Vector3.zero)
                {
                    break;
                }
                float _dis = MathUtility.DistanceSqrtXZ(_hero.Pos, _nextPos);
                while (_dis > 0.01f)
                {
                    _dis = MathUtility.DistanceSqrtXZ(_hero.Pos, _nextPos);
                    _hero.MoveToPosition(_nextPos);
                    yield return null;
                }
                while (!GA_Hero.s_Flying)
                {
                    yield return null;
                }
                while (GA_Hero.s_Flying)
                {
                    yield return null;
                }
            }
            _MoveToNPC(NpcID, sid);
        }
        else
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;
System/Equip/EquipModel.cs
@@ -50,6 +50,7 @@
            packModel.refrechPackEvent += OnItemPackRefresh;
            packModel.refreshItemCountEvent += OnItemCountRefresh;
            PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh;
            particularModel.PowerUpdate += OnPowerUpdate;
        }
        public override void UnInit()
@@ -57,6 +58,7 @@
            packModel.refrechPackEvent -= OnItemPackRefresh;
            packModel.refreshItemCountEvent -= OnItemCountRefresh;
            PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh;
            particularModel.PowerUpdate -= OnPowerUpdate;
        }
        public void OnAfterPlayerDataInitialize()
@@ -607,7 +609,6 @@
                    if (selectedLevel.value > 0)
                    {
                        appearance.value = GetAppearance(selectedLevel.value);
                        fightPoint.value = GetFightPoint(selectedLevel.value);
                        RefreshCandidateEquips(selectedLevel.value);
                        UpdateSuitPlaces(selectedLevel.value);
                        UpdateSuitProperty(selectedLevel.value, selectedStarLevel.value);
@@ -642,8 +643,6 @@
                    equipSets[clientPlace.x].UpdateEquipSlot(clientPlace.y, equip == null ? string.Empty : equip.guid);
                    appearance.value = GetAppearance(selectedLevel.value);
                    fightPoint.value = GetFightPoint(selectedLevel.value);
                    if (clientPlace.x == selectedLevel.value)
                    {
                        equipDirty = true;
@@ -672,6 +671,14 @@
            }
        }
        private void OnPowerUpdate()
        {
            if (selectedLevel.value != 0)
            {
                fightPoint.value = GetFightPoint(selectedLevel.value);
            }
        }
        private void UpdateRedpoints()
        {
            var unLockedLevels = GetUnLockedEquipSets();