BattleUnitFactory.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using CommonAI.ZoneClient;
  2. using ET;
  3. using ET.Client;
  4. using UnitType = CommonAI.Zone.UnitInfo.UnitType;
  5. class BattleUnitFactory : Singleton<BattleUnitFactory>//, ISingletonUpdate
  6. {
  7. public async ETTask InitAsync()
  8. {
  9. await ETTask.CompletedTask;
  10. }
  11. public BattleObject Create(ZoneObject zo)
  12. {
  13. BattleObject unit = null;
  14. if(zo is ZoneActor)
  15. {
  16. unit = ObjectPool.Instance.Fetch<BattleActor>();
  17. }
  18. else if (zo is ZoneUnit)
  19. {
  20. ZoneUnit zu = zo as ZoneUnit;
  21. switch (zu.Info.UType)
  22. {
  23. case UnitType.TYPE_PLAYER://玩家单位.
  24. unit = ObjectPool.Instance.Fetch<BattlePlayer>();
  25. break;
  26. case UnitType.TYPE_MONSTER://怪物.
  27. unit = ObjectPool.Instance.Fetch<BattleMonster>();
  28. break;
  29. case UnitType.TYPE_BUILDING://建筑.
  30. case UnitType.TYPE_NPC://NPC.
  31. case UnitType.TYPE_NEUTRALITY://NPC.
  32. case UnitType.TYPE_SUMMON://召唤单位.
  33. case UnitType.TYPE_PET:
  34. case UnitType.TYPE_TRIGGER: //触发机关
  35. default:
  36. Log.Error($"unknow object enter:{zu.Info.UType} ID:{zu.TemplateID}");
  37. break;
  38. }
  39. }
  40. else if (zo is ZoneSpell)
  41. {
  42. unit = ObjectPool.Instance.Fetch<BattleSpell>();
  43. }
  44. else if (zo is ZoneItem)//掉落物
  45. {
  46. }
  47. return unit;
  48. }
  49. }