public static void NoticeUnitAdd(Unit unit, Unit sendUnit) { M2C_CreateUnits createUnits = new M2C_CreateUnits(); createUnits.Units.Add(UnitHelper.CreateUnitInfo(sendUnit)); MessageHelper.SendToClient(unit, createUnits); }
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(); }
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); } }
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(); }
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(); }
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); } }