using System.Reflection; using HarmonyLib; using RobocraftX.Common; using RobocraftX.DOTS; using Svelto.ECS; using Unity.Entities; using TechbloxModdingAPI.Engines; using TechbloxModdingAPI.Utility; namespace TechbloxModdingAPI.Blocks.Engines { public class ScalingEngine : IApiEngine { private static IReactOnAddAndRemove physicsEngine; public void Ready() { } public EntitiesDB entitiesDB { get; set; } public void Dispose() { } public string Name { get; } = "TechbloxModdingAPIScalingEngine"; public bool isRemovable { get; } = false; private EntityManager _entityManager; //Unity entity manager public void UpdateCollision(EGID egid) { if (_entityManager == default) _entityManager = FullGameFields._physicsWorld.EntityManager; //Assuming the block exists var entity = entitiesDB.QueryEntity(egid).dotsEntity; var pes = new DOTSPhysicsEntityCreationStruct(); physicsEngine.Add(ref pes, egid); //Create new DOTS entity _entityManager.DestroyEntity(entity); } [HarmonyPatch] class PhysicsEnginePatch { static void Postfix(IReactOnAddAndRemove __instance) { physicsEngine = __instance; Logging.MetaDebugLog("Physics engine injected."); } static MethodBase TargetMethod(Harmony instance) { return AccessTools.Method("RobocraftX.StateSync.HandleDOTSPhysicEntitiesWithPrefabCreationEngine" + ":Ready"); } } } }