TryGetWorldObject

This commit is contained in:
JohnCorby 2022-05-26 21:27:17 -07:00
parent cad49f6ee0
commit 11b27a017b
2 changed files with 22 additions and 10 deletions

View File

@ -23,13 +23,11 @@ internal class LightSensorPatches : QSBPatch
return true;
}
if (!__instance.HasWorldObject())
if (!__instance.TryGetWorldObject(out QSBLightSensor qsbLightSensor))
{
return true;
}
var qsbLightSensor = __instance.GetWorldObject<QSBLightSensor>();
if (__instance._fixedUpdateFrameDelayCount > 0)
{
__instance._fixedUpdateFrameDelayCount--;
@ -61,13 +59,11 @@ internal class LightSensorPatches : QSBPatch
return true;
}
if (!__instance.HasWorldObject())
if (!__instance.TryGetWorldObject(out QSBLightSensor qsbLightSensor))
{
return true;
}
var qsbLightSensor = __instance.GetWorldObject<QSBLightSensor>();
qsbLightSensor.LocallyIlluminated = false;
__instance._illuminatingDreamLanternList?.Clear();
if (__instance._lightSources == null || __instance._lightSources.Count == 0)
@ -176,12 +172,11 @@ internal class LightSensorPatches : QSBPatch
return true;
}
if (!__instance.HasWorldObject())
if (!__instance.TryGetWorldObject(out QSBLightSensor qsbLightSensor))
{
return true;
}
var qsbLightSensor = __instance.GetWorldObject<QSBLightSensor>();
var locallyIlluminated = qsbLightSensor.LocallyIlluminated;
qsbLightSensor.LocallyIlluminated = false;

View File

@ -269,8 +269,25 @@ public static class QSBWorldSync
return (TWorldObject)worldObject;
}
public static bool HasWorldObject(this MonoBehaviour unityObject)
=> unityObject && UnityObjectsToWorldObjects.ContainsKey(unityObject);
public static bool TryGetWorldObject<TWorldObject>(this MonoBehaviour unityObject, out TWorldObject worldObject)
where TWorldObject : IWorldObject
{
if (!unityObject)
{
DebugLog.ToConsole($"Error - Trying to run GetWorldFromUnity with a null unity object! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:NULL, Stacktrace:\r\n{Environment.StackTrace}", MessageType.Error);
worldObject = default;
return false;
}
if (!UnityObjectsToWorldObjects.TryGetValue(unityObject, out var iWorldObject))
{
worldObject = default;
return false;
}
worldObject = (TWorldObject)iWorldObject;
return true;
}
/// <summary>
/// not deterministic across platforms.