debugging Awake failure

This commit is contained in:
FreezeDriedMangoes 2022-06-15 11:53:19 -04:00
parent 76ade8d238
commit 7124834232
3 changed files with 48 additions and 9 deletions

View File

@ -1,3 +1,4 @@
using HarmonyLib;
using NewHorizons.External.Configs; using NewHorizons.External.Configs;
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using OWML.Common; using OWML.Common;
@ -55,14 +56,14 @@ namespace NewHorizons.Builder.Props
quantumObject._socketRoot = groupRoot; quantumObject._socketRoot = groupRoot;
quantumObject._socketList = sockets; quantumObject._socketList = sockets;
if (prop.GetComponentInChildren<VisibilityTracker>() != null) continue; if (prop.GetComponentInChildren<ShapeVisibilityTracker>() != null) continue;
var boxBounds = GetBoundsOfSelfAndChildMeshes(prop); var boxBounds = GetBoundsOfSelfAndChildMeshes(prop);
var boxShape = prop.AddComponent<BoxShape>(); var boxShape = prop.AddComponent<BoxShape>();
boxShape.center = boxBounds.center; boxShape.center = boxBounds.center;
boxShape.extents = boxBounds.size; boxShape.extents = boxBounds.size;
prop.AddComponent<VisibilityTracker>(); prop.AddComponent<ShapeVisibilityTracker>();
} }
} }
@ -81,14 +82,14 @@ namespace NewHorizons.Builder.Props
var state = prop.AddComponent<QuantumState>(); var state = prop.AddComponent<QuantumState>();
states.Add(state); states.Add(state);
if (prop.GetComponentInChildren<VisibilityTracker>() != null) continue; if (prop.GetComponentInChildren<ShapeVisibilityTracker>() != null) continue;
var boxBounds = GetBoundsOfSelfAndChildMeshes(prop); var boxBounds = GetBoundsOfSelfAndChildMeshes(prop);
var boxShape = prop.AddComponent<BoxShape>(); var boxShape = prop.AddComponent<BoxShape>();
boxShape.center = boxBounds.center; boxShape.center = boxBounds.center;
boxShape.extents = boxBounds.size; boxShape.extents = boxBounds.size;
prop.AddComponent<VisibilityTracker>(); prop.AddComponent<ShapeVisibilityTracker>();
} }
if (quantumGroup.hasEmptyState) if (quantumGroup.hasEmptyState)
@ -105,7 +106,7 @@ namespace NewHorizons.Builder.Props
boxShape.center = boxBounds.center; boxShape.center = boxBounds.center;
boxShape.extents = boxBounds.size; boxShape.extents = boxBounds.size;
empty.AddComponent<VisibilityTracker>(); empty.AddComponent<ShapeVisibilityTracker>();
} }
var multiState = groupRoot.AddComponent<MultiStateQuantumObject>(); var multiState = groupRoot.AddComponent<MultiStateQuantumObject>();
@ -124,16 +125,16 @@ namespace NewHorizons.Builder.Props
var shuffle = shuffleParent.AddComponent<QuantumShuffleObject>(); var shuffle = shuffleParent.AddComponent<QuantumShuffleObject>();
shuffle._shuffledObjects = propsInGroup.Select(p => p.transform).ToArray(); shuffle._shuffledObjects = propsInGroup.Select(p => p.transform).ToArray();
shuffle.Awake(); // this doesn't get called on its own for some reason
var boxBounds = GetBoundsOfSelfAndChildMeshes(shuffleParent); var boxBounds = GetBoundsOfSelfAndChildMeshes(shuffleParent); // TODO: add a box shape to each prop instead of to the parent
var boxShape = shuffleParent.AddComponent<BoxShape>(); var boxShape = shuffleParent.AddComponent<BoxShape>();
boxShape.center = boxBounds.center; boxShape.center = boxBounds.center;
boxShape.extents = boxBounds.size; boxShape.extents = boxBounds.size;
shuffleParent.AddComponent<VisibilityTracker>(); shuffleParent.AddComponent<ShapeVisibilityTracker>();
} }
public static Bounds GetBoundsOfSelfAndChildMeshes(GameObject g) public static Bounds GetBoundsOfSelfAndChildMeshes(GameObject g)
{ {
var meshFilters = g.GetComponentsInChildren<MeshFilter>(); var meshFilters = g.GetComponentsInChildren<MeshFilter>();

View File

@ -1,4 +1,4 @@
using HarmonyLib; using HarmonyLib;
using NewHorizons.Builder.Props; using NewHorizons.Builder.Props;
using NewHorizons.Components; using NewHorizons.Components;
using NewHorizons.External; using NewHorizons.External;

View File

@ -0,0 +1,38 @@
using HarmonyLib;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace NewHorizons.Patches
{
[HarmonyPatch]
public static class TemporaryDebugOnlyPatchesDeleteBeforePR
{
// This is some dark magic
// this creates a method called base_DropItem that basically just calls OWItem.PickUpItem whenever it (VisionTorchItemPatches.base_PickUpItem) is called
[HarmonyReversePatch]
[HarmonyPatch(typeof(QuantumObject), nameof(QuantumObject.Awake))]
private static void base_Awake(QuantumObject __instance) { }
// Make the vision torch droppable. In the base game you can only drop it if you're in the dream world.
[HarmonyPrefix]
[HarmonyPatch(typeof(QuantumShuffleObject), nameof(QuantumShuffleObject.Awake))]
public static bool QuantumShuffleObject_Awake(QuantumShuffleObject __instance)
{
base_Awake(__instance);
__instance._indexList = new List<int>(__instance._shuffledObjects.Length);
__instance._localPositions = new Vector3[__instance._shuffledObjects.Length];
for (int i = 0; i < __instance._shuffledObjects.Length; i++)
{
__instance._localPositions[i] = __instance._shuffledObjects[i].localPosition;
}
return false;
}
}
}