using System; using ETModel; using PF; using UnityEngine; namespace ETHotfix { [MessageHandler(AppType.Map)] public class G2M_CreateUnitHandler : AMRpcHandler { protected override void Run(Session session, G2M_CreateUnit message, Action reply) { RunAsync(session, message, reply).Coroutine(); } protected async ETVoid RunAsync(Session session, G2M_CreateUnit message, Action reply) { M2G_CreateUnit response = new M2G_CreateUnit(); try { Unit unit = ComponentFactory.CreateWithId(IdGenerater.GenerateId()); unit.AddComponent(); unit.AddComponent(); unit.Position = new Vector3(-10, 0, -10); await unit.AddComponent().AddLocation(); unit.AddComponent(message.GateSessionId); Game.Scene.GetComponent().Add(unit); response.UnitId = unit.Id; // 广播创建的unit M2C_CreateUnits createUnits = new M2C_CreateUnits(); Unit[] units = Game.Scene.GetComponent().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); } } } }