EntityExtension.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 Jiang Yin. All rights reserved.
  4. // Homepage: https://gameframework.cn/
  5. // Feedback: mailto:ellan@gameframework.cn
  6. //------------------------------------------------------------
  7. using GameFramework.DataTable;
  8. using System;
  9. using UnityGameFramework.Runtime;
  10. namespace MetaClient
  11. {
  12. public static class EntityExtension
  13. {
  14. // 关于 EntityId 的约定:
  15. // 0 为无效
  16. // 正值用于和服务器通信的实体(如玩家角色、NPC、怪等,服务器只产生正值)
  17. // 负值用于本地生成的临时实体(如特效、FakeObject等)
  18. private static int s_SerialId = 0;
  19. public static Entity GetGameEntity(this EntityComponent entityComponent, int entityId)
  20. {
  21. UnityGameFramework.Runtime.Entity entity = entityComponent.GetEntity(entityId);
  22. if (entity == null)
  23. {
  24. return null;
  25. }
  26. return (Entity)entity.Logic;
  27. }
  28. public static void HideEntity(this EntityComponent entityComponent, Entity entity)
  29. {
  30. entityComponent.HideEntity(entity.Entity);
  31. }
  32. public static void AttachEntity(this EntityComponent entityComponent, Entity entity, int ownerId, string parentTransformPath = null, object userData = null)
  33. {
  34. entityComponent.AttachEntity(entity.Entity, ownerId, parentTransformPath, userData);
  35. }
  36. public static void ShowMyAircraft(this EntityComponent entityComponent, MyAircraftData data)
  37. {
  38. entityComponent.ShowEntity(typeof(MyAircraft), "Aircraft", Constant.AssetPriority.MyAircraftAsset, data);
  39. }
  40. public static void ShowAircraft(this EntityComponent entityComponent, AircraftData data)
  41. {
  42. entityComponent.ShowEntity(typeof(Aircraft), "Aircraft", Constant.AssetPriority.AircraftAsset, data);
  43. }
  44. public static void ShowThruster(this EntityComponent entityComponent, ThrusterData data)
  45. {
  46. entityComponent.ShowEntity(typeof(Thruster), "Thruster", Constant.AssetPriority.ThrusterAsset, data);
  47. }
  48. public static void ShowWeapon(this EntityComponent entityComponent, WeaponData data)
  49. {
  50. entityComponent.ShowEntity(typeof(Weapon), "Weapon", Constant.AssetPriority.WeaponAsset, data);
  51. }
  52. public static void ShowArmor(this EntityComponent entityComponent, ArmorData data)
  53. {
  54. entityComponent.ShowEntity(typeof(Armor), "Armor", Constant.AssetPriority.ArmorAsset, data);
  55. }
  56. public static void ShowBullet(this EntityComponent entityCompoennt, BulletData data)
  57. {
  58. entityCompoennt.ShowEntity(typeof(Bullet), "Bullet", Constant.AssetPriority.BulletAsset, data);
  59. }
  60. public static void ShowAsteroid(this EntityComponent entityCompoennt, AsteroidData data)
  61. {
  62. entityCompoennt.ShowEntity(typeof(Asteroid), "Asteroid", Constant.AssetPriority.AsteroiAsset, data);
  63. }
  64. public static void ShowEffect(this EntityComponent entityComponent, EffectData data)
  65. {
  66. entityComponent.ShowEntity(typeof(Effect), "Effect", Constant.AssetPriority.EffectAsset, data);
  67. }
  68. private static void ShowEntity(this EntityComponent entityComponent, Type logicType, string entityGroup, int priority, EntityData data)
  69. {
  70. if (data == null)
  71. {
  72. Log.Warning("Data is invalid.");
  73. return;
  74. }
  75. IDataTable<DREntity> dtEntity = GameEntry.DataTable.GetDataTable<DREntity>();
  76. DREntity drEntity = dtEntity.GetDataRow(data.TypeId);
  77. if (drEntity == null)
  78. {
  79. Log.Warning("Can not load entity id '{0}' from data table.", data.TypeId.ToString());
  80. return;
  81. }
  82. entityComponent.ShowEntity(data.Id, logicType, AssetUtility.GetEntityAsset(drEntity.AssetName), entityGroup, priority, data);
  83. }
  84. public static int GenerateSerialId(this EntityComponent entityComponent)
  85. {
  86. return --s_SerialId;
  87. }
  88. }
  89. }