Attempt to use custom cube category

This commit is contained in:
Norbi Peti 2020-12-19 21:43:49 +01:00
parent 9c5c980c0b
commit 6a90739197
3 changed files with 39 additions and 21 deletions

View file

@ -2,27 +2,19 @@
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using DataLoader;
using GamecraftModdingAPI.App;
using GamecraftModdingAPI.Utility;
using GPUInstancer;
using HarmonyLib;
using DataLoader;
using RobocraftX.Blocks;
using RobocraftX.Common;
using RobocraftX.Rendering;
using Svelto.DataStructures;
using Svelto.ECS;
using Svelto.Tasks;
using Unity.Entities.Conversion;
using Unity.Physics;
using UnityEngine;
using UnityEngine.AddressableAssets;
using BoxCollider = UnityEngine.BoxCollider;
using Material = UnityEngine.Material;
using Object = UnityEngine.Object;
using ScalingPermission = DataLoader.ScalingPermission;
using GamecraftModdingAPI.Utility;
namespace GamecraftModdingAPI.Blocks
{
@ -62,18 +54,18 @@ namespace GamecraftModdingAPI.Blocks
public CustomBlock(EGID id) : base(id)
{
if (id.groupID != Group)
throw new BlockTypeException("The block is not a custom block! It has a group of " + id.groupID);
/*if (id.groupID != Group)
throw new BlockTypeException("The block is not a custom block! It has a group of " + id.groupID);*/
}
public CustomBlock(uint id) : this(new EGID(id, Group))
public CustomBlock(uint id) : base(id)
{
}
public static ExclusiveGroup Group { get; } = new ExclusiveGroup("Custom block");
//public static ExclusiveGroup Group { get; } = new ExclusiveGroup("Custom block");
[HarmonyPatch]
public static class Patch
public static class MaterialCopyPatch
{
private static Material[] materials;
@ -110,6 +102,7 @@ namespace GamecraftModdingAPI.Blocks
var cld = new CubeListData
{ //"Assets/Prefabs/Cube.prefab" - "CTR_CommandBlock" - "strConsoleBlock"
cubeType = attr.Type,
//cubeCategory = (CubeCategory) 1000,
cubeCategory = attr.Category,
inventoryCategory = attr.InventoryCategory,
ID = nextID++,
@ -141,8 +134,24 @@ namespace GamecraftModdingAPI.Blocks
}
}
public static IEnumerator Prep()
{ //TODO: Don't let the game load until this finishes
/*[HarmonyPatch] - The block has no collision even in simulation if using a custom category
private static class FactorySetupPatch
{
public static void Prefix(BlockEntityFactory __instance)
{
var builders = (Dictionary<CubeCategory, IBlockBuilder>)
AccessTools.Field(__instance.GetType(), "_blockBuilders").GetValue(__instance);
builders.Add((CubeCategory) 1000, new BlockBuilder<StandardBlockEntityDescriptor>(Group));
}
public static MethodBase TargetMethod()
{
return AccessTools.Method(typeof(BlockEntityFactory), "ParseDataDB");
}
}*/
internal static IEnumerator Prepare()
{ //Should be pretty quick
foreach (var type in _customBlocks.Values)
{
var attr = type.GetCustomAttribute<CustomBlockAttribute>();
@ -153,5 +162,12 @@ namespace GamecraftModdingAPI.Blocks
Addressables.AddResourceLocator(res.Result);
}
}
/*internal static void OnBlockFactoryObtained(BlockEntityFactory factory)
{
var builders = (Dictionary<CubeCategory, IBlockBuilder>)
AccessTools.Field(factory.GetType(), "_blockBuilders").GetValue(factory);
builders.Add((CubeCategory) 1000, new BlockBuilder<StandardBlockEntityDescriptor>(Group));
}*/
}
}

View file

@ -1,12 +1,14 @@
using System;
using System.Reflection;
using GamecraftModdingAPI.Blocks;
using HarmonyLib;
using RobocraftX;
using RobocraftX.Schedulers;
using RobocraftX.Services;
using Svelto.Context;
using Svelto.Tasks.ExtraLean;
using GamecraftModdingAPI.Blocks;
using GamecraftModdingAPI.Utility;
using GamecraftModdingAPI.Events;
using GamecraftModdingAPI.Tasks;
@ -89,6 +91,7 @@ namespace GamecraftModdingAPI
AsyncUtils.Init();
GamecraftModdingAPI.App.Client.Init();
GamecraftModdingAPI.App.Game.Init();
CustomBlock.Prepare().RunOn(ExtraLean.UIScheduler);
Logging.MetaLog($"{currentAssembly.GetName().Name} v{currentAssembly.GetName().Version} initialized");
}

View file

@ -369,7 +369,6 @@ namespace GamecraftModdingAPI.Tests
Log.Output("Submitted: " + Window.selected.submittedCode);
})
.Build();
CustomBlock.Prep().RunOn(ExtraLean.UIScheduler);
try
{
CustomBlock.RegisterCustomBlock<TestBlock>();