A stable modding interface between Techblox and mods https://mod.exmods.org/
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

1234567891011121314151617181920212223
  1. using System;
  2. using System.Linq;
  3. using System.Linq.Expressions;
  4. using HarmonyLib;
  5. using Svelto.ECS;
  6. namespace TechbloxModdingAPI.Common.Utils
  7. {
  8. public static class EcsUtils
  9. {
  10. public static Type[] GetValidEntityComponents(Type entityDescriptorType)
  11. {
  12. // TODO: Cache
  13. var templateType = typeof(EntityDescriptorTemplate<>).MakeGenericType(entityDescriptorType);
  14. var templateDescriptor = AccessTools.Property(templateType, "descriptor");
  15. var getDescriptorExpr = Expression.MakeMemberAccess(null, templateDescriptor ?? throw new InvalidOperationException());
  16. var getTemplateDescriptorExpr = Expression.Lambda<Func<IEntityDescriptor>>(getDescriptorExpr);
  17. var getTemplateDescriptor = getTemplateDescriptorExpr.Compile();
  18. var builders = getTemplateDescriptor().componentsToBuild;
  19. return builders.Select(builder => builder.GetEntityComponentType()).ToArray();
  20. }
  21. }
  22. }