|
- using System.Reflection;
-
- using Gamecraft.Blocks.BlockGroups;
- using HarmonyLib;
- using RobocraftX.Blocks;
- using RobocraftX.Common;
- using RobocraftX.GroupTags;
- using RobocraftX.StateSync;
- using Svelto.ECS;
- using Svelto.ECS.Native;
- using Techblox.Blocks.Connections;
- using Unity.Collections;
- using Unity.Jobs;
- using Allocator = Unity.Collections.Allocator;
-
- using TechbloxModdingAPI.Engines;
- using TechbloxModdingAPI.Utility;
-
- namespace TechbloxModdingAPI.Blocks.Engines
- {
- public class RemovalEngine : IApiEngine, IDeterministicTimeStopped
- {
- private static IEntityFunctions _entityFunctions;
- private static MachineGraphConnectionEntityFactory _connectionFactory;
- private NativeHashSet<ulong> removedConnections = new(2000, Allocator.Persistent);
-
- public bool RemoveBlock(EGID target)
- {
- if (!entitiesDB.Exists<MachineGraphConnectionsEntityStruct>(target))
- return false;
- using var connStructMapper =
- entitiesDB.QueryNativeMappedEntities<MachineGraphConnectionsEntityStruct>(GroupTag<BLOCK_TAG>.Groups,
- Svelto.Common.Allocator.Temp);
- if (entitiesDB.TryQueryNativeMappedEntities<MachineConnectionComponent>(
- ConnectionsExclusiveGroups.MACHINE_CONNECTION_GROUP, out var mapper))
- {
- BlockGroupUtility.RemoveBlockConnections(target, removedConnections, _connectionFactory,
- connStructMapper, mapper, entitiesDB.GetEntityReferenceMap(), _entityFunctions);
- }
-
- _entityFunctions.RemoveEntity<BlockEntityDescriptor>(target);
- return true;
- }
-
- public void Ready()
- {
- }
-
- public EntitiesDB entitiesDB { get; set; }
-
- public void Dispose()
- {
- removedConnections.Dispose();
- }
-
- public string Name => "TechbloxModdingAPIRemovalGameEngine";
- public string name => Name;
-
- 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];
- }
- }
-
- public JobHandle DeterministicStep(in float deltaTime, JobHandle inputDeps)
- {
- removedConnections.Clear();
- return default;
- }
- }
- }
|