Ejemplo n.º 1
0
        //房间配置寻路数据
        public IEnumerator ConfigPathfinderData(GameResPackage.AsyncLoadPackageData loadData)
        {
            //寻路组件
            Pathfinder finder = m_roomObj.AddComponent <Pathfinder>();

            finder.MapStartPosition = new Vector2(m_locatorObj.transform.position.x, m_locatorObj.transform.position.z);
            finder.MapEndPosition   = new Vector2(m_RTLocatorObj.transform.position.x, m_RTLocatorObj.transform.position.z);
            finder.Tilesize         = GameSettings.Singleton.m_roomPathfinderTileSize;
            finder.CreateMap(m_obstacleData);
            for (int i = 0; i < m_gateList.Count; i++)
            {
                if (!m_gateList[i].isGateOpen)
                {
                    continue;
                }
                if (null != m_gateList[i].BridgeData)
                {
                    GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData();
                    IEnumerator e = m_gateList[i].BridgeData.nextRoomNode.ConfigPathfinderData(loadData2);
                    while (true)
                    {
                        e.MoveNext();
                        if (loadData2.m_isFinish)
                        {
                            break;
                        }
                        yield return(e.Current);
                    }
                }
            }
            loadData.m_isFinish = true;
        }
Ejemplo n.º 2
0
    //协程-加载武器
    public IEnumerator Coroutine_LoadWeapon(GameObject parentObj, int weaponID, GameResPackage.AsyncLoadPackageData loadData)
    {
        Transform t = Actor.S_LookupBone2(parentObj.transform, "LeftArmWeapon");

        if (t != null)
        {
            PoolManager.Singleton.ReleaseObj(t.gameObject);
        }
        t = Actor.S_LookupBone2(parentObj.transform, "RightArmWeapon");
        if (t != null)
        {
            PoolManager.Singleton.ReleaseObj(t.gameObject);
        }
        WeaponInfo weaponInfo = GameTable.WeaponInfoTableAsset.Lookup(weaponID);

        if (weaponInfo == null)
        {
            Debug.Log("WeaponInfo load error,id:" + weaponID);
        }
        else
        {
            if (weaponInfo.LeftModelID != 0)
            {
                Transform leftArmParentTrans             = Actor.S_LookupBone2(parentObj.transform, weaponInfo.LeftPoint);
                GameResPackage.AsyncLoadPackageData data = new GameResPackage.AsyncLoadPackageData();
                IEnumerator e = Coroutine_ArmLoad(leftArmParentTrans, "LeftArmWeapon", weaponInfo.LeftModelID, weaponInfo.IsHideLeftModel, data);
                while (true)
                {
                    e.MoveNext();
                    if (data.m_isFinish)
                    {
                        break;
                    }
                    yield return(e.Current);
                }
            }
            if (weaponInfo.RightModelID != 0)
            {
                Transform rightArmParentTrans            = Actor.S_LookupBone2(parentObj.transform, weaponInfo.RightPoint);
                GameResPackage.AsyncLoadPackageData data = new GameResPackage.AsyncLoadPackageData();
                IEnumerator e = Coroutine_ArmLoad(rightArmParentTrans, "RightArmWeapon", weaponInfo.RightModelID, weaponInfo.IsHideRightModel, data);
                while (true)
                {
                    e.MoveNext();
                    if (data.m_isFinish)
                    {
                        break;
                    }
                    yield return(e.Current);
                }
            }
        }
        loadData.m_isFinish = true;
    }
Ejemplo n.º 3
0
    // 加载
    public void Load(List <string> nameList, OnFinished finished)
    {
        if (nameList == null)
        {
            return;
        }

        m_nameList.Clear();

        m_total = 1;
        m_cur   = 1;

        m_finished = finished;

        PreResourceInfo info = null;

        foreach (string name in nameList)
        {
            if (m_nameList.Contains(name))
            {
                continue;
            }

            m_list.TryGetValue(name, out info);

            m_nameList.Add(name);

            // 总共加载资源数
            if (null != info)
            {
                m_total = m_total + info.m_list.Count + 1;
            }
            else
            {
                m_total = m_total + 1;
            }

            Debug.Log("Load----------" + name);
        }

        Debug.Log("m_total:" + m_total);
        if (m_nameList.Count <= 0)
        {
            return;
        }
        GameResPackage.AsyncLoadPackageData data = new GameResPackage.AsyncLoadPackageData();
        MainGame.Singleton.StartCoroutine(Load(m_nameList[0], (int)Type.enPrefab, data));
    }
Ejemplo n.º 4
0
 IEnumerator Coroutine_LoadAll()
 {
     foreach (var item in AllGameResMap)
     {
         GameResPackage.AsyncLoadPackageData data = new GameResPackage.AsyncLoadPackageData();
         IEnumerator e = item.Value.LoadPackageAsync(data);
         while (true)
         {
             e.MoveNext();
             if (data.m_isFinish)
             {
                 break;
             }
             yield return(e.Current);
         }
     }
 }
Ejemplo n.º 5
0
 IEnumerator Coroutine_PreLoad()
 {
     foreach (var item in AllGameResMap)
     {
         if (item.Value.m_loadType != GameResPackage.ENLoadType.enPreLoad)
         {
             continue;
         }
         GameResPackage.AsyncLoadPackageData data = new GameResPackage.AsyncLoadPackageData();
         IEnumerator e = item.Value.LoadPackageAsync(data);
         while (true)
         {
             e.MoveNext();
             if (data.m_isFinish)
             {
                 break;
             }
             yield return(e.Current);
         }
     }
     m_isPreLoadFinish = true;
 }
Ejemplo n.º 6
0
        // 生成场景资源数据
        public IEnumerator BuildSceneResObj(SERoomDataTree sce, GameResPackage.AsyncLoadPackageData loadData, int gateIndex = -1)
        {
            string obstacleFileName = "Prefabs/" + m_RoomPrefabName + "-bytes.bytes";

            GameResPackage.AsyncLoadObjectData loadData2 = new GameResPackage.AsyncLoadObjectData();
            IEnumerator e = PoolManager.Singleton.Coroutine_Load(obstacleFileName, loadData2, false, false);

            while (true)
            {
                e.MoveNext();
                if (loadData2.m_isFinish)
                {
                    break;
                }
                yield return(e.Current);
            }
            if (loadData2.m_obj != null)
            {
                TextAsset asset = loadData2.m_obj as TextAsset;
                if (asset == null)
                {
                    Debug.Log("obstacleFileName=" + obstacleFileName);
                }
                else
                {
                    m_obstacleData = new SceneObstacleData();
                    m_obstacleData.Load(asset.bytes);
                }
            }
            loadData2 = new GameResPackage.AsyncLoadObjectData();
            e         = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(m_RoomPrefabName), loadData2, false, false);
            while (true)
            {
                e.MoveNext();
                if (loadData2.m_isFinish)
                {
                    break;
                }
                yield return(e.Current);
            }
            if (loadData2.m_obj != null)
            {
                sce.mRoomObj = loadData2.m_obj as GameObject;
            }
            string roomDataName = m_RoomPrefabName + "-data";

            loadData2 = new GameResPackage.AsyncLoadObjectData();
            e         = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(roomDataName), loadData2, false, false);
            while (true)
            {
                e.MoveNext();
                if (loadData2.m_isFinish)
                {
                    break;
                }
                yield return(e.Current);
            }
            if (loadData2.m_obj != null)
            {
                sce.mRoomData = loadData2.m_obj as GameObject;
            }
            sce.mRoomInfoTree = this;
//             for (int i = 0; i < m_gateList.Count; i++)
//             {
//                 sce.mGateData[i] = new SEGateData();
//                 if (null != m_gateList[i].BridgeData)
//                 {
//                     SceneBridgeInfo bridgeInfo = GameTable.SceneBridgeTableAsset.Lookup(m_gateList[i].BridgeData.bridgeObjId);
//                     if (null != bridgeInfo)
//                     {
//                         loadData2 = new GameResPackage.AsyncLoadObjectData();
//                         e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(bridgeInfo.bridgeHeadPrefab), loadData2, false, false);
//                         while (true)
//                         {
//                             e.MoveNext();
//                             if (loadData2.m_isFinish)
//                             {
//                                 break;
//                             }
//                             yield return e.Current;
//                         }
//                         if (loadData2.m_obj != null)
//                         {
//                             sce.mGateData[i].mBridgeHeadObj = loadData2.m_obj as GameObject;
//                         }
//                         loadData2 = new GameResPackage.AsyncLoadObjectData();
//                         e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(bridgeInfo.bridgeBodyPrefab), loadData2, false, false);
//                         while (true)
//                         {
//                             e.MoveNext();
//                             if (loadData2.m_isFinish)
//                             {
//                                 break;
//                             }
//                             yield return e.Current;
//                         }
//                         if (loadData2.m_obj != null)
//                         {
//                             sce.mGateData[i].mBridgeBodyObj = loadData2.m_obj as GameObject;
//                         }
//                         loadData2 = new GameResPackage.AsyncLoadObjectData();
//                         e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(bridgeInfo.bridgeTailPrefab), loadData2, false, false);
//                         while (true)
//                         {
//                             e.MoveNext();
//                             if (loadData2.m_isFinish)
//                             {
//                                 break;
//                             }
//                             yield return e.Current;
//                         }
//                         if (loadData2.m_obj != null)
//                         {
//                             sce.mGateData[i].mBridgeTailObj = loadData2.m_obj as GameObject;
//                         }
//                         //sce.mGateData[i].mBridgeHeadObj = GameData.LoadPrefab<GameObject>(bridgeInfo.bridgeHeadPrefab);
//                         //sce.mGateData[i].mBridgeBodyObj = GameData.LoadPrefab<GameObject>(bridgeInfo.bridgeBodyPrefab);
//                     }
//                     sce.mGateData[i].mIsHaveTunnel = true;
//                     sce.mGateData[i].mBridgeCenterLength = m_gateList[i].BridgeData.bridgeCenterLength;
//                     sce.mGateData[i].mNextRoomNode = new SERoomDataTree();
//                     m_gateList[i].isGateOpen = true;
//                     GameResPackage.AsyncLoadPackageData loadData3 = new GameResPackage.AsyncLoadPackageData();
//                     IEnumerator e6 = m_gateList[i].BridgeData.nextRoomNode.BuildSceneResObj(sce.mGateData[i].mNextRoomNode, loadData3, (i + 2) % 4);//一共四个门0对应2,1对应3。0+2%4= 2,1+2%4=3,2+2%4=0,3+2%4=1。·
//                     while (true)
//                     {
//                         e6.MoveNext();
//                         if (loadData3.m_isFinish)
//                         {
//                             break;
//                         }
//                         yield return e6.Current;
//                     }
//                 }
//                 else
//                 {//当该房间的这个门是没有联通出去的路的,但是这个门是另外房间进来的门那这个门要有意义。否则无意义
//                     if (gateIndex == i)
//                     {
//                         m_gateList[i].isGateOpen = true;
//                         m_gateList[i].gateOpenCondId = ENGateOpenCondType.enNone;
//                     }
//                     else
//                     {
//                         m_gateList[i].isGateOpen = false;
//                     }
//                 }
//             }
            loadData.m_isFinish = true;
        }
Ejemplo n.º 7
0
    IEnumerator LoadInfo(string name, int type, GameResPackage.AsyncLoadPackageData loadData)
    {
        if (type == (int)Type.enEffect)
        {
            GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData();
            IEnumerator e = PoolManager.Singleton.Coroutine_Load(GameData.GetEffectPath(name), data);
            while (true)
            {
                e.MoveNext();
                if (data.m_isFinish)
                {
                    break;
                }
                yield return(e.Current);
            }
            //yield return PoolManager.Singleton.LoadEffectWithPool(name);
        }
        else
        {
            GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData();
            IEnumerator e = PoolManager.Singleton.Coroutine_Load(name, data);
            while (true)
            {
                e.MoveNext();
                if (data.m_isFinish)
                {
                    break;
                }
                yield return(e.Current);
            }
            //yield return PoolManager.Singleton.LoadObjWithoutDir(name, false);
        }

        m_cur++;
        Debug.Log("LoadInfo 更新m_cur " + m_cur + ",name:" + name);

        m_tempList.Remove(name);

        if (m_tempList.Count == 0)
        {
            // 移除第一个
            m_nameList.RemoveAt(0);

            // 所有资源加载完成
            if (m_nameList.Count == 0)
            {
                Debug.Log("所有资源加载完成");
                if (null != m_finished)
                {
                    m_finished();
                }
            }
            else
            {
                GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData();
                IEnumerator e = Load(m_nameList[0], 0, loadData2);
                while (true)
                {
                    e.MoveNext();
                    if (loadData2.m_isFinish)
                    {
                        break;
                    }
                    yield return(e.Current);
                }
                //MainGame.Singleton.StartCoroutine(Load(m_nameList[0], 0));
            }
        }
        else
        {
            GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData();
            IEnumerator e = LoadInfo(m_tempList[0], 1, loadData2);
            while (true)
            {
                e.MoveNext();
                if (loadData2.m_isFinish)
                {
                    break;
                }
                yield return(e.Current);
            }
            //MainGame.Singleton.StartCoroutine(LoadInfo(m_tempList[0],1));
        }
        loadData.m_isFinish = true;
    }
Ejemplo n.º 8
0
    IEnumerator Load(string name, int type, GameResPackage.AsyncLoadPackageData loadData)
    {
        if (type == (int)Type.enEffect)
        {
            GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData();
            IEnumerator e = PoolManager.Singleton.Coroutine_Load(GameData.GetEffectPath(name), data);
            while (true)
            {
                e.MoveNext();
                if (data.m_isFinish)
                {
                    break;
                }
                yield return(e.Current);
            }
            //yield return PoolManager.Singleton.LoadEffectWithPool(name);
        }
        else
        {
            GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData();
            IEnumerator e = PoolManager.Singleton.Coroutine_Load(name, data);
            while (true)
            {
                e.MoveNext();
                if (data.m_isFinish)
                {
                    break;
                }
                yield return(e.Current);
            }
            //yield return PoolManager.Singleton.LoadObjWithoutDir(name, false);
        }

        m_cur++;
        Debug.Log("Load 更新 m_cur" + m_cur + ",name:" + name);
        PreResourceInfo info = null;

        m_list.TryGetValue(name, out info);

        m_tempList.Clear();

        // 如果没有 子列表资源
        if (null == info)
        {
            // 移除
            m_nameList.RemoveAt(0);

            // 所有资源加载完成
            if (m_nameList.Count == 0)
            {
                Debug.Log("所有资源加载完成");
                if (null != m_finished)
                {
                    m_finished();
                }
            }
            else
            {
                //MainGame.Singleton.StartCoroutine(Load(m_nameList[0], (int)Type.enPrefab));
                GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData();
                IEnumerator e = Load(m_nameList[0], (int)Type.enPrefab, loadData2);
                while (true)
                {
                    e.MoveNext();
                    if (loadData2.m_isFinish)
                    {
                        break;
                    }
                    yield return(e.Current);
                }
            }
        }
        else
        {
            foreach (KeyValuePair <string, int> item in info.m_list)
            {
                m_tempList.Add(item.Key);
            }

            if (m_tempList.Count == 0)
            {
                // 移除
                m_nameList.RemoveAt(0);

                // 所有资源加载完成
                if (m_nameList.Count == 0)
                {
                    Debug.Log("所有资源加载完成");
                    if (null != m_finished)
                    {
                        m_finished();
                    }
                }
                else
                {
                    //MainGame.Singleton.StartCoroutine(Load(m_nameList[0], (int)Type.enPrefab));
                    GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData();
                    IEnumerator e = Load(m_nameList[0], (int)Type.enPrefab, loadData2);
                    while (true)
                    {
                        e.MoveNext();
                        if (loadData2.m_isFinish)
                        {
                            break;
                        }
                        yield return(e.Current);
                    }
                }
            }
            else
            {
                //MainGame.Singleton.StartCoroutine(LoadInfo(m_tempList[0], (int)Type.enEffect));
                GameResPackage.AsyncLoadPackageData loadData2 = new GameResPackage.AsyncLoadPackageData();
                IEnumerator e = LoadInfo(m_tempList[0], (int)Type.enEffect, loadData2);
                while (true)
                {
                    e.MoveNext();
                    if (loadData2.m_isFinish)
                    {
                        break;
                    }
                    yield return(e.Current);
                }
            }
            loadData.m_isFinish = true;
        }
    }
Ejemplo n.º 9
0
    //协程-加载武器
    IEnumerator Coroutine_ArmLoad(Transform parentTrans, string armWeaponName, int armModelID, bool isHideModel, GameResPackage.AsyncLoadPackageData loadData)
    {
        ModelInfo modelInfo = GameTable.ModelInfoTableAsset.Lookup(armModelID);

        if (modelInfo == null)
        {
            Debug.Log("ModelInfo load fail, id:" + armModelID);
        }
        else
        {
            GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData();
            IEnumerator e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(modelInfo.ModelFile), data, true);
            while (true)
            {
                e.MoveNext();
                if (data.m_isFinish)
                {
                    break;
                }
                yield return(e.Current);
            }
            if (data.m_obj != null)
            {
                GameObject armObj = data.m_obj as GameObject;
                if (armObj != null)
                {
                    armObj.layer = parentTrans.gameObject.layer;

                    foreach (Transform t in armObj.transform.GetComponentsInChildren <Transform>())
                    {
                        t.gameObject.layer = armObj.layer;
                    }

                    armObj.transform.parent = parentTrans;
                    armObj.transform.LocalPositionY(0);
                    armObj.transform.LocalPositionX(0);
                    armObj.transform.LocalPositionZ(0);
                    armObj.transform.LocalScaleX(1);
                    armObj.transform.LocalScaleY(1);
                    armObj.transform.LocalScaleZ(1);
                    armObj.transform.localRotation = Quaternion.Euler(0, 0, 0);
                    armObj.name = armWeaponName;

                    armObj.SetActive(!isHideModel);
                }
            }
            else
            {
                Debug.LogError("load obj fail, name:" + modelInfo.ModelFile);
            }
        }
        loadData.m_isFinish = true;
    }
Ejemplo n.º 10
0
    //协程-加载模型,并播放standby动画
    IEnumerator Coroutine_LoadModel(string prefabName, int modelID, int weaponID, GameObject parentObj, GameResPackage.AsyncLoadObjectData data, bool isAutoActive = true)
    {
        IEnumerator e = PoolManager.Singleton.Coroutine_Load(prefabName, data, true);

        while (true)
        {
            e.MoveNext();
            if (data.m_isFinish)
            {
                break;
            }
            yield return(e.Current);
        }
        if (null != data.m_obj)
        {
            GameObject obj = data.m_obj as GameObject;
            obj.layer = GameObject.Find("UI Root (2D)").layer;
            obj.SetActive(true);
            foreach (Transform t in obj.transform.GetComponentsInChildren <Transform>())
            {
                t.gameObject.layer = obj.layer;
            }
            PreAnimationLoad.Singleton.LoadAnimation(obj, modelID, weaponID);
            Animation MainAnim = obj.GetComponent <Animation>();

            if (null != MainAnim)
            {
                string     mAnimName = "";
                ModelInfo  info      = GameTable.ModelInfoTableAsset.Lookup(modelID);
                WeaponInfo wInfo     = GameTable.WeaponInfoTableAsset.Lookup(weaponID);
                if (info != null && wInfo != null)
                {
                    mAnimName = "a-" + info.modelType.ToString() + "-w" + ((int)wInfo.WeaponType).ToString() + "-";
                }
                AnimInfo tempAnimData = GameTable.AnimationTableAsset.Lookup("standby");
                if (null != tempAnimData)
                {
                    mAnimName = mAnimName + tempAnimData.AnimName[UnityEngine.Random.Range(0, tempAnimData.AnimName.Length)];
                }
                AnimationClip clip = MainAnim.GetClip(mAnimName);
                if (clip != null)
                {
                    MainAnim.CrossFade(clip.name);
                }
                else
                {
                    Debug.LogWarning("play model animation fail,prefabName:" + prefabName + ",animationName:" + mAnimName);
                }
            }

            obj.transform.parent        = parentObj.transform;
            obj.transform.localPosition = Vector3.zero;
            obj.transform.localScale    = Vector3.one;
            obj.transform.localRotation = Quaternion.Euler(0, 0, 0);

            if (weaponID != 0)
            {
                GameResPackage.AsyncLoadPackageData data2 = new GameResPackage.AsyncLoadPackageData();
                IEnumerator e2 = Coroutine_LoadWeapon(obj, weaponID, data2);
                while (true)
                {
                    e2.MoveNext();
                    if (data2.m_isFinish)
                    {
                        break;
                    }
                    yield return(e2.Current);
                }
            }

            obj.SetActive(isAutoActive);
        }
    }
Ejemplo n.º 11
0
    public IEnumerator LoadDropItem(DropItemPerformanceType item)
    {
        yield return(new WaitForSeconds(0.2f));


        GameResPackage.AsyncLoadPackageData loadData = new GameResPackage.AsyncLoadPackageData();
        IEnumerator e = null;

        EventItemInfo eventInfo = GameTable.eventItemAsset.LookUp(item.m_intParam);

        DropItemPerformanceType.Type type = item.m_type;
        if (eventInfo != null)
        {
            type = (DropItemPerformanceType.Type)eventInfo.dropType;
        }

        switch (type)
        {
        // 卡牌
        case DropItemPerformanceType.Type.enCard:
        {
            DropItemPerformanceCard cardItem = (DropItemPerformanceCard)item;

            foreach (int cardId in cardItem.m_cardList)
            {
                e = NewDropItem(loadData, item, cardId);
                while (true)
                {
                    e.MoveNext();
                    if (loadData.m_isFinish)
                    {
                        break;
                    }
                    yield return(e.Current);
                }

                Debug.Log("....cardId:" + cardId);

                yield return(new WaitForSeconds(0.1f));
            }

            // 卡牌的增长数目
            Reward.Singleton.m_cardDesNum = Reward.Singleton.m_cardNum + cardItem.m_cardList.Count;

            break;
        }

        // 金钱
        case DropItemPerformanceType.Type.enGold:
        {
            // 如果有钱则掉落金币 效果
            if (item.m_intParam > 0)
            {
                int            min       = 15;
                int            max       = 30;
                WorldParamInfo worldInfo = GameTable.WorldParamTableAsset.Lookup((int)ENWorldParamIndex.enDropGoldMinMax);
                if (null != worldInfo)
                {
                    List <int> cardList = ConvertorTool.StringToList_Int(worldInfo.StringTypeValue);
                    if (null != cardList && cardList.Count >= 2)
                    {
                        min = cardList[0];
                        max = cardList[1];
                    }
                }

                // 金币增长的数目
                int randomGold = UnityEngine.Random.Range(100, 1000);
                Reward.Singleton.m_goldDesNum = Reward.Singleton.m_goldNum + randomGold;

                int dropNum = UnityEngine.Random.Range(min, max);

                for (int i = 0; i < dropNum; i++)
                {
                    e = NewDropItem(loadData, item);
                    while (true)
                    {
                        e.MoveNext();
                        if (loadData.m_isFinish)
                        {
                            break;
                        }
                        yield return(e.Current);
                    }
                    yield return(new WaitForSeconds(0.01f));
                }
            }
            break;
        }

        // 钥匙
        case DropItemPerformanceType.Type.enKey:
        {
            e = NewDropItem(loadData, item, item.m_intParam);
            while (true)
            {
                e.MoveNext();
                if (loadData.m_isFinish)
                {
                    break;
                }
                yield return(e.Current);
            }
            break;
        }
        }
    }
Ejemplo n.º 12
0
    //
    IEnumerator NewDropItem(GameResPackage.AsyncLoadPackageData loadData, DropItemPerformanceType item, int intParam = 0)
    {
        EventItemInfo eventInfo = GameTable.eventItemAsset.LookUp(item.m_intParam);

        DropItemPerformanceType.Type type = item.m_type;
        if (eventInfo != null)
        {
            type = (DropItemPerformanceType.Type)eventInfo.dropType;
        }

        //
        string objName = "";

        switch (type)
        {
        case DropItemPerformanceType.Type.enGold:
        {
            objName = "Balk/p-b-gold";
            break;
        }

        case DropItemPerformanceType.Type.enCard:
        {
            objName = "Balk/p-b-contract";
            //DropItemPerformanceCard cardItem    = (DropItemPerformanceCard)item;
            // 根据不同星级掉落不同 模型
            HeroInfo heroInfo = GameTable.HeroInfoTableAsset.Lookup(intParam);
            if (null != heroInfo)
            {
                RarityRelativeInfo rarityInfo = GameTable.RarityRelativeAsset.LookUp(heroInfo.Rarity);
                if (null != rarityInfo)
                {
                    ModelInfo modelInfo = GameTable.ModelInfoTableAsset.Lookup(rarityInfo.m_dropItemModelID);
                    if (null != modelInfo)
                    {
                        objName = modelInfo.ModelFile;
                    }
                }
            }
            break;
        }

        case DropItemPerformanceType.Type.enKey:
        {
            // 钥匙模型
            objName = "Balk/p-b-gold";

            EventItemInfo eventItemInfo = GameTable.eventItemAsset.LookUp(intParam);
            if (null != eventItemInfo)
            {
                ModelInfo modelInfo = GameTable.ModelInfoTableAsset.Lookup(eventItemInfo.modelId);
                if (null != modelInfo)
                {
                    objName = modelInfo.ModelFile;
                }
            }
            break;
        }
        }

        float rotation = 30f;

        rotation = UnityEngine.Random.Range(0f, 360f);
        GameResPackage.AsyncLoadObjectData data = new GameResPackage.AsyncLoadObjectData();
        IEnumerator e = PoolManager.Singleton.Coroutine_Load(GameData.GetPrefabPath(objName), data);

        while (true)
        {
            e.MoveNext();
            if (data.m_isFinish)
            {
                break;
            }
            yield return(e.Current);
        }
        GameObject goldObj = data.m_obj as GameObject;

        goldObj.transform.parent   = MainGame.Singleton.MainObject.transform;
        goldObj.transform.position = item.m_deadPos;
        goldObj.SetActive(true);
        goldObj.transform.localEulerAngles = new Vector3(item.m_eulerAngles.x, item.m_eulerAngles.y + rotation, item.m_eulerAngles.z);


        int dropIndex = AddDropItem(goldObj);

        Animation anim = goldObj.transform.Find("gold_body").GetComponent <Animation>();

        PickUpCallback pickUpCallback = goldObj.transform.Find("gold_body").GetComponent <PickUpCallback>();

        if (null != pickUpCallback)
        {
            pickUpCallback.Clear();
            pickUpCallback.m_index = dropIndex;
        }

        // 随机动画
        int animationCount = anim.GetComponent <Animation>().GetClipCount();
        int animationIndex = UnityEngine.Random.Range(1, animationCount);
        int index          = 1;

        foreach (AnimationState state in anim.GetComponent <Animation>())
        {
            if (index == animationIndex)
            {
                anim.CrossFade(state.name);
                break;
            }
            index++;
        }

        loadData.m_isFinish = true;
    }