少年修仙传客户端代码仓库
client_Hale
2019-04-15 7b2e8fc55e50b9f1f94364426e71288b32edd15f
382 客户端掉落逻辑
4个文件已修改
145 ■■■■ 已修改文件
Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA127_tagMCStartChangeMap.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/ClientDropItemUtility.cs 141 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/Dungeon/DungeonStage.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
@@ -155,6 +155,7 @@
        }
        DropItemManager.ReleaseAll();
        ClientDropItemUtility.Instance.ReleaseAll();
        StatusMgr.Instance.ReleaseActor(PlayerDatas.Instance.PlayerId);
        if (!ClientDungeonStageUtility.isClientDungeon)
Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA127_tagMCStartChangeMap.cs
@@ -58,6 +58,7 @@
        DTCA713_tagMCDynamicBarrierState.Clear();
        GameObjectPoolManager.Instance.UnLoadAll();
        DropItemManager.ReleaseAll();
        ClientDropItemUtility.Instance.ReleaseAll();
        if (PlayerDatas.Instance.baseData.MapID == package.MapID)
        {
            WindowCenter.Instance.Close<LoadingWin>();
Fight/ClientDropItemUtility.cs
@@ -4,46 +4,133 @@
public class ClientDropItemUtility : Singleton<ClientDropItemUtility>
{
    public void Drop(int[] itemIds)
    public static UnityEngine.Events.UnityAction<int> OnItemPickup;
    private const float OFFSET = 1;
    private int m_TotalDropCount;
    private int m_DropedCount;
    private Vector3 m_DropPos;
    private Vector3 m_Dir;
    private List<int> m_IndexList = new List<int>();
    private List<DropItem> m_DropItemList = new List<DropItem>();
    public void Update()
    {
        var _center = PlayerDatas.Instance.hero.Pos;
        int _count = itemIds.Length;
        int _column = (int)Mathf.Sqrt(_count);
        int _i = 0;
        int _j = 0;
        var _start = _center - Vector3.one * .5f * _column * .5f;
        int _dropCount = 0;
        while (_dropCount < _count)
        var _hero = PlayerDatas.Instance.hero;
        if (_hero == null)
        {
            var _dropPos = _start + new Vector3(_j * .5f, 0, _i * .5f);
            RaycastHit _hit;
            return;
        }
            if (!Physics.Raycast(_dropPos + new Vector3(0, 50, 0), Vector3.down, out _hit, 80, LayerUtility.WalkbleMask))
        float _dis;
        DropItem _item;
        for (int i = m_DropItemList.Count - 1; i >= 0; --i)
        {
            _item = m_DropItemList[i];
            _dis = MathUtility.DistanceSqrtXZ(_item.transform.position, _hero.Pos);
            if (_dis < .25f)
            {
                continue;
            }
                if (OnItemPickup != null)
                {
                    OnItemPickup(_item.itemId);
                }
            DropItem _item = DropItem.Drop(itemIds[_dropCount], _hit.point, CameraController.Instance.CameraObject);
            _dropCount += 1;
            if (_j < _column - 1)
            {
                _j = _j + 1;
            }
            else
            {
                _j = 0;
                _i = _i + 1;
                Release(_item);
            }
        }
    }
    public void Drop(int itemID, Vector3 position)
    public void ReleaseAll()
    {
        for (int i = m_DropItemList.Count - 1; i >= 0; --i)
        {
            Release(m_DropItemList[i]);
        }
    }
    private class ClientDropItem
    public void Release(DropItem item)
    {
        DropItem.Reycle(item);
        m_DropItemList.Remove(item);
    }
    public void Drop(Vector3 center, int[] itemIds)
    {
        if (itemIds == null || itemIds.Length == 0)
        {
            return;
        }
        RaycastHit _hit;
        if (!Physics.Raycast(center + new Vector3(0, 50, 0),
                             Vector3.down,
                             out _hit,
                             80,
                             LayerUtility.WalkbleMask))
        {
            return;
        }
        m_IndexList.Clear();
        m_DropPos = center;
        m_DropedCount = 0;
        m_TotalDropCount = itemIds.Length;
        m_Dir = Vector3.forward;
        DropItem _item = DropItem.Drop(itemIds[m_DropedCount],
                         _hit.point,
                         CameraController.Instance.CameraObject);
        m_DropItemList.Add(_item);
        m_DropedCount += 1;
        int _x = Mathf.CeilToInt(m_DropPos.x * 100000);
        int _z = Mathf.CeilToInt(m_DropPos.z * 10);
        m_IndexList.Add(_x + _z);
        DropNext(itemIds);
    }
    public void DropNext(int[] itemIds)
    {
        if (m_DropedCount < m_TotalDropCount)
        {
            var _nextDir = MathUtility.Rotate90_XZ_CW(m_Dir);
            var _nextPos = m_DropPos + _nextDir * OFFSET;
            int _x = Mathf.CeilToInt(_nextPos.x * 100000);
            int _z = Mathf.CeilToInt(_nextPos.z * 10);
            int _index = _x + _z;
            if (m_IndexList.Contains(_index))
            {
                m_DropPos = m_DropPos + m_Dir * OFFSET;
                _x = Mathf.CeilToInt(m_DropPos.x * 100000);
                _z = Mathf.CeilToInt(m_DropPos.z * 10);
                _index = _x + _z;
            }
            else
            {
                m_Dir = _nextDir;
                m_DropPos = _nextPos;
            }
            m_IndexList.Add(_index);
            RaycastHit _hit;
            if (Physics.Raycast(m_DropPos + new Vector3(0, 50, 0),
                                 Vector3.down,
                                 out _hit,
                                 80,
                                 LayerUtility.WalkbleMask))
            {
                DropItem _item = DropItem.Drop(itemIds[m_DropedCount],
                                 _hit.point,
                                 CameraController.Instance.CameraObject);
                m_DropItemList.Add(_item);
                m_DropedCount += 1;
            }
            DropNext(itemIds);
        }
    }
}
Fight/Stage/Dungeon/DungeonStage.cs
@@ -146,6 +146,7 @@
        ClientSceneManager.Instance.UnInit();
        GAMgr.Instance.UnInit();
        DropItemManager.ReleaseAll();
        ClientDropItemUtility.Instance.ReleaseAll();
        SFXPlayUtility.Instance.Unitialize();
        FakeDungeonUtility.Instance.Reset();
    }
@@ -160,6 +161,7 @@
        FlyObjectManager.Instance.Update();
        DropItemManager.Update();
        ClientDropItemUtility.Instance.Update();
        ClientSceneManager.Instance.Update();