Пример #1
0
        public static void NoticeUnitAdd(Unit unit, Unit sendUnit)
        {
            M2C_CreateUnits createUnits = new M2C_CreateUnits();

            createUnits.Units.Add(UnitHelper.CreateUnitInfo(sendUnit));
            MessageHelper.SendToClient(unit, createUnits);
        }
Пример #2
0
        protected override async ETTask Run(Session session, G2M_CreateUnit request, M2G_CreateUnit response, Action reply)
        {
            Unit unit = ComponentFactory.CreateWithId <Unit>(IdGenerater.GenerateId());

            unit.Position = new Vector3(-10, 0, -10);

            unit.AddComponent <MoveComponent>();
            unit.AddComponent <UnitPathComponent>();

            await unit.AddComponent <MailBoxComponent>().AddLocation();

            unit.AddComponent <UnitGateComponent, long>(request.GateSessionId);
            Game.Scene.GetComponent <UnitComponent>().Add(unit);
            response.UnitId = unit.Id;


            // 广播创建的unit
            M2C_CreateUnits createUnits = new M2C_CreateUnits();

            Unit[] units = Game.Scene.GetComponent <UnitComponent>().GetAll();
            foreach (Unit u in units)
            {
                UnitInfo unitInfo = new UnitInfo();
                unitInfo.X      = u.Position.x;
                unitInfo.Y      = u.Position.y;
                unitInfo.Z      = u.Position.z;
                unitInfo.UnitId = u.Id;
                createUnits.Units.Add(unitInfo);
            }
            MessageHelper.Broadcast(createUnits);

            reply();
        }
Пример #3
0
        protected async ETVoid RunAsync(Session session, G2M_CreateUnit message, Action <M2G_CreateUnit> reply)
        {
            M2G_CreateUnit response = new M2G_CreateUnit();

            try
            {
                Unit unit = ComponentFactory.CreateWithId <Unit>(IdGenerater.GenerateId());
                unit.AddComponent <MoveComponent>();
                unit.AddComponent <UnitPathComponent>();
                unit.Position = new Vector3(-10, 0, -10);

                //unit的id是key,instanceId是Value,两个值都是Create Unit时随机创建的
                await unit.AddComponent <MailBoxComponent>().AddLocation();

                unit.AddComponent <UnitGateComponent, long>(message.GateSessionId);
                Game.Scene.GetComponent <UnitComponent>().Add(unit);
                response.UnitId = unit.Id;


                // 广播创建的unit
                M2C_CreateUnits createUnits = new M2C_CreateUnits();
                Unit[]          units       = Game.Scene.GetComponent <UnitComponent>().GetAll();
                foreach (Unit u in units)
                {
                    UnitInfo unitInfo = new UnitInfo();
                    unitInfo.X      = u.Position.x;
                    unitInfo.Y      = u.Position.y;
                    unitInfo.Z      = u.Position.z;
                    unitInfo.UnitId = u.Id;
                    createUnits.Units.Add(unitInfo);
                }

                MessageHelper.Broadcast(createUnits);


                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Пример #4
0
        protected override async ETTask Run(Session session, G2M_CreateUnit request, M2G_CreateUnit response, Action reply)
        {
            //并且生成ID 创建Unit实体对象
            Unit unit = ComponentFactory.CreateWithId <Unit>(IdGenerater.GenerateId());

            unit.AddComponent <MoveComponent>();
            unit.AddComponent <UnitPathComponent>();
            //设置实体位置
            unit.Position = new Vector3(-10, 0, -10);

            //添加邮箱
            await unit.AddComponent <MailBoxComponent>().AddLocation();

            //添加单位网关组件 主要是缓存该单位在网关服务器的Session Id
            //GateSessionActorId = request.GateSessionId
            unit.AddComponent <UnitGateComponent, long>(request.GateSessionId);
            //缓存这个单位
            Game.Scene.GetComponent <UnitComponent>().Add(unit);
            //设置响应的字段 UnitId
            response.UnitId = unit.Id;


            // 广播协议:创建unit
            M2C_CreateUnits createUnits = new M2C_CreateUnits();

            //获取所有的玩家 然后进行广播
            Unit[] units = Game.Scene.GetComponent <UnitComponent>().GetAll();
            foreach (Unit u in units)
            {
                UnitInfo unitInfo = new UnitInfo();
                unitInfo.X      = u.Position.x;
                unitInfo.Y      = u.Position.y;
                unitInfo.Z      = u.Position.z;
                unitInfo.UnitId = u.Id;
                createUnits.Units.Add(unitInfo);
            }
            MessageHelper.Broadcast(createUnits);

            //响应网关的请求
            reply();
        }
Пример #5
0
        protected override async ETTask Run(Session session, G2M_CreateUnit request, M2G_CreateUnit response, Action reply)
        {
            Unit targetUnit = UnitFactory.CreateDarius();

            //给小骷髅添加信箱组件,队列处理收到的消息,让这个unit正式注册为actor系统一员
            await targetUnit.AddComponent <MailBoxComponent>().AddLocation();

            //添加同gate服务器通信基础组件,记录GateSeesion的Id为ActorId
            targetUnit.AddComponent <UnitGateComponent, long>(request.GateSessionId);

            // 广播创建的unit
            M2C_CreateUnits createUnits = new M2C_CreateUnits();

            Unit[] units = UnitComponent.Instance.GetAll();
            foreach (Unit u in units)
            {
                UnitInfo unitInfo = new UnitInfo();
                if (u.GetComponent <B2S_RoleCastComponent>() != null)
                {
                    //TODO 诺手UnitTypeId暂定10001
                    unitInfo.UnitTypeId = 10001;
                    unitInfo.RoleCamp   = (int)u.GetComponent <B2S_RoleCastComponent>().RoleCamp;
                }

                unitInfo.X      = u.Position.x;
                unitInfo.Y      = u.Position.y;
                unitInfo.Z      = u.Position.z;
                unitInfo.UnitId = u.Id;
                createUnits.Units.Add(unitInfo);
            }

            //向所有unit广播信息
            MessageHelper.Broadcast(createUnits);

            //设置回复消息的Id
            response.UnitId = targetUnit.Id;
            //广播完回复客户端,这边搞好了
            reply();
        }
Пример #6
0
 public virtual async ETTask M2C_CreateUnitsHandler(Scene scene, M2C_CreateUnits message)
 {
 }
        protected async ETVoid RunAsync(Session session, G2M_CreateUnit message, Action <M2G_CreateUnit> reply)
        {
            M2G_CreateUnit response = new M2G_CreateUnit();

            try
            {
                UnitData playerData = new UnitData();
                if (unitIndex % 2 == 0)
                {
                    playerData.groupIndex = GroupIndex.Player;
                    playerData.layerMask  = UnitLayerMask.ALL;
                    playerData.unitLayer  = UnitLayer.Character;
                    playerData.unitTag    = UnitTag.Player;
                }
                else
                {
                    playerData.groupIndex = GroupIndex.Monster;
                    playerData.layerMask  = UnitLayerMask.ALL;
                    playerData.unitLayer  = UnitLayer.Character;
                    playerData.unitTag    = UnitTag.Monster;
                }
                unitIndex++;
                Unit unit = UnitFactory.Create(IdGenerater.GenerateId(), 1001, playerData);
                await unit.AddComponent <MailBoxComponent>().AddLocation();

                unit.AddComponent <UnitGateComponent, long>(message.GateSessionId);


                unit.Position = new Vector3(-10, 0, -10);


                UnitStateComponent stateCom = unit.GetComponent <UnitStateComponent>();

                Game.Scene.GetComponent <UnitStateMgrComponent>().Add(stateCom);

                response.UnitId = unit.Id;



                // 广播创建的unit
                M2C_CreateUnits createUnits = new M2C_CreateUnits();
                Unit[]          units       = Game.Scene.GetComponent <UnitComponent>().GetAll();
                foreach (Unit u in units)
                {
                    UnitInfo           unitInfo           = new UnitInfo();
                    UnitStateComponent unitStateComponent = u.GetComponent <UnitStateComponent>();
                    unitInfo.Position   = u.Position.ToV3Info();
                    unitInfo.Dir        = Vector3.forward.ToV3Info();
                    unitInfo.UnitId     = u.Id;
                    unitInfo.GroupIndex = (int)u.UnitData.groupIndex;
                    unitInfo.LayerMask  = (int)u.UnitData.layerMask;
                    unitInfo.UnitLayer  = (int)u.UnitData.unitLayer;
                    unitInfo.UnitTag    = (int)u.UnitData.unitTag;

                    foreach (var v in u.GetComponent <NumericComponent>().NumericDic)
                    {
                        unitInfo.UnitNumerics.Add(new UnitNumeric()
                        {
                            Type  = v.Key,
                            Value = v.Value
                        });
                    }

                    createUnits.Units.Add(unitInfo);
                }
                MessageHelper.Broadcast(createUnits);


                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }