Ejemplo n.º 1
0
//     void OnLineTickSecond()
//     {
//         EventDispatcher.Instance.DispatchEvent(new UIEvent_PerSecond());
//
//         if (0 == OnLineSeconds % 60)
//         {
//             EventDispatcher.Instance.DispatchEvent(new UIEvent_PerMinute());
//         }
//     }
    public void AttachControl()
    {
        //控制模块
        try
        {
            InputManager.Instance.OnMoveDestination = mControl.MoveTo;
            InputManager.Instance.SelectTarget      = mControl.SelectTarget;

            if (UIManager.Instance.MainUIFrame != null)
            {
                var main     = UIManager.Instance.MainUIFrame.GetComponent <MainScreenFrame>();
                var joystick = main.GetComponentsInChildren <JoyStickLogic>(true);
                if (joystick != null)
                {
                    joystick[0].OnMoveDirection = mControl.MoveDirection;
                }
                else
                {
                    Logger.Error("joystick is Null");
                }
                SkillBar = main.SkillBar.GetComponent <BattleSkillRootFrame>();
                if (SkillBar != null)
                {
                    SkillBar.OnClickEvent = mControl.OnClickEvent;
                }
                else
                {
                    Logger.Error("SkillBar is Null");
                }
            }
            else
            {
                Logger.Error("MainUI is Null");
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 7------------------{0}\n{1}", e.Message, e.StackTrace);
        }
    }
Ejemplo n.º 2
0
    public IEnumerator EnterGameCoroutine()
    {
        //加载场景Prefab
        if (!string.IsNullOrEmpty(ScenePrefab))
        {
            var ret = ResourceManager.PrepareResourceWithHolder <GameObject>(ScenePrefab, true, false);
            yield return(ret.Wait());

            try
            {
                var sceneRoot = Instantiate(ret.Resource) as GameObject;
                if (null != sceneRoot)
                {
                    sceneRoot.transform.parent = transform;

                    // 优化场景特效
                    OptList <ParticleSystem> .List.Clear();

                    sceneRoot.transform.GetComponentsInChildren(true, OptList <ParticleSystem> .List);
                    foreach (var particle in OptList <ParticleSystem> .List)
                    {
                        if (!particle.CompareTag("NoPauseEffect"))
                        {
                            if (particle.gameObject.GetComponent <ParticleOptimizer>() == null)
                            {
                                particle.gameObject.AddComponent <ParticleOptimizer>();
                            }
                        }
                    }

                    Scene = sceneRoot.GetComponent <Scene>();
                    if (null != Scene)
                    {
                        Scene.InitPortal();
                    }
                    else
                    {
                        Logger.Error("cant find Scene in ScenePerfab!!!");
                    }
                }



                SoundManager.Instance.SetAreaSoundMute(SoundManager.Instance.EnableBGM);
//                 var sceneCacheKey = string.Format("{0}.unity3d", ScenePrefab);
//                 ResourceManager.Instance.RemoveFromCache(sceneCacheKey);
            }
            catch (Exception e)
            {
                Logger.Error("step 0------------------{0}\n{1}", e.Message, e.StackTrace);
            }
        }


        if (ObjManager.Instance == null)
        {
            Logger.Log2Bugly("EnterGameCoroutine ObjManager.Instance = null ");
            yield break;
        }

        //清除ObjManager
        ObjManager.Instance.Reset();


        if (PlayerDataManager.Instance == null || PlayerDataManager.Instance.mInitBaseAttr == null)
        {
            Logger.Log2Bugly("EnterGameCoroutine PlayerDataManager.Instance = null ");
            yield break;
        }
        var data = PlayerDataManager.Instance.mInitBaseAttr;

        var attr = new InitMyPlayerData();

        //初始化造主角的数据
        try
        {
            attr.ObjId      = data.CharacterId;
            attr.DataId     = data.RoleId;
            attr.Name       = data.Name;
            attr.Camp       = data.Camp;
            attr.IsDead     = data.IsDead == 1;
            attr.HpMax      = data.HpMax;
            attr.HpNow      = data.HpNow;
            attr.MpMax      = data.MpMax;
            attr.MpNow      = data.MpMow;
            attr.X          = data.X;
            attr.Y          = GetTerrainHeight(data.X, data.Y);
            attr.Z          = data.Y;
            attr.MoveSpeed  = data.MoveSpeed;
            attr.AreaState  = (eAreaState)data.AreaState;
            attr.EquipModel = data.EquipsModel;
            attr.ModelId    = data.ModelId;
            {
                var __list1      = data.Buff;
                var __listCount1 = __list1.Count;
                for (var __i1 = 0; __i1 < __listCount1; ++__i1)
                {
                    var buff = __list1[__i1];
                    {
                        attr.Buff.Add(buff.BuffId, buff.BuffTypeId);
                    }
                }
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 1------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //造主角
        ObjMyPlayer player = null;

        try
        {
            player = ObjManager.Instance.CreateMainPlayer(attr);
            if (player == null)
            {
                Logger.Log2Bugly("EnterGameCoroutine player = null ");
                yield break;
            }
            player.AdjustHeightPosition();
        }
        catch (Exception e)
        {
            Logger.Error("step 2------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //设置buff
        try
        {
            EventDispatcher.Instance.DispatchEvent(new UIEvent_ClearBuffList());

            var count = data.Buff.Count;
            for (var i = 0; i < count; i++)
            {
                var buffResult = data.Buff[i];
                EventDispatcher.Instance.DispatchEvent(new UIEvent_SyncBuffCell(buffResult));
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 3------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //预加载技能资源
        try
        {
            ObjManager.Instance.PrepareMainPlayerSkillResources();
        }
        catch (Exception e)
        {
            Logger.Error("step 4------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //给主摄像机设置跟随,设置声音
        try
        {
            if (MainCamera == null)
            {
                Logger.Log2Bugly("EnterGameCoroutine MainCamera = null ");
                yield break;
            }
            MainCamera.GetComponent <CameraController>().FollowObj = player.gameObject;
            {
//audio listener
                var audioListerner = MainCamera.gameObject.GetComponent <AudioListener>();
                if (null != audioListerner)
                {
                    DestroyObject(audioListerner);
                }
                var playerAudio = player.gameObject.GetComponent <AudioListener>();
                if (null == playerAudio)
                {
                    player.gameObject.AddComponent <AudioListener>();
                }
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 5------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //初始化UI
        Coroutine co = null;

        try
        {
            co = StartCoroutine(InitUI());
            if (null != LoadingLogic.Instance)
            {
                LoadingLogic.Instance.SetLoadingProgress(0.95f);
            }
            else
            {
                Logger.Error("LoadingLogic.Instance==null");
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 6------------------{0}\n{1}", e.Message, e.StackTrace);
        }
        if (null != co)
        {
            yield return(co);
        }


        //控制模块
        try
        {
            InputManager.Instance.OnMoveDestination = mControl.MoveTo;
            InputManager.Instance.SelectTarget      = mControl.SelectTarget;

            if (UIManager.Instance.MainUIFrame != null)
            {
                var main     = UIManager.Instance.MainUIFrame.GetComponent <MainScreenFrame>();
                var joystick = main.GetComponentInChildren <JoyStickLogic>();
                if (joystick != null)
                {
                    joystick.OnMoveDirection = mControl.MoveDirection;
                }
                SkillBar = main.SkillBar.GetComponent <BattleSkillRootFrame>();
                if (SkillBar != null)
                {
                    SkillBar.OnClickEvent = mControl.OnClickEvent;
                }
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 7------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //UI
        try
        {
            EventDispatcher.Instance.DispatchEvent(new Enter_Scene_Event(Scene.SceneTypeId));
            EventDispatcher.Instance.DispatchEvent(new RefresSceneMap(Scene.SceneTypeId));
            UIManager.Instance.OpenDefaultFrame();

            player.CreateNameBoard();

            if (PlayerDataManager.Instance != null)
            {
//根据场景不一样,自动战斗的优先级也不一样
                PlayerDataManager.Instance.RefrehEquipPriority();
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 8------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        //向服务器请求场景参数
        yield return(StartCoroutine(AskSceneExtData()));

        //向服务器发送切换场景结束的包
        if (SceneManager.Instance != null)
        {
            yield return(StartCoroutine(SceneManager.Instance.ChangeSceneOverCoroutine()));
        }
        else
        {
            Logger.Log2Bugly("EnterGameCoroutine SceneManager.Instance = null ");
        }

        //客户端切换场景结束事件
        try
        {
            SceneEffect.OnEnterScecne();
            LoadingLogic.Instance.SetLoadingProgress(1.0f);
            SceneManager.Instance.OnLoadSceneOver();
            EventDispatcher.Instance.DispatchEvent(new LoadSceneOverEvent());
        }
        catch (Exception e)
        {
            Logger.Error("step 9------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        yield return(new WaitForSeconds(0.1f));

        //播放CG
        try
        {
            Action brightnessStartWork = () =>
            {
                LoginWindow.State = LoginWindow.LoginState.InGaming;
                var bc = Game.Instance.GetComponent <BrightnessController>();
                if (bc)
                {
                    bc.ResetTimer();
                }
            };

            if (1 == PlayFirstEnterGameCG)
            {
#if UNITY_EDITOR
                var skip = true;
#else
                bool skip = true;
#endif
                if (0 == PlayerDataManager.Instance.GetRoleId() ||
                    1 == PlayerDataManager.Instance.GetRoleId() ||
                    2 == PlayerDataManager.Instance.GetRoleId())
                {
                    if (int.Parse(Table.GetClientConfig(1205).Value) == 1)
                    {
                        PlayCG.Instance.PlayCGFile("Video/HeroBorn.txt", brightnessStartWork, skip);
                        PlatformHelper.UMEvent("PlayCG", "play", "Video/HeroBorn.txt");
                    }
                }

                EventDispatcher.Instance.DispatchEvent(new FirstEnterGameEvent(true));

                PlayFirstEnterGameCG = 0;
            }
            else
            {
                brightnessStartWork();
            }
        }
        catch (Exception e)
        {
            Logger.Error("step 10------------------{0}\n{1}", e.Message, e.StackTrace);
        }

        mControl.OnLoadSceneOver();

        LoadOver = true;

        //优化loading读条速度,所以meshtree放在读条之后再加载
        if (null != Scene)
        {
            StartCoroutine(DelayLoadTerrainMeshTree(ScenePrefab));
        }

        if (!HasAdjustSetting)
        {
            HasAdjustSetting = true;
            StartCoroutine(ChangeSetting());
        }

        LuaEventManager.Instance.PushEvent("OnEnterGameOver", Scene.SceneTypeId);
    }