Esempio n. 1
0
        private static void LoadModelComplete(LoadedObjData data, LoadCompleteCallBackParameter parameter)
        {
            GameObject resObj = data.LoadedObj as GameObject;
            object     param1 = parameter.Parameter1;
            object     param2 = parameter.Parameter2;
            object     param3 = parameter.Parameter3;

            if (null == param1 || null == param2)
            {
                return;
            }

            GameObject rootObj = param1 as GameObject;

            if (null == rootObj)
            {
                return;
            }
            Tab_CharModel charModelTab = param2 as Tab_CharModel;

            Obj baseObj = rootObj.GetComponent <Obj>();

            if (baseObj == null)
            {
                return;
            }

            GameObject charModel = Object.Instantiate(resObj) as GameObject;

            if (null == charModel || charModelTab == null)
            {
                return;
            }
            else
            {
                charModel.name = "Model";
            }
            if (false == ReloadModel(rootObj, charModel))
            {
                return;
            }
            if (rootObj.GetComponent <Obj_NPC>())
            {
                if (rootObj.GetComponent <Obj_NPC>().isVisible)
                {
                    rootObj.GetComponent <Obj_NPC>().BecameVisible();
                }
            }
            string lastUrl = baseObj.MainModelUrl;

            baseObj.SetMainModelUrl(data.Url);
            ResourcesManager.Instance.AddCachedRef(data.Url, EResourceType.CharacterModel, baseObj.ObjType);
            baseObj.InitEffect();
            //特异化处理
            switch (baseObj.ObjType)
            {
            case Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_CLIENT:
            {
                Obj_Client curCharacter = baseObj as Obj_Client;
                if (curCharacter == null)
                {
                    LogModule.ErrorLog("charObj {0} loaded error!", rootObj.name);
                    break;
                }
                curCharacter.BaseAttr.RoleName = charModelTab.Name;

                curCharacter.AnimationFilePath = charModelTab.AnimPath;

                curCharacter.OnModelInitOk();
                DelAsycModelOver delOverFunction = param3 as DelAsycModelOver;
                if (null != delOverFunction)
                {
                    delOverFunction(curCharacter, null);
                }
                break;
            }

            case Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_NPC:
            {
                //由于InitAnimation中用到了Model,所以放在模型加载结束后初始化
                Obj_NPC objNPC = baseObj as Obj_NPC;
                if (objNPC == null)
                {
                    LogModule.ErrorLog("charObj {0} loaded error!", rootObj.name);
                    break;
                }


                if (MobileHardwareInfo.Instance.HardwareLevel == Games.GlobeDefine.GameDefine_Globe.HardwardLevel.LEVEL_HIGH)
                {
                    UpdateEdgeGlow edgeGlow = charModel.GetComponent <UpdateEdgeGlow>();
                    if (edgeGlow == null)
                    {
                        edgeGlow = charModel.AddComponent <UpdateEdgeGlow>();
                    }

                    objNPC.NpcEdgeGlow = edgeGlow;

                    if (objNPC.NpcType == GameDefine_Globe.NPC_TYPE.BOSS)
                    {
                        if (objNPC.NpcEdgeGlow != null)
                        {
                            //  objNPC.NpcEdgeGlow.SetBossOutLineWidth(GlobeVar.BOSS_OUTLINE_WIDTH);
                            //add 用Cabal/Light Probes Rim Alpha Test 代替原来的Cabal/EdgeGlow shader.
                        }
                    }
                }

                if (MobileHardwareInfo.Instance.HardwareLevel == Games.GlobeDefine.GameDefine_Globe.HardwardLevel.LEVEL_LOW)
                {
                    Transform trans = objNPC.transform.FindChild("shadow");
                    if (trans != null)
                    {
                        trans.gameObject.SetActive(false);
                    }
                }

                objNPC.OnModelInitOk();
                break;
            }

            case Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER:
            {
                Obj_OtherPlayer objOtherPlayer = baseObj as Obj_OtherPlayer;
                if (null == objOtherPlayer)
                {
                    return;
                }

                bool value = (bool)param3;
                if (null != objOtherPlayer)
                {
                    if (!value)
                    {
                        objOtherPlayer.NormalGameObject = charModel;
                    }
                    else
                    {
                        objOtherPlayer.ChangeGameObject = charModel;
                        Utils.SetActive(objOtherPlayer.ChangeGameObject, true);
                        objOtherPlayer.m_lastMainObjUrl = lastUrl;
                    }
                }
                objOtherPlayer.RealoadPlayerWeaponVisual();
                objOtherPlayer.RealoadPlayerFlyWingModel();

                //由于InitAnimation中用到了Model,所以放在模型加载结束后初始化
                objOtherPlayer.UpdateCombatValue();
                objOtherPlayer.OnModelInitOk();
                objOtherPlayer.UpdateBelleShow();
                //objOtherPlayer.RideOrUnMount(objOtherPlayer.MountID);
                break;
            }

            case Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_ZOMBIE_PLAYER:
            {
                Obj_ZombieUser zombieUser = baseObj as Obj_ZombieUser;
                if (null == zombieUser)
                {
                    return;
                }
                zombieUser.RealoadPlayerWeaponVisual();
                zombieUser.OnModelInitOk();
                break;
            }

            case Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_FELLOW:
            {
                //由于InitAnimation中用到了Model,所以放在模型加载结束后初始化
                Obj_Fellow objFellow = baseObj as Obj_Fellow;
                if (null != objFellow)
                {
                    objFellow.SetVisible(objFellow.IsVisibleChar());
                }
                break;
            }

            case Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER:
            {
                Obj_MainPlayer main  = baseObj as Obj_MainPlayer;
                bool           value = (bool)param3;
                if (null != main)
                {
                    if (!value)
                    {
                        main.NormalGameObject = charModel;
                    }
                    else
                    {
                        main.ChangeGameObject = charModel;
                        Utils.SetActive(main.ChangeGameObject, false);
                        main.m_lastMainObjUrl = lastUrl;
                    }
                    ObjManager.AddOutLineMaterial(charModel);
                    main.RealoadPlayerWeaponVisual();
                    main.UpdateCombatValue();
                    main.OnModelInitOk();
                    main.UpdateBelleShow();
                    //main.RideOrUnMount(main.MountID);
                }
                Singleton <ObjManager> .Instance.m_bBeginAsycCreateMainPlayer = false;
                SetPlayerShader(charModel);
                CameraManager.Instance.ResetCameraCullingMash();

                if (!value)
                {
                    GameManager.gameManager.FlyWingMananger.ReLoadFlyWing();
                }
                main.IsNoMove = false;

                break;
            }

            case Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_YANHUA:
            case Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_SNARE:
            {
                //并没有特殊处理
                break;
            }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 加载完成有回调
        /// </summary>
        /// <param name="id"></param>
        /// <param name="type"></param>
        /// <param name="condition"></param>
        /// <param name="loadComplete"></param>
        /// <param name="loadFailed"></param>
        /// <returns></returns>
        public void Load(int id, EResourceType type, LoadCompleteCallBackParameter parameter, LoadFinishCallback loadComplete = null, Func <bool> condition = null, Action <string> loadFailed = null)
        {
            string url = _pathManager.GetPath(id, type);

            if (condition == null)
            {
                condition = () => true;
            }
            if (string.IsNullOrEmpty(url))
            {
                LogModule.ErrorLog("Retrive Failed Because url is null or empty : {0}  And ResourceType: {1}", url, type);
                if (loadFailed != null)
                {
                    if (condition())
                    {
                        loadFailed("Load Failed");
                    }
                }
                return;
            }
            Object obj = GetCached(url, type);

            if (obj != null)
            {
                if (loadComplete != null && condition())
                {
                    LoadedObjData callBackData;
                    callBackData.Url       = url;
                    callBackData.LoadedObj = obj;
                    loadComplete(callBackData, parameter);
                }
                return;
            }

            //var loader = _assetManager.Retrieve(type, _pathManager.GetPath(id, type)) ?? LoadFromCacheOrDownload(id, type);
            var loader = _assetManager.Retrieve(type, url) ?? LoadFromCacheOrDownload(url, type);

            if (loader.IsWaiting() || loader.IsLoading())
            {
                if (loadComplete != null)
                {
                    loader.EventLoadingComplete += (e) =>
                    {
                        if (condition())
                        {
                            LoadedObjData callBackData;
                            callBackData.Url       = url;
                            callBackData.LoadedObj = e.AssetBundle.mainAsset;
                            loadComplete(callBackData, parameter);
                        }
                        else
                        {
                            LogModule.WarningLog("Cancel Callback cause Condition is false: " + e.Path);
                        }
                    };
                }
                if (loadFailed != null)
                {
                    loader.EventLoadingFailed += (e) =>
                    {
                        if (condition())
                        {
                            loadFailed("Load Failed");
                        }
                    };
                }
            }
            else if (loader.IsLoaded())
            {
                if (loadComplete != null)
                {
                    if (condition())
                    {
                        LoadedObjData callBackData;
                        callBackData.Url       = url;
                        callBackData.LoadedObj = loader.AssetBundle.mainAsset;
                        loadComplete(callBackData, parameter);
                    }
                }
                if (loadFailed != null)
                {
                    if (condition())
                    {
                        loader.EventLoadingFailed += e => loadFailed(null);
                    }
                }
            }
            return;
        }