A stable modding interface between Techblox and mods https://mod.exmods.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

23 lines
988B

  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. }