Пример #1
0
        public static async ETVoid EnterMapAsync(string sceneName)
        {
            try
            {
                // 加载Unit资源
                ResourcesComponent resourcesComponent = DCET.Model.Game.Scene.GetComponent <ResourcesComponent>();
                await resourcesComponent.LoadBundleAsync($"unit.unity3d");

                // 加载场景资源
                await DCET.Model.Game.Scene.GetComponent <ResourcesComponent>().LoadBundleAsync("map.unity3d");

                // 切换到map场景
                using (SceneChangeComponent sceneChangeComponent = DCET.Model.Game.Scene.AddComponent <SceneChangeComponent>())
                {
                    await sceneChangeComponent.ChangeSceneAsync(sceneName);
                }

                G2C_EnterMap g2CEnterMap = await DCET.Model.SessionComponent.Instance.Session.Call(new C2G_EnterMap()) as G2C_EnterMap;

                PlayerComponent.Instance.MyPlayer.UnitId = g2CEnterMap.UnitId;

                Game.Scene.AddComponent <OperaComponent>();

                Game.EventSystem.Run(EventIdType.EnterMapFinish);
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
Пример #2
0
        protected override async ETTask Run(EventType.SceneChangeStart args)
        {
            Scene currentScene = args.ZoneScene.CurrentScene();

            // 加载场景资源
            await ResourcesComponent.Instance.LoadBundleAsync($"{currentScene.Name}.unity3d");

            // 切换到map场景

            SceneChangeComponent sceneChangeComponent = null;

            try
            {
                sceneChangeComponent = Game.Scene.AddComponent <SceneChangeComponent>();
                {
                    await sceneChangeComponent.ChangeSceneAsync(currentScene.Name);
                }
            }
            finally
            {
                sceneChangeComponent?.Dispose();
            }


            currentScene.AddComponent <OperaComponent>();
        }
Пример #3
0
        protected override async ETTask Run(EventType.SceneChangeStart args)
        {
            await ETTask.CompletedTask;

            Scene zoneScene = args.ZoneScene;

            // 加载场景资源
            await ResourcesComponent.Instance.LoadBundleAsync("map.unity3d");

            // 切换到map场景

            SceneChangeComponent sceneChangeComponent = null;

            try
            {
                sceneChangeComponent = Game.Scene.AddComponent <SceneChangeComponent>();
                {
                    await sceneChangeComponent.ChangeSceneAsync("Map");
                }
            }
            finally
            {
                sceneChangeComponent?.Dispose();
            }


            args.ZoneScene.AddComponent <OperaComponent>();
        }
Пример #4
0
        protected override async ETTask Run(EventType.EnterMapFinish args)
        {
            // 加载场景资源
            await ResourcesComponent.Instance.LoadBundleAsync("map.unity3d");

            // 切换到map场景

            SceneChangeComponent sceneChangeComponent = null;

            try
            {
                sceneChangeComponent = Game.Scene.AddComponent <SceneChangeComponent>();
                {
                    await sceneChangeComponent.ChangeSceneAsync("Map");
                }
            }
            finally
            {
                sceneChangeComponent?.Dispose();
            }


            args.ZoneScene.AddComponent <OperaComponent>();
            await UIHelper.Remove(args.ZoneScene, UIType.UILobby);
        }
Пример #5
0
        /// <summary>
        /// 进入地图
        /// </summary>
        /// <returns></returns>
        public static async ETVoid EnterMapAsync(int MapSizeX, int MapSizeY)
        {
            try
            {
                // 加载Unit资源
                ResourcesComponent resourcesComponent = ETModel.Game.Scene.GetComponent <ResourcesComponent>();
                await resourcesComponent.LoadBundleAsync($"unit.unity3d");

                // 加载场景资源
                await ETModel.Game.Scene.GetComponent <ResourcesComponent>().LoadBundleAsync("etdemomap.unity3d");

                // 切换到map场景
                using (SceneChangeComponent sceneChangeComponent = ETModel.Game.Scene.AddComponent <SceneChangeComponent>())
                {
                    await sceneChangeComponent.ChangeSceneAsync("ETDemoMap");
                }

                Game.Scene.AddComponent <MapGridOperaComponent>();
                Game.EventSystem.Run(ETDemoEventIdType.EnterMapFinish, MapSizeX, MapSizeY);
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
Пример #6
0
        public void Async()
        {
            SceneChangeComponent sceneChange = Game.Scene.GetComponent <SceneChangeComponent>();

            if (sceneChange == null)
            {
                return;
            }
            process.text = $"{sceneChange.Process}%";
        }
Пример #7
0
        protected override async ETTask Run(AppEventType.EnterSceneStart args)
        {
            // 加载场景AssetBundle
            await ResourcesComponent.Instance.LoadBundleAsync("map.unity3d");

            // 切换到map场景
            SceneChangeComponent sceneChangeComponent = args.ZoneScene.GetComponent <SceneChangeComponent>();
            await sceneChangeComponent.ChangeSceneAsync(args.SceneName);

            ResourcesComponent.Instance.UnloadBundle("map.unity3d");
        }
Пример #8
0
        public override async ETTask Run(EventType.EnterMapFinish args)
        {
            // 加载场景资源
            await Game.Scene.GetComponent <ResourcesComponent>().LoadBundleAsync("map.unity3d");

            // 切换到map场景
            using (SceneChangeComponent sceneChangeComponent = Game.Scene.AddComponent <SceneChangeComponent>())
            {
                await sceneChangeComponent.ChangeSceneAsync("Map");
            }
            Game.Scene.Get(1).AddComponent <OperaComponent>();
            await UIHelper.Remove(args.ZoneScene, UIType.UILobby);
        }
Пример #9
0
        protected override async ETTask Run(EventType.EnterMapFinish args)
        {
            // 加载场景资源
            await ResourcesComponent.Instance.LoadBundleAsync("map.unity3d");

            // 切换到map场景
            using (SceneChangeComponent sceneChangeComponent = Game.Scene.AddComponent <SceneChangeComponent>())
            {
                await sceneChangeComponent.ChangeSceneAsync("Map");
            }
            args.ZoneScene.AddComponent <OperaComponent>();
            args.ZoneScene.GetComponent <FGUIComponent>().Remove(FGUILobby.UIResName);
        }
Пример #10
0
        public static async ETVoid Login(LoginViewComponent self, string account, string password)
        {
            #region 客户端给服务器发送登陆信息
            // 创建一个ETModel层的Session
            ETModel.Session session = ETModel.Game.Scene.GetComponent <NetOuterComponent>().Create(GlobalConfigComponent.Instance.GlobalProto.Address);

            Log.Info("服务器地址 : " + GlobalConfigComponent.Instance.GlobalProto.Address);
            // 创建一个ETHotfix层的Session, ETHotfix的Session会通过ETModel层的Session发送消息
            Session   realmSession = ComponentFactory.Create <Session, ETModel.Session>(session);
            R2C_Login r2CLogin     = (R2C_Login)await realmSession.Call(new C2R_Login()
            {
                Account = account, Password = password
            });

            realmSession.Dispose();

            #endregion

            if (r2CLogin.Error != ErrorCode.ERR_Success)
            {
                SetErrorPrompt(self, Message.Get(r2CLogin.ErrorMessageId));
                return;
            }


            #region 客户端根据服务器下发的网关地址连接网关

            Log.Info("服务器下发的网关地址 : " + r2CLogin.Address);
            Log.Info("服务器下发的网关验证码 : " + r2CLogin.Key);

            // 创建一个ETModel层的Session,并且保存到ETModel.SessionComponent中
            ETModel.Session gateSession = ETModel.Game.Scene.GetComponent <NetOuterComponent>().Create(r2CLogin.Address);
            ETModel.Game.Scene.AddComponent <ETModel.SessionComponent>().Session = gateSession;

            // 创建一个ETHotfix层的Session, 并且保存到ETHotfix.SessionComponent中
            Game.Scene.AddComponent <SessionComponent>().Session = ComponentFactory.Create <Session, ETModel.Session>(gateSession);



            G2C_LoginGate g2CLoginGate = (G2C_LoginGate)await SessionComponent.Instance.Session.Call(new C2G_LoginGate()
            {
                Key = r2CLogin.Key
            });

            Log.Info("登陆gate成功!");

            #endregion

            // 创建Player
            Player player = ETModel.ComponentFactory.CreateWithId <Player>(g2CLoginGate.PlayerId);

            PlayerComponent playerComponent = ETModel.Game.Scene.GetComponent <PlayerComponent>();

            playerComponent.MyPlayer = player;

            // 测试消息有成员是class类型
            G2C_PlayerInfo g2CPlayerInfo = (G2C_PlayerInfo)await SessionComponent.Instance.Session.Call(new C2G_PlayerInfo());


            // 加载Unit资源
            ResourcesComponent resourcesComponent = ETModel.Game.Scene.GetComponent <ResourcesComponent>();

            // 加载场景资源
            await resourcesComponent.LoadBundleAsync("start.unity3d");

            // 切换到Battle场景
            using (SceneChangeComponent sceneChangeComponent = Game.Scene.AddComponent <SceneChangeComponent>())
            {
                await sceneChangeComponent.ChangeSceneAsync(SceneType.Start);
            }

            // 逻辑层不应该去调用UI,逻辑层只关心逻辑并且抛出事件,由UI层自己去订阅事件,而且注意事件名字
            // 很多人容易把这个事件取名成LoginFinishiCreateLobbyUI,这是不对的,事件抛出去不可能知道谁订阅了这个事件,
            // 也不会知道别人订阅这个事件是干什么的,这里只知道我Login Finish
            //Game.EventSystem.Run(EventIdType.LoginFinish);
            Game.EventSystem.Run(EventIdType.LoginHasFinish);
        }