G2M_CreateUnitHandler.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using System;
  2. using UnityEngine;
  3. namespace ET
  4. {
  5. [ActorMessageHandler]
  6. public class G2M_CreateUnitHandler : AMActorRpcHandler<Scene, G2M_CreateUnit, M2G_CreateUnit>
  7. {
  8. protected override async ETTask Run(Scene scene, G2M_CreateUnit request, M2G_CreateUnit response, Action reply)
  9. {
  10. Unit unit = EntityFactory.CreateWithId<Unit>(scene, IdGenerater.Instance.GenerateId());
  11. unit.AddComponent<MoveComponent>();
  12. unit.AddComponent<UnitPathComponent>();
  13. unit.Position = new Vector3(-10, 0, -10);
  14. unit.AddComponent<MailBoxComponent>();
  15. await unit.AddLocation();
  16. unit.AddComponent<UnitGateComponent, long>(request.GateSessionId);
  17. scene.GetComponent<UnitComponent>().Add(unit);
  18. response.UnitId = unit.Id;
  19. // 广播创建的unit
  20. M2C_CreateUnits createUnits = new M2C_CreateUnits();
  21. Unit[] units = scene.GetComponent<UnitComponent>().GetAll();
  22. foreach (Unit u in units)
  23. {
  24. UnitInfo unitInfo = new UnitInfo();
  25. unitInfo.X = u.Position.x;
  26. unitInfo.Y = u.Position.y;
  27. unitInfo.Z = u.Position.z;
  28. unitInfo.UnitId = u.Id;
  29. createUnits.Units.Add(unitInfo);
  30. }
  31. MessageHelper.Broadcast(unit, createUnits);
  32. reply();
  33. }
  34. }
  35. }