Add command to disable the environment switch

Was in the test plugin
This commit is contained in:
Norbi Peti 2021-08-10 01:04:58 +02:00
parent 12fd814c45
commit 3e309a4e4c
3 changed files with 77 additions and 0 deletions

View file

@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using DataLoader;
using HarmonyLib;
using TechbloxModdingAPI;
using TechbloxModdingAPI.Blocks;
using TechbloxModdingAPI.Commands;
@ -237,6 +239,14 @@ namespace BuildingTools
ScalingPermission.NonUniform;
Logging.CommandLog("Free scaling enabled for " + blockID + " until the game is restarted.");
}).Build();
var noGarage = new NoGarageCommand();
CommandBuilder.Builder("noGarage", "Disables the environment switching and allows building on the track.")
.Action(() =>
{
noGarage.Toggle();
}).Build();
new Harmony("BuildTools").PatchAll(Assembly.GetExecutingAssembly());
}
private string GetBlockInfo()

View file

@ -37,6 +37,10 @@
<HintPath>..\ref\Plugins\TechbloxModdingAPI.dll</HintPath>
<HintPath>..\..\ref\Plugins\TechbloxModdingAPI.dll</HintPath>
</Reference>
<Reference Include="0Harmony">
<HintPath>..\ref\Plugins\0Harmony.dll</HintPath>
<HintPath>..\..\ref\Plugins\0Harmony.dll</HintPath>
</Reference>
<Reference Include="IllusionInjector">
<HintPath>..\ref\TechbloxPreview_Data\Managed\IllusionInjector.dll</HintPath>
<HintPath>..\..\ref\TechbloxPreview_Data\Managed\IllusionInjector.dll</HintPath>

View file

@ -0,0 +1,63 @@
using System;
using System.Reflection;
using HarmonyLib;
using UnityEngine;
namespace BuildingTools
{
public class NoGarageCommand
{
private static bool _enabled;
public void Toggle()
{
Console.WriteLine("Toggling no garage");
if(_enabled = !_enabled)
Enable();
Console.WriteLine($"{(_enabled ? "Enabled" : "Disabled")} no garage");
}
private void Enable()
{
var type = AccessTools.TypeByName("Techblox.Environment.Temporary.EnvironmentSwitchEngine");
var simObj = (GameObject)AccessTools.Field(type,
"THIS_IS_TEMPORARY_CODE_IT_IS_GOING_TO_BE_DELETED_ONCE_WE_HAVE_THE_FINAL_WORLD_SWITCHING_sim_go")
.GetValue(null);
/*var buildObjField = AccessTools.Field(type,
"THIS_IS_TEMPORARY_CODE_IT_IS_GOING_TO_BE_DELETED_ONCE_WE_HAVE_THE_FINAL_WORLD_SWITCHING_build_go");
var buildObj = (GameObject) buildObjField.GetValue(null);
Console.WriteLine($"obj: {simObj}");*/
var componentType = AccessTools.TypeByName("Techblox.Garage.GarageMachineBoundaryImplementor");
//var component = buildObj.GetComponent(componentType);
//var newBuildObj = Object.Instantiate(simObj);
simObj.AddComponent(componentType);
var component = simObj.GetComponent(componentType);
AccessTools.Field(componentType, "_bounds")
.SetValue(component, new Bounds(default, new Vector3(50, 2, 50)));
AccessTools.Field(componentType, "_padding")
.SetValue(component, 1f);
AccessTools.Field(componentType, "_cameraLookPointDistance")
.SetValue(component, 1f);
//buildObjField.SetValue(null, newBuildObj);
}
[HarmonyPatch]
private static class EnvironmentPatch
{
public static bool Prefix(object __instance)
{
if (!_enabled) return true;
Console.WriteLine("Got a time stopped init event");
AccessTools.Method("Techblox.Environment.Temporary.EnvironmentSwitchEngine:OnTimeRunningInitializationComplete")
.Invoke(__instance, Array.Empty<object>());
Console.WriteLine("Successfully called time running init event");
return false;
}
public static MethodBase TargetMethod()
{
return AccessTools.Method("Techblox.Environment.Temporary.EnvironmentSwitchEngine:OnTimeStoppedInitializationComplete");
}
}
}
}