using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.NET.Common;
using BepInExResoniteShim;
using BepisDynamicVariablePowerTools.Extensions;
using BepisDynamicVariablePowerTools.Helpers;
using Elements.Core;
using FrooxEngine;
using FrooxEngine.FrooxEngine.ProtoFlux.CoreNodes;
using FrooxEngine.ProtoFlux;
using FrooxEngine.ProtoFlux.CoreNodes;
using FrooxEngine.UIX;
using HarmonyLib;
using Microsoft.CSharp.RuntimeBinder;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(/*Could not decode attribute arguments.*/)]
[assembly: TargetFramework(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]
[assembly: AssemblyCompany("BowenArrows2K")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.1.2.0")]
[assembly: AssemblyInformationalVersion("1.1.2+5ba607f8e4b0a712a8165d6f6f0b49f801d9c26d")]
[assembly: AssemblyProduct("BepisDynamicVariablePowerTools")]
[assembly: AssemblyTitle("BepisDynamicVariablePowerTools")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/BowenArrows2K/BepisDynamicVariablePowerTools")]
[assembly: AssemblyVersion("1.1.2.0")]
[module: RefSafetyRules(11)]
namespace BepisDynamicVariablePowerTools
{
[ResonitePlugin("net.bowenarrows2k.BepisDynamicVariablePowerTools", "BepisDynamicVariablePowerTools", "1.1.2", "BowenArrows2K", "https://github.com/BowenArrows2K/BepisDynamicVariablePowerTools")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class BepisDynamicVariablePowerTools : BasePlugin
{
internal static ManualLogSource Log;
internal static ConfigEntry<bool> Mod_Enabled;
internal static ConfigEntry<bool> ChangeProtoFluxStringInputs;
internal static ConfigEntry<bool> RenameDynvarNodes;
internal static ConfigEntry<bool> DebugInfo_Enabled;
internal static ConfigEntry<bool> DebugInfo_LinkedVars;
internal static ConfigEntry<bool> DebugInfo_CompHierarchy;
internal static ConfigEntry<bool> DebugInfo_OutputInPopoutUI;
public override void Load()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Expected O, but got Unknown
Log = ((BasePlugin)this).Log;
ManualLogSource log = Log;
bool flag = default(bool);
BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(18, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Plugin ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>("net.bowenarrows2k.BepisDynamicVariablePowerTools");
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" is loaded!");
}
log.LogInfo(val);
((BasePlugin)this).HarmonyInstance.PatchAll();
Mod_Enabled = ((BasePlugin)this).Config.Bind<bool>("General", "Enabled", true, (ConfigDescription)null);
ChangeProtoFluxStringInputs = ((BasePlugin)this).Config.Bind<bool>("General", "Change ProtoFlux String Inputs on Rename", false, (ConfigDescription)null);
RenameDynvarNodes = ((BasePlugin)this).Config.Bind<bool>("General", "Change text display on nodes (Sources & Drives) targeting Dynamic Variables", true, (ConfigDescription)null);
DebugInfo_Enabled = ((BasePlugin)this).Config.Bind<bool>("Debug Info", "Enabled", true, (ConfigDescription)null);
DebugInfo_LinkedVars = ((BasePlugin)this).Config.Bind<bool>("Debug Info", "Output Linked Variables", true, (ConfigDescription)null);
DebugInfo_CompHierarchy = ((BasePlugin)this).Config.Bind<bool>("Debug Info", "Output Component Hierarchy", true, (ConfigDescription)null);
DebugInfo_OutputInPopoutUI = ((BasePlugin)this).Config.Bind<bool>("Debug Info", "Output debug info in Pop-Out UI", true, new ConfigDescription("When this setting is True the DynamicVariableSpace Debug Info will pop-out a Text Display when pressed.\nWhen False the Output will be displayed in a string value field on the component.", (AcceptableValueBase)null, global::System.Array.Empty<object>()));
}
}
internal sealed class DebugInfoGenerator
{
[CompilerGenerated]
private sealed class <>c__DisplayClass1_0
{
[StructLayout((LayoutKind)3)]
private struct <<OutputComponentHierarchy>b__0>d : IAsyncStateMachine
{
public int <>1__state;
public AsyncTaskMethodBuilder <>t__builder;
public <>c__DisplayClass1_0 <>4__this;
private string <output>5__2;
private ToBackground <>u__1;
private ToWorld <>u__2;
private void MoveNext()
{
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
int num = <>1__state;
<>c__DisplayClass1_0 <>c__DisplayClass1_ = <>4__this;
try
{
ToWorld val;
ToBackground val3;
if (num != 0)
{
if (num == 1)
{
val = <>u__2;
<>u__2 = default(ToWorld);
num = (<>1__state = -1);
goto IL_00f8;
}
ToBackground val2 = default(ToBackground);
val3 = ((ToBackground)(ref val2)).GetAwaiter();
if (!((ToBackground)(ref val3)).IsCompleted)
{
num = (<>1__state = 0);
<>u__1 = val3;
((AsyncTaskMethodBuilder)(ref <>t__builder)).AwaitOnCompleted<ToBackground, <<OutputComponentHierarchy>b__0>d>(ref val3, ref this);
return;
}
}
else
{
val3 = <>u__1;
<>u__1 = default(ToBackground);
num = (<>1__state = -1);
}
((ToBackground)(ref val3)).GetResult();
SpaceTree spaceTree = new SpaceTree(<>c__DisplayClass1_.space);
<output>5__2 = (spaceTree.Process() ? ((object)spaceTree).ToString() : "");
ToWorld val4 = default(ToWorld);
val = ((ToWorld)(ref val4)).GetAwaiter();
if (!((ToWorld)(ref val)).IsCompleted)
{
num = (<>1__state = 1);
<>u__2 = val;
((AsyncTaskMethodBuilder)(ref <>t__builder)).AwaitOnCompleted<ToWorld, <<OutputComponentHierarchy>b__0>d>(ref val, ref this);
return;
}
goto IL_00f8;
IL_00f8:
((ToWorld)(ref val)).GetResult();
((SyncField<string>)(object)<>c__DisplayClass1_.target).Value = <output>5__2;
if (BepisDynamicVariablePowerTools.DebugInfo_OutputInPopoutUI.Value)
{
Slot obj = ((Worker)<>c__DisplayClass1_.space).LocalUserSpace.AddSlot("DynVarSpaceInfo", true);
SlotPositioning.PositionInFrontOfUser(obj, (float3?)float3.Backward, (float3?)null, 1f, (User)null, true, true, true);
UniversalImporter.SpawnText(obj, $"Hierarchy of linked dynamic variable components of Namespace {<>c__DisplayClass1_.space.SpaceName} on {((Component)<>c__DisplayClass1_.space).Slot.Name}", <output>5__2, 16f, (float2?)null, true);
}
}
catch (global::System.Exception exception)
{
<>1__state = -2;
<output>5__2 = null;
((AsyncTaskMethodBuilder)(ref <>t__builder)).SetException(exception);
return;
}
<>1__state = -2;
<output>5__2 = null;
((AsyncTaskMethodBuilder)(ref <>t__builder)).SetResult();
}
[DebuggerHidden]
private void SetStateMachine(IAsyncStateMachine stateMachine)
{
((AsyncTaskMethodBuilder)(ref <>t__builder)).SetStateMachine(stateMachine);
}
}
public DynamicVariableSpace space;
public Sync<string> target;
[AsyncStateMachine(typeof(<<OutputComponentHierarchy>b__0>d))]
internal global::System.Threading.Tasks.Task <OutputComponentHierarchy>b__0()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
<<OutputComponentHierarchy>b__0>d <<OutputComponentHierarchy>b__0>d = default(<<OutputComponentHierarchy>b__0>d);
<<OutputComponentHierarchy>b__0>d.<>t__builder = AsyncTaskMethodBuilder.Create();
<<OutputComponentHierarchy>b__0>d.<>4__this = this;
<<OutputComponentHierarchy>b__0>d.<>1__state = -1;
((AsyncTaskMethodBuilder)(ref <<OutputComponentHierarchy>b__0>d.<>t__builder)).Start<<<OutputComponentHierarchy>b__0>d>(ref <<OutputComponentHierarchy>b__0>d);
return ((AsyncTaskMethodBuilder)(ref <<OutputComponentHierarchy>b__0>d.<>t__builder)).Task;
}
}
[CompilerGenerated]
private sealed class <>c__DisplayClass2_0
{
[StructLayout((LayoutKind)3)]
private struct <<OutputLinkedVariables>b__0>d : IAsyncStateMachine
{
public int <>1__state;
public AsyncTaskMethodBuilder <>t__builder;
public <>c__DisplayClass2_0 <>4__this;
private StringBuilder <names>5__2;
private ToBackground <>u__1;
private ToWorld <>u__2;
private void MoveNext()
{
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Expected O, but got Unknown
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_0281: Unknown result type (might be due to invalid IL or missing references)
//IL_0286: Unknown result type (might be due to invalid IL or missing references)
//IL_028e: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
//IL_0246: Unknown result type (might be due to invalid IL or missing references)
//IL_024c: Unknown result type (might be due to invalid IL or missing references)
//IL_0251: Unknown result type (might be due to invalid IL or missing references)
//IL_0266: Unknown result type (might be due to invalid IL or missing references)
//IL_0268: Unknown result type (might be due to invalid IL or missing references)
int num = <>1__state;
<>c__DisplayClass2_0 <>c__DisplayClass2_ = <>4__this;
try
{
ToWorld val;
ToBackground val3;
if (num != 0)
{
if (num == 1)
{
val = <>u__2;
<>u__2 = default(ToWorld);
num = (<>1__state = -1);
goto IL_029d;
}
ToBackground val2 = default(ToBackground);
val3 = ((ToBackground)(ref val2)).GetAwaiter();
if (!((ToBackground)(ref val3)).IsCompleted)
{
num = (<>1__state = 0);
<>u__1 = val3;
((AsyncTaskMethodBuilder)(ref <>t__builder)).AwaitOnCompleted<ToBackground, <<OutputLinkedVariables>b__0>d>(ref val3, ref this);
return;
}
}
else
{
val3 = <>u__1;
<>u__1 = default(ToBackground);
num = (<>1__state = -1);
}
((ToBackground)(ref val3)).GetResult();
<names>5__2 = new StringBuilder($"Variables linked to Namespace [{<>c__DisplayClass2_.space.SpaceName}] on {((Component)<>c__DisplayClass2_.space).Slot.Name}");
StringBuilder val4 = <names>5__2;
StringBuilder obj = val4;
AppendInterpolatedStringHandler val5 = new AppendInterpolatedStringHandler(1, 1, val4);
((AppendInterpolatedStringHandler)(ref val5)).AppendFormatted<Sync<string>>(<>c__DisplayClass2_.space.SpaceName);
((AppendInterpolatedStringHandler)(ref val5)).AppendLiteral(":");
obj.AppendLine(ref val5);
FieldInfo dynamicValueDict = _dynamicValueDict;
global::System.Collections.IEnumerator enumerator = ((global::System.Collections.IEnumerable)((dynamicValueDict != null) ? dynamicValueDict.GetValue((object)<>c__DisplayClass2_.space) : null)).GetEnumerator();
try
{
while (enumerator.MoveNext())
{
object current = enumerator.Current;
object value = current.GetType().GetProperty("Key").GetValue(current);
global::System.Type type = value.GetType();
string text = (string)type.GetField("name", (BindingFlags)52).GetValue(value);
global::System.Type type2 = (global::System.Type)type.GetField("type", (BindingFlags)52).GetValue(value);
val4 = <names>5__2;
StringBuilder obj2 = val4;
val5 = new AppendInterpolatedStringHandler(3, 2, val4);
((AppendInterpolatedStringHandler)(ref val5)).AppendFormatted(text);
((AppendInterpolatedStringHandler)(ref val5)).AppendLiteral(" (");
((AppendInterpolatedStringHandler)(ref val5)).AppendFormatted(ReflectionExtensions.GetNiceName(type2, "<", ">", "+"));
((AppendInterpolatedStringHandler)(ref val5)).AppendLiteral(")");
obj2.AppendLine(ref val5);
}
}
finally
{
if (num < 0 && enumerator is global::System.IDisposable disposable)
{
disposable.Dispose();
}
}
<names>5__2.Remove(<names>5__2.Length - Environment.NewLine.Length, Environment.NewLine.Length);
ToWorld val6 = default(ToWorld);
val = ((ToWorld)(ref val6)).GetAwaiter();
if (!((ToWorld)(ref val)).IsCompleted)
{
num = (<>1__state = 1);
<>u__2 = val;
((AsyncTaskMethodBuilder)(ref <>t__builder)).AwaitOnCompleted<ToWorld, <<OutputLinkedVariables>b__0>d>(ref val, ref this);
return;
}
goto IL_029d;
IL_029d:
((ToWorld)(ref val)).GetResult();
((SyncField<string>)(object)<>c__DisplayClass2_.target).Value = ((object)<names>5__2).ToString();
if (BepisDynamicVariablePowerTools.DebugInfo_OutputInPopoutUI.Value)
{
Slot obj3 = ((Worker)<>c__DisplayClass2_.space).LocalUserSpace.AddSlot("DynVarSpaceInfo", true);
SlotPositioning.PositionInFrontOfUser(obj3, (float3?)float3.Backward, (float3?)null, 1f, (User)null, true, true, true);
UniversalImporter.SpawnText(obj3, $"Variables linked to Namespace [{<>c__DisplayClass2_.space.SpaceName}] on {((Component)<>c__DisplayClass2_.space).Slot.Name}", ((object)<names>5__2).ToString(), 16f, (float2?)null, true);
}
}
catch (global::System.Exception exception)
{
<>1__state = -2;
<names>5__2 = null;
((AsyncTaskMethodBuilder)(ref <>t__builder)).SetException(exception);
return;
}
<>1__state = -2;
<names>5__2 = null;
((AsyncTaskMethodBuilder)(ref <>t__builder)).SetResult();
}
[DebuggerHidden]
private void SetStateMachine(IAsyncStateMachine stateMachine)
{
((AsyncTaskMethodBuilder)(ref <>t__builder)).SetStateMachine(stateMachine);
}
}
public DynamicVariableSpace space;
public Sync<string> target;
[AsyncStateMachine(typeof(<<OutputLinkedVariables>b__0>d))]
internal global::System.Threading.Tasks.Task <OutputLinkedVariables>b__0()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
<<OutputLinkedVariables>b__0>d <<OutputLinkedVariables>b__0>d = default(<<OutputLinkedVariables>b__0>d);
<<OutputLinkedVariables>b__0>d.<>t__builder = AsyncTaskMethodBuilder.Create();
<<OutputLinkedVariables>b__0>d.<>4__this = this;
<<OutputLinkedVariables>b__0>d.<>1__state = -1;
((AsyncTaskMethodBuilder)(ref <<OutputLinkedVariables>b__0>d.<>t__builder)).Start<<<OutputLinkedVariables>b__0>d>(ref <<OutputLinkedVariables>b__0>d);
return ((AsyncTaskMethodBuilder)(ref <<OutputLinkedVariables>b__0>d.<>t__builder)).Task;
}
}
private static readonly FieldInfo _dynamicValueDict = typeof(DynamicVariableSpace).GetField("_dynamicValues", (BindingFlags)36);
internal static void OutputComponentHierarchy(DynamicVariableSpace space, Sync<string> target)
{
<>c__DisplayClass1_0 CS$<>8__locals4 = new <>c__DisplayClass1_0();
CS$<>8__locals4.space = space;
CS$<>8__locals4.target = target;
((Worker)CS$<>8__locals4.space).StartTask((Func<global::System.Threading.Tasks.Task>)([AsyncStateMachine(typeof(<>c__DisplayClass1_0.<<OutputComponentHierarchy>b__0>d))] () =>
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
<>c__DisplayClass1_0.<<OutputComponentHierarchy>b__0>d <<OutputComponentHierarchy>b__0>d = default(<>c__DisplayClass1_0.<<OutputComponentHierarchy>b__0>d);
<<OutputComponentHierarchy>b__0>d.<>t__builder = AsyncTaskMethodBuilder.Create();
<<OutputComponentHierarchy>b__0>d.<>4__this = CS$<>8__locals4;
<<OutputComponentHierarchy>b__0>d.<>1__state = -1;
((AsyncTaskMethodBuilder)(ref <<OutputComponentHierarchy>b__0>d.<>t__builder)).Start<<>c__DisplayClass1_0.<<OutputComponentHierarchy>b__0>d>(ref <<OutputComponentHierarchy>b__0>d);
return ((AsyncTaskMethodBuilder)(ref <<OutputComponentHierarchy>b__0>d.<>t__builder)).Task;
}));
}
internal static void OutputLinkedVariables(DynamicVariableSpace space, Sync<string> target)
{
<>c__DisplayClass2_0 CS$<>8__locals4 = new <>c__DisplayClass2_0();
CS$<>8__locals4.space = space;
CS$<>8__locals4.target = target;
((Worker)CS$<>8__locals4.space).StartTask((Func<global::System.Threading.Tasks.Task>)([AsyncStateMachine(typeof(<>c__DisplayClass2_0.<<OutputLinkedVariables>b__0>d))] () =>
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
<>c__DisplayClass2_0.<<OutputLinkedVariables>b__0>d <<OutputLinkedVariables>b__0>d = default(<>c__DisplayClass2_0.<<OutputLinkedVariables>b__0>d);
<<OutputLinkedVariables>b__0>d.<>t__builder = AsyncTaskMethodBuilder.Create();
<<OutputLinkedVariables>b__0>d.<>4__this = CS$<>8__locals4;
<<OutputLinkedVariables>b__0>d.<>1__state = -1;
((AsyncTaskMethodBuilder)(ref <<OutputLinkedVariables>b__0>d.<>t__builder)).Start<<>c__DisplayClass2_0.<<OutputLinkedVariables>b__0>d>(ref <<OutputLinkedVariables>b__0>d);
return ((AsyncTaskMethodBuilder)(ref <<OutputLinkedVariables>b__0>d.<>t__builder)).Task;
}));
}
}
internal sealed class RenameDirectlyLinkedVariables
{
internal static void RenameSpace(DynamicVariableSpace space, string newName)
{
newName = DynamicVariableHelper.ProcessName(newName);
string currentName = ((SyncField<string>)(object)space.SpaceName).Value;
string prefixName = currentName + "/";
((Component)space).Slot.ForeachComponentInChildren<IDynamicVariable>((Action<IDynamicVariable>)delegate(IDynamicVariable dynVar)
{
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
string text = default(string);
string text2 = default(string);
DynamicVariableHelper.ParsePath(dynVar.VariableName, ref text, ref text2);
if (text != null && Traverse.Create((object)dynVar).Field("handler").Field("_currentSpace")
.GetValue() == space)
{
IField<string> val = ((Worker)dynVar).TryGetField<string>("VariableName") ?? ((Worker)dynVar).TryGetField<string>("_variableName");
if (val != null && ((IValue<string>)(object)val).Value.StartsWith(prefixName))
{
((IValue<string>)(object)val).Value = newName + "/" + text2;
}
else
{
ProtoFluxEngineProxy val2 = (ProtoFluxEngineProxy)(object)((dynVar is ProtoFluxEngineProxy) ? dynVar : null);
if (val2 != null)
{
SyncRef<IProtoFluxNode> node = val2.Node;
if (node != null)
{
IProtoFluxNode target = node.Target;
if (target != null && ((IWorker)target).TryGetField("VariableName") is SyncRef<IGlobalValueProxy<string>> val3 && val3.Target is GlobalValue<string> val4 && ((SyncField<string>)(object)val4.Value).Value.StartsWith(prefixName))
{
((SyncField<string>)(object)val4.Value).Value = newName + "/" + text2;
}
}
}
}
}
}, true, true);
if (BepisDynamicVariablePowerTools.ChangeProtoFluxStringInputs.Value)
{
((Component)space).Slot.ForeachComponentInChildren<IInput<string>>((Action<IInput<string>>)delegate(IInput<string> stringInput)
{
string text = default(string);
string text2 = default(string);
DynamicVariableHelper.ParsePath(stringInput.Value, ref text, ref text2);
if (text != null && !(text != currentName))
{
stringInput.Value = stringInput.Value.Replace(text, newName);
}
}, true, true);
}
((SyncField<string>)(object)space.SpaceName).Value = newName;
}
}
internal sealed class RenameDynamicVariables
{
private static global::System.Type GetDynVarType(IDynamicVariable dynVar)
{
return ReflectionExtensions.GetGenericArgumentsFromInterface(((object)dynVar).GetType(), typeof(IDynamicVariable<>))[0];
}
private static bool IsDynVarOfType(IDynamicVariable dynVar, global::System.Type innerType)
{
return GetDynVarType(dynVar) == innerType;
}
internal static void RenameDynamicVariable(IDynamicVariable dynVar, string newName)
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
if (!dynVar.TryGetLinkedSpace(out DynamicVariableSpace linkedSpace))
{
((IValue<string>)(object)((Worker)dynVar).TryGetField<string>("VariableName")).Value = newName;
return;
}
global::System.Type dynVarType = GetDynVarType(dynVar);
string currentFullName = dynVar.VariableName;
string text = default(string);
string currentVariableName = default(string);
DynamicVariableHelper.ParsePath(currentFullName, ref text, ref currentVariableName);
Predicate<IDynamicVariable> filter = (Sync<bool>.op_Implicit(linkedSpace.OnlyDirectBinding) ? ((Predicate<IDynamicVariable>)((IDynamicVariable it) => it.VariableName == currentFullName && IsDynVarOfType(it, dynVarType))) : ((Predicate<IDynamicVariable>)((IDynamicVariable it) => (it.VariableName == currentFullName || it.VariableName == currentVariableName) && IsDynVarOfType(it, dynVarType))));
global::System.Collections.Generic.IEnumerator<IDynamicVariable> enumerator = linkedSpace.GetLinkedVariables(filter, includeLocal: true).GetEnumerator();
try
{
while (((global::System.Collections.IEnumerator)enumerator).MoveNext())
{
IDynamicVariable current = enumerator.Current;
IField<string> val = ((Worker)current).TryGetField<string>("VariableName") ?? ((Worker)current).TryGetField<string>("_variableName");
if (val != null)
{
((IValue<string>)(object)val).Value = newName;
continue;
}
ProtoFluxEngineProxy val2 = (ProtoFluxEngineProxy)(object)((current is ProtoFluxEngineProxy) ? current : null);
if (val2 == null)
{
continue;
}
SyncRef<IProtoFluxNode> node = val2.Node;
if (node != null)
{
IProtoFluxNode target = node.Target;
if (target != null && ((IWorker)target).TryGetField("VariableName") is SyncRef<IGlobalValueProxy<string>> val3 && val3.Target is GlobalValue<string> val4)
{
((SyncField<string>)(object)val4.Value).Value = newName;
}
}
}
}
finally
{
((global::System.IDisposable)enumerator)?.Dispose();
}
if (!BepisDynamicVariablePowerTools.ChangeProtoFluxStringInputs.Value || text == null)
{
return;
}
((Component)linkedSpace).Slot.ForeachComponentInChildren<IInput<string>>((Action<IInput<string>>)delegate(IInput<string> stringInput)
{
if (!(stringInput.Value != currentFullName))
{
stringInput.Value = newName;
}
}, true, true);
}
}
internal sealed class SpaceTree
{
private readonly Slot _slot;
private readonly DynamicVariableSpace _space;
private SpaceTree[] _children = global::System.Array.Empty<SpaceTree>();
private IDynamicVariable[] _dynVars = global::System.Array.Empty<IDynamicVariable>();
public SpaceTree(DynamicVariableSpace space, Slot? slot = null)
{
_space = space;
_slot = slot ?? ((Component)space).Slot;
}
public bool Process()
{
_dynVars = ((ContainerWorker<Component>)(object)_slot).GetComponents<IDynamicVariable>((Predicate<IDynamicVariable>)([CompilerGenerated] (IDynamicVariable dynVar) => dynVar.IsLinkedToSpace(_space)), false).ToArray();
_children = Enumerable.ToArray<SpaceTree>(Enumerable.Where<SpaceTree>(Enumerable.Select<Slot, SpaceTree>((global::System.Collections.Generic.IEnumerable<Slot>)_slot.Children, (Func<Slot, SpaceTree>)([CompilerGenerated] (Slot child) => new SpaceTree(_space, child))), (Func<SpaceTree, bool>)((SpaceTree tree) => tree.Process())));
if (_dynVars.Length == 0)
{
return _children.Length != 0;
}
return true;
}
public string ToString()
{
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Expected O, but got Unknown
StringBuilder val = new StringBuilder($"Hierarchy of linked dynamic variable components of Namespace [{_space.SpaceName}] on {((Component)_space).Slot.Name}");
val.AppendLine();
BuildString(val, "");
val.Remove(val.Length - Environment.NewLine.Length, Environment.NewLine.Length);
return ((object)val).ToString();
}
private static void AppendDynVar(StringBuilder builder, string indent, IDynamicVariable dynVar, bool last = false)
{
builder.Append(indent);
builder.Append(last ? "└─" : "├─");
builder.Append(dynVar.VariableName);
builder.Append(" (");
builder.Append(ReflectionExtensions.GetNiceName(((object)dynVar).GetType(), "<", ">", "+"));
builder.AppendLine(")");
}
private static void AppendSlot(StringBuilder builder, string indent, SpaceTree child, bool first, bool last)
{
if (!first)
{
builder.Append(indent);
builder.AppendLine("│");
}
builder.Append(indent);
builder.Append(last ? "└─" : "├─");
AppendInterpolatedStringHandler val = default(AppendInterpolatedStringHandler);
((AppendInterpolatedStringHandler)(ref val))..ctor(20, 1, builder);
((AppendInterpolatedStringHandler)(ref val)).AppendFormatted(child._slot.Name);
((AppendInterpolatedStringHandler)(ref val)).AppendLiteral("<noparse></closeall>");
builder.AppendLine(ref val);
child.BuildString(builder, indent + (last ? " " : "│ "));
}
private void BuildString(StringBuilder builder, string indent)
{
if (_dynVars.Length != 0)
{
for (int i = 0; i < _dynVars.Length - 1; i++)
{
AppendDynVar(builder, indent, _dynVars[i]);
}
bool flag = _children.Length == 0;
IDynamicVariable[] dynVars = _dynVars;
AppendDynVar(builder, indent, dynVars[dynVars.Length - 1], flag);
if (!flag)
{
builder.Append(indent);
builder.AppendLine("│");
}
}
if (_children.Length != 0)
{
for (int j = 0; j < _children.Length; j++)
{
AppendSlot(builder, indent, _children[j], j == 0, j == _children.Length - 1);
}
}
}
}
public static class PluginMetadata
{
public const string GUID = "net.bowenarrows2k.BepisDynamicVariablePowerTools";
public const string NAME = "BepisDynamicVariablePowerTools";
public const string VERSION = "1.1.2";
public const string AUTHORS = "BowenArrows2K";
public const string REPOSITORY_URL = "https://github.com/BowenArrows2K/BepisDynamicVariablePowerTools";
}
}
namespace BepisDynamicVariablePowerTools.Patches
{
[HarmonyPatch]
public static class RenameDynVarNodes
{
[CompilerGenerated]
private static class <>o__0
{
public static CallSite<Func<CallSite, object, object>> <>p__0;
public static CallSite<Func<CallSite, object, object>> <>p__1;
public static CallSite<Func<CallSite, object, IValue>> <>p__2;
public static CallSite<Func<CallSite, object, object>> <>p__3;
public static CallSite<Func<CallSite, object, object>> <>p__4;
public static CallSite<Func<CallSite, object, IValue>> <>p__5;
}
[HarmonyPostfix]
[HarmonyPatch(typeof(ProtoFluxNodeVisual), "BuildUI")]
public static void RenameNode(ProtoFluxNodeVisual __instance)
{
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Expected O, but got Unknown
if (!BepisDynamicVariablePowerTools.RenameDynvarNodes.Value)
{
return;
}
ProtoFluxNode target = ((SyncRef<ProtoFluxNode>)(object)__instance.Node).Target;
global::System.Type type = ((object)target).GetType();
global::System.Type type2 = (type.IsGenericType ? type.GetGenericTypeDefinition() : type);
if (type2 == typeof(ValueSource<>) || type2 == typeof(ObjectValueSource<>) || type2 == typeof(ReferenceSource<>))
{
IValue target2 = (IValue)Traverse.Create((object)target).Property<ISyncRef>("RootSourceReference", (object[])null).Value.Target;
ReplaceNodeText(__instance, target2);
}
object obj2;
if (type2 == typeof(ValueFieldDrive<>) || type2 == typeof(ObjectFieldDrive<>))
{
object obj = ((MethodBase)type.GetMethod("GetRootProxy")).Invoke((object)target, new object[1] { false });
if (<>o__0.<>p__2 == null)
{
<>o__0.<>p__2 = CallSite<Func<CallSite, object, IValue>>.Create(Binder.Convert((CSharpBinderFlags)0, typeof(IValue), typeof(RenameDynVarNodes)));
}
Func<CallSite, object, IValue> target3 = <>o__0.<>p__2.Target;
CallSite<Func<CallSite, object, IValue>> <>p__ = <>o__0.<>p__2;
obj2 = obj;
object obj3;
if (obj2 == null)
{
obj3 = null;
}
else
{
if (<>o__0.<>p__1 == null)
{
<>o__0.<>p__1 = CallSite<Func<CallSite, object, object>>.Create(Binder.GetMember((CSharpBinderFlags)0, "Target", typeof(RenameDynVarNodes), (global::System.Collections.Generic.IEnumerable<CSharpArgumentInfo>)(object)new CSharpArgumentInfo[1] { CSharpArgumentInfo.Create((CSharpArgumentInfoFlags)0, (string)null) }));
}
Func<CallSite, object, object> target4 = <>o__0.<>p__1.Target;
CallSite<Func<CallSite, object, object>> <>p__2 = <>o__0.<>p__1;
if (<>o__0.<>p__0 == null)
{
<>o__0.<>p__0 = CallSite<Func<CallSite, object, object>>.Create(Binder.GetMember((CSharpBinderFlags)0, "Drive", typeof(RenameDynVarNodes), (global::System.Collections.Generic.IEnumerable<CSharpArgumentInfo>)(object)new CSharpArgumentInfo[1] { CSharpArgumentInfo.Create((CSharpArgumentInfoFlags)0, (string)null) }));
}
obj3 = target4.Invoke((CallSite)(object)<>p__2, <>o__0.<>p__0.Target.Invoke((CallSite)(object)<>o__0.<>p__0, obj2));
}
IValue target5 = target3.Invoke((CallSite)(object)<>p__, obj3);
ReplaceNodeText(__instance, target5);
}
if (!(type2 == typeof(ReferenceDrive<>)))
{
return;
}
MethodInfo method = typeof(RenameDynVarNodes).GetMethod("GetRefProxy");
global::System.Type type3 = type.GetGenericArguments()[0];
object obj4 = ((MethodBase)((method != null) ? method.MakeGenericMethod(new global::System.Type[1] { type3 }) : null)).Invoke((object)null, new object[1] { target });
if (<>o__0.<>p__5 == null)
{
<>o__0.<>p__5 = CallSite<Func<CallSite, object, IValue>>.Create(Binder.Convert((CSharpBinderFlags)0, typeof(IValue), typeof(RenameDynVarNodes)));
}
Func<CallSite, object, IValue> target6 = <>o__0.<>p__5.Target;
CallSite<Func<CallSite, object, IValue>> <>p__3 = <>o__0.<>p__5;
obj2 = obj4;
object obj5;
if (obj2 == null)
{
obj5 = null;
}
else
{
if (<>o__0.<>p__4 == null)
{
<>o__0.<>p__4 = CallSite<Func<CallSite, object, object>>.Create(Binder.GetMember((CSharpBinderFlags)0, "Target", typeof(RenameDynVarNodes), (global::System.Collections.Generic.IEnumerable<CSharpArgumentInfo>)(object)new CSharpArgumentInfo[1] { CSharpArgumentInfo.Create((CSharpArgumentInfoFlags)0, (string)null) }));
}
Func<CallSite, object, object> target7 = <>o__0.<>p__4.Target;
CallSite<Func<CallSite, object, object>> <>p__4 = <>o__0.<>p__4;
if (<>o__0.<>p__3 == null)
{
<>o__0.<>p__3 = CallSite<Func<CallSite, object, object>>.Create(Binder.GetMember((CSharpBinderFlags)0, "Drive", typeof(RenameDynVarNodes), (global::System.Collections.Generic.IEnumerable<CSharpArgumentInfo>)(object)new CSharpArgumentInfo[1] { CSharpArgumentInfo.Create((CSharpArgumentInfoFlags)0, (string)null) }));
}
obj5 = target7.Invoke((CallSite)(object)<>p__4, <>o__0.<>p__3.Target.Invoke((CallSite)(object)<>o__0.<>p__3, obj2));
}
IValue target8 = target6.Invoke((CallSite)(object)<>p__3, obj5);
ReplaceNodeText(__instance, target8);
}
public static Proxy<T> GetRefProxy<T>(ProtoFluxNode node) where T : class, IWorldElement
{
return ((ContainerWorker<Component>)(object)((Component)node).Slot).GetComponent<Proxy<T>>((Predicate<Proxy<T>>)((Proxy<T> p) => (object)((ProtoFluxEngineProxy)p).Node.Target == node), false);
}
public static void ReplaceNodeText(ProtoFluxNodeVisual visual, IValue Target)
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Expected O, but got Unknown
string text = ((Target != null) ? ((IWorldElement)Target).Name : null);
IWorldElement val = ((Target != null) ? ((IWorldElement)Target).Parent : null);
Traverse val2 = Traverse.Create((object)val).Field("VariableName");
if (val2.FieldExists())
{
Component val3 = (Component)val;
string value = ((SyncField<string>)(object)val2.GetValue<Sync<string>>()).Value;
((SyncField<string>)(object)((ContainerWorker<Component>)(object)Enumerable.First<Slot>((global::System.Collections.Generic.IEnumerable<Slot>)((Component)visual).Slot.FindChildInHierarchy("Overlapping Layout").FindChild("Horizontal Layout").Children)).GetComponent<Text>((Predicate<Text>)null, false).Content).Value = $"<size=60%>Dynamic Variable: ({text})</size>\n<i>{value}</i><size=75%>\n(On: {val3.Slot.Name})</size>";
}
}
}
[HarmonyPatch]
public class WorkerInspector_Patch
{
[HarmonyPostfix]
[HarmonyPatch(typeof(WorkerInspector), "BuildInspectorUI")]
public static void BuildInspectorUI_Postfix(Worker worker, UIBuilder ui)
{
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
if (!BepisDynamicVariablePowerTools.Mod_Enabled.Value)
{
return;
}
DynamicVariableSpace val = (DynamicVariableSpace)(object)((worker is DynamicVariableSpace) ? worker : null);
if (val == null)
{
IDynamicVariable val2 = (IDynamicVariable)(object)((worker is IDynamicVariable) ? worker : null);
if (val2 != null)
{
IField<string> nameField = ((Worker)val2).TryGetField<string>("VariableName");
bool num = val2.IsLinkedToSpace();
ui.Style.MinHeight = 24f;
if (num)
{
ui.HorizontalLayout(4f, 0f, (Alignment?)null);
ui.Style.MinWidth = 256f;
val2.TryGetLinkedSpace(out DynamicVariableSpace linkedSpace);
LocaleString val3 = LocaleString.op_Implicit($"DynamicVariableSpace: {linkedSpace.SpaceName}");
ui.Button(ref val3);
ui.BuildOpenReference<DynamicVariableSpace>(linkedSpace);
ui.NestOut();
}
ui.BuildRenameUI(nameField, delegate(string newName)
{
RenameDynamicVariables.RenameDynamicVariable(val2, newName);
});
}
return;
}
ui.BuildRenameUI((IField<string>)(object)val.SpaceName, delegate(string newName)
{
RenameDirectlyLinkedVariables.RenameSpace(val, newName);
});
if (BepisDynamicVariablePowerTools.DebugInfo_Enabled.Value)
{
ui.BuildOutputUI(delegate(Sync<string> target)
{
DebugInfoGenerator.OutputLinkedVariables(val, target);
}, delegate(Sync<string> target)
{
DebugInfoGenerator.OutputComponentHierarchy(val, target);
});
}
}
}
}
namespace BepisDynamicVariablePowerTools.Helpers
{
internal static class BAUIHelper
{
private static readonly FieldInfo _refTarget = typeof(RefEditor).GetField("_targetRef", (BindingFlags)36);
private static readonly MethodInfo _openInspectorButton = typeof(RefEditor).GetMethod("OpenInspectorButton", (BindingFlags)36);
private static readonly MethodInfo _openWorkerInspectorButton = typeof(RefEditor).GetMethod("OpenWorkerInspectorButton", (BindingFlags)36);
internal static void BuildRenameUI(this UIBuilder builder, IField<string> nameField, Action<string> onRename)
{
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Expected O, but got Unknown
DestroyOnUserLeave val = ((Component)builder.HorizontalLayout(4f, 0f, (Alignment?)null)).Slot.DestroyWhenLocalUserLeaves();
UIStyle style = builder.Style;
style.FlexibleWidth = 1f;
TextField newNameField = builder.TextField(((IValue<string>)(object)nameField).Value, false, (string)null, false, default(LocaleString));
((IChangeable)nameField).Changed += ChangedListener;
((ComponentBase<Component>)(object)val).Destroyed += delegate
{
((IChangeable)nameField).Changed -= ChangedListener;
};
style.FlexibleWidth = -1f;
style.MinWidth = 256f;
LocaleString val2 = LocaleString.op_Implicit("Rename");
builder.Button(ref val2).LocalPressed += (ButtonEventHandler)delegate
{
onRename.Invoke(((SyncField<string>)(object)newNameField.Text.Content).Value);
};
builder.NestOut();
void ChangedListener(object _)
{
((SyncField<string>)(object)newNameField.Text.Content).Value = ((IValue<string>)(object)nameField).Value;
}
}
internal static void BuildOutputUI(this UIBuilder builder, Action<Sync<string>> onOutLinkedVars, Action<Sync<string>> onOutCompHierarchy)
{
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Expected O, but got Unknown
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Expected O, but got Unknown
ValueField<string> outputfield = ((ContainerWorker<Component>)(object)builder.Current).AttachComponent<ValueField<string>>(true, (Action<ValueField<string>>)null);
if (BepisDynamicVariablePowerTools.DebugInfo_LinkedVars.Value)
{
LocaleString val = LocaleString.op_Implicit("Output Variable Definitions");
builder.Button(ref val).LocalPressed += (ButtonEventHandler)delegate
{
onOutLinkedVars.Invoke(outputfield.Value);
};
}
if (BepisDynamicVariablePowerTools.DebugInfo_CompHierarchy.Value)
{
LocaleString val = LocaleString.op_Implicit("Output Component Hierarchy");
builder.Button(ref val).LocalPressed += (ButtonEventHandler)delegate
{
onOutCompHierarchy.Invoke(outputfield.Value);
};
}
if (!BepisDynamicVariablePowerTools.DebugInfo_OutputInPopoutUI.Value)
{
SyncMemberEditorBuilder.Build((ISyncMember)(object)outputfield.Value, "Output", ((Worker)outputfield).GetSyncMemberFieldInfo("Value"), builder, 0.3f);
}
}
internal static ReferenceField<TReference> BuildOpenReference<TReference>(this UIBuilder ui, TReference reference) where TReference : class, IWorldElement
{
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Expected O, but got Unknown
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Expected O, but got Unknown
if (reference == null)
{
throw new ArgumentNullException("reference");
}
ui.PushStyle();
ui.Style.FlexibleWidth = -1f;
ui.Style.MinWidth = 40f;
LocaleString val = LocaleString.op_Implicit("⤴");
Button obj = ui.Button(ref val);
ReferenceField<TReference> val2 = ((ContainerWorker<Component>)(object)((Component)obj).Slot).AttachComponent<ReferenceField<TReference>>(true, (Action<ReferenceField<TReference>>)null);
val2.Reference.Target = reference;
RefEditor val3 = ((ContainerWorker<Component>)(object)((Component)obj).Slot).AttachComponent<RefEditor>(true, (Action<RefEditor>)null);
FieldInfo refTarget = _refTarget;
ISyncRef val4 = (((SyncRef<ISyncRef>)(object)(RelayRef<ISyncRef>)((refTarget != null) ? refTarget.GetValue((object)val3) : null)).Target = (ISyncRef)(object)val2.Reference);
obj.Pressed.Target = (ButtonEventHandler)global::System.Delegate.CreateDelegate(typeof(ButtonEventHandler), (object)val3, _openInspectorButton);
val = LocaleString.op_Implicit("↑");
ui.Button(ref val).Pressed.Target = (ButtonEventHandler)global::System.Delegate.CreateDelegate(typeof(ButtonEventHandler), (object)val3, _openWorkerInspectorButton);
ui.PopStyle();
return val2;
}
}
}
namespace BepisDynamicVariablePowerTools.Extensions
{
internal static class DestroyOnUserLeaveExtensions
{
internal static DestroyOnUserLeave DestroyWhenLocalUserLeaves(this Slot slot)
{
slot.PersistentSelf = false;
DestroyOnUserLeave val = Enumerable.FirstOrDefault<DestroyOnUserLeave>((global::System.Collections.Generic.IEnumerable<DestroyOnUserLeave>)((ContainerWorker<Component>)(object)slot).GetComponents<DestroyOnUserLeave>((Predicate<DestroyOnUserLeave>)null, false), (Func<DestroyOnUserLeave, bool>)((DestroyOnUserLeave destroy) => destroy.TargetUser.Target == ((Worker)slot).LocalUser));
if (val != null)
{
return val;
}
return DestroyOnUserLeaveExtensions.DestroyWhenUserLeaves(slot, ((Worker)slot).LocalUser);
}
}
public static class DynamicVariableExtensions
{
private static readonly FieldInfo _currentDynSpace = typeof(DynamicVariableHandler<dummy>).GetField("_currentSpace", (BindingFlags)36);
private static readonly FieldInfo handler = typeof(DynamicVariableBase<dummy>).GetField("handler", (BindingFlags)36);
public static global::System.Collections.Generic.IEnumerable<IDynamicVariable> GetLinkedVariables(this DynamicVariableSpace space, Predicate<IDynamicVariable>? filter = null, bool includeLocal = false, bool excludeDisabled = false, Predicate<Slot>? slotFilter = null)
{
if (filter == null)
{
filter = Filter;
}
return (global::System.Collections.Generic.IEnumerable<IDynamicVariable>)((Component)space).Slot.GetComponentsInChildren<IDynamicVariable>((Predicate<IDynamicVariable>)((IDynamicVariable variable) => variable.IsLinkedToSpace(space) && filter.Invoke(variable)), includeLocal, excludeDisabled, slotFilter);
}
public static bool IsLinkedToSpace(this IDynamicVariable dynamicVariable)
{
DynamicVariableSpace linkedSpace;
return dynamicVariable.TryGetLinkedSpace(out linkedSpace);
}
public static bool IsLinkedToSpace(this IDynamicVariable dynamicVariable, DynamicVariableSpace space)
{
if (dynamicVariable.TryGetLinkedSpace(out DynamicVariableSpace linkedSpace))
{
return linkedSpace == space;
}
return false;
}
public static bool TryGetLinkedSpace(this IDynamicVariable dynamicVariable, [NotNullWhen(true)] out DynamicVariableSpace linkedSpace)
{
linkedSpace = Traverse.Create((object)dynamicVariable).Field(((MemberInfo)handler).Name).Field(((MemberInfo)_currentDynSpace).Name)
.GetValue<DynamicVariableSpace>();
return linkedSpace != null;
}
private static bool Filter(IDynamicVariable variable)
{
return true;
}
}
}