using System.Reflection; using HarmonyLib; using RobocraftX.Blocks; using RobocraftX.Common; using Svelto.ECS; using TechbloxModdingAPI.Engines; using TechbloxModdingAPI.Utility; namespace TechbloxModdingAPI.Blocks.Engines { public class RemovalEngine : IApiEngine { private static IEntityFunctions _entityFunctions; private static MachineGraphConnectionEntityFactory _connectionFactory; public bool RemoveBlock(EGID target) { if (!entitiesDB.Exists(target)) return false; var connections = entitiesDB.QueryEntity(target); var groups = entitiesDB.FindGroups(); var connStructMapper = entitiesDB.QueryNativeMappedEntities(groups); for (int i = connections.connections.Count() - 1; i >= 0; i--) _connectionFactory.RemoveConnection(connections, i, connStructMapper); _entityFunctions.RemoveEntity(target); return true; } public void Ready() { } public EntitiesDB entitiesDB { get; set; } public void Dispose() { } public string Name { get; } = "TechbloxModdingAPIRemovalGameEngine"; public bool isRemovable => false; [HarmonyPatch] class FactoryObtainerPatch { static void Postfix(IEntityFunctions entityFunctions, MachineGraphConnectionEntityFactory machineGraphConnectionEntityFactory) { _entityFunctions = entityFunctions; _connectionFactory = machineGraphConnectionEntityFactory; Logging.MetaDebugLog("Requirements injected."); } static MethodBase TargetMethod(Harmony instance) { return AccessTools.TypeByName("RobocraftX.CR.MachineEditing.RemoveBlockEngine").GetConstructors()[0]; } } } }