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;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Reflection; using System.Reflection;
using DataLoader;
using GamecraftModdingAPI.App;
using GamecraftModdingAPI.Utility;
using GPUInstancer;
using HarmonyLib; using HarmonyLib;
using DataLoader;
using RobocraftX.Blocks; using RobocraftX.Blocks;
using RobocraftX.Common;
using RobocraftX.Rendering; using RobocraftX.Rendering;
using Svelto.DataStructures;
using Svelto.ECS; using Svelto.ECS;
using Svelto.Tasks; using Svelto.Tasks;
using Unity.Entities.Conversion;
using Unity.Physics;
using UnityEngine; using UnityEngine;
using UnityEngine.AddressableAssets; using UnityEngine.AddressableAssets;
using BoxCollider = UnityEngine.BoxCollider;
using Material = UnityEngine.Material; using Material = UnityEngine.Material;
using Object = UnityEngine.Object;
using ScalingPermission = DataLoader.ScalingPermission; using GamecraftModdingAPI.Utility;
namespace GamecraftModdingAPI.Blocks namespace GamecraftModdingAPI.Blocks
{ {
@ -62,18 +54,18 @@ namespace GamecraftModdingAPI.Blocks
public CustomBlock(EGID id) : base(id) public CustomBlock(EGID id) : base(id)
{ {
if (id.groupID != Group) /*if (id.groupID != Group)
throw new BlockTypeException("The block is not a custom block! It has a group of " + id.groupID); 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] [HarmonyPatch]
public static class Patch public static class MaterialCopyPatch
{ {
private static Material[] materials; private static Material[] materials;
@ -110,6 +102,7 @@ namespace GamecraftModdingAPI.Blocks
var cld = new CubeListData var cld = new CubeListData
{ //"Assets/Prefabs/Cube.prefab" - "CTR_CommandBlock" - "strConsoleBlock" { //"Assets/Prefabs/Cube.prefab" - "CTR_CommandBlock" - "strConsoleBlock"
cubeType = attr.Type, cubeType = attr.Type,
//cubeCategory = (CubeCategory) 1000,
cubeCategory = attr.Category, cubeCategory = attr.Category,
inventoryCategory = attr.InventoryCategory, inventoryCategory = attr.InventoryCategory,
ID = nextID++, ID = nextID++,
@ -141,8 +134,24 @@ namespace GamecraftModdingAPI.Blocks
} }
} }
public static IEnumerator Prep() /*[HarmonyPatch] - The block has no collision even in simulation if using a custom category
{ //TODO: Don't let the game load until this finishes 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) foreach (var type in _customBlocks.Values)
{ {
var attr = type.GetCustomAttribute<CustomBlockAttribute>(); var attr = type.GetCustomAttribute<CustomBlockAttribute>();
@ -153,5 +162,12 @@ namespace GamecraftModdingAPI.Blocks
Addressables.AddResourceLocator(res.Result); 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;
using System.Reflection; using System.Reflection;
using GamecraftModdingAPI.Blocks;
using HarmonyLib; using HarmonyLib;
using RobocraftX; using RobocraftX;
using RobocraftX.Schedulers;
using RobocraftX.Services; using RobocraftX.Services;
using Svelto.Context; using Svelto.Context;
using Svelto.Tasks.ExtraLean;
using GamecraftModdingAPI.Blocks;
using GamecraftModdingAPI.Utility; using GamecraftModdingAPI.Utility;
using GamecraftModdingAPI.Events; using GamecraftModdingAPI.Events;
using GamecraftModdingAPI.Tasks; using GamecraftModdingAPI.Tasks;
@ -89,6 +91,7 @@ namespace GamecraftModdingAPI
AsyncUtils.Init(); AsyncUtils.Init();
GamecraftModdingAPI.App.Client.Init(); GamecraftModdingAPI.App.Client.Init();
GamecraftModdingAPI.App.Game.Init(); GamecraftModdingAPI.App.Game.Init();
CustomBlock.Prepare().RunOn(ExtraLean.UIScheduler);
Logging.MetaLog($"{currentAssembly.GetName().Name} v{currentAssembly.GetName().Version} initialized"); 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); Log.Output("Submitted: " + Window.selected.submittedCode);
}) })
.Build(); .Build();
CustomBlock.Prep().RunOn(ExtraLean.UIScheduler);
try try
{ {
CustomBlock.RegisterCustomBlock<TestBlock>(); CustomBlock.RegisterCustomBlock<TestBlock>();