|
- using System.Reflection;
- using Gamecraft.Blocks.BlockGroups;
- using Gamecraft.GUI.Blueprints;
- using GamecraftModdingAPI.Engines;
- using HarmonyLib;
- using RobocraftX.Blocks;
- using Svelto.DataStructures;
- using Svelto.ECS;
- using Svelto.ECS.DataStructures;
- using Unity.Collections;
-
- namespace GamecraftModdingAPI.Blocks
- {
- public class BlueprintEngine : IApiEngine
- {
- private readonly MethodInfo getBlocksFromGroup =
- AccessTools.Method("RobocraftX.CR.MachineEditing.PlaceBlockUtility:GetBlocksSharingBlockgroup");
- private readonly NativeDynamicArray selectedBlocksInGroup = new NativeDynamicArray();
- private readonly NativeHashSet<ulong> removedConnections = new NativeHashSet<ulong>();
-
- private static NativeEntityRemove nativeRemove;
- private static MachineGraphConnectionEntityFactory connectionFactory;
-
- public void Ready()
- {
- }
-
- public EntitiesDB entitiesDB { get; set; }
- public void Dispose()
- {
- }
-
- public Block[] GetBlocksFromGroup(EGID blockID)
- {
- var list = new FasterList<Block>();
- object blockPos = null, blockRot = null;
- getBlocksFromGroup.Invoke(null, new[] {blockID, selectedBlocksInGroup, entitiesDB, blockPos, blockRot});
- for (uint i = 0; i < selectedBlocksInGroup.Count<EGID>(); i++)
- list.Add(new Block(selectedBlocksInGroup.Get<EGID>(i)));
- selectedBlocksInGroup.FastClear();
- return list.ToArray();
- }
-
- public void RemoveBlockGroup(int id)
- {
- BlockGroupUtility.RemoveAllBlocksInBlockGroup(id, entitiesDB, removedConnections, nativeRemove,
- connectionFactory, default).Complete();
- }
-
- public void SelectBlueprint(uint resourceID)
- {
- BlueprintUtil.SelectBlueprint(null, new BlueprintInventoryItemEntityStruct
- {
- blueprintResourceId = resourceID,
- });
- }
-
- public string Name { get; } = "GamecraftModdingAPIBlueprintGameEngine";
- public bool isRemovable { get; }
-
- [HarmonyPatch]
- private static class RemoveEnginePatch
- {
- public static void Prefix(IEntityFunctions entityFunctions,
- MachineGraphConnectionEntityFactory machineGraphConnectionEntityFactory)
- {
- nativeRemove = entityFunctions.ToNativeRemove<BlockEntityDescriptor>("GCAPI" + nameof(BlueprintEngine));
- connectionFactory = machineGraphConnectionEntityFactory;
- }
-
- public static MethodBase TargetMethod()
- {
- return AccessTools.Constructor(AccessTools.TypeByName("RobocraftX.CR.MachineEditing.RemoveBlockEngine"));
- }
- }
- }
- }
|