using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("DynamicScannerRange")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DynamicScannerRange")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("6e4d356e-240a-40bd-b25a-a7fe9f8f1cdc")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace DynamicScannerRange;
[BepInPlugin("nyoo.DynamicScannerRange", "Dynamic Scanner Range", "1.0.0")]
public class DynamicScannerBase : BaseUnityPlugin
{
private const string modGUID = "nyoo.DynamicScannerRange";
private const string modName = "Dynamic Scanner Range";
private const string modVersion = "1.0.0";
private readonly Harmony harmony = new Harmony("nyoo.DynamicScannerRange");
private static DynamicScannerBase Instance;
public static ManualLogSource mls;
public static ConfigEntry<int> ShipScanRadius;
public static ConfigEntry<int> MainEntranceScanRadius;
public static ConfigEntry<int> DataChipScanRadius;
private void Awake()
{
mls = Logger.CreateLogSource("nyoo.DynamicScannerRange");
harmony.PatchAll();
foreach (MethodBase patchedMethod in harmony.GetPatchedMethods())
{
mls.LogInfo((object)(patchedMethod.ToString() + " patched."));
}
mls.LogInfo((object)"Dynamic Scanner has loaded!");
LoadConfigs();
}
private void LoadConfigs()
{
ShipScanRadius = ((BaseUnityPlugin)this).Config.Bind<int>("Settings", "ShipScanRadius", 1000, "Vanilla Default: 110\nModded Default: 1000");
MainEntranceScanRadius = ((BaseUnityPlugin)this).Config.Bind<int>("Settings", "MainEntranceScanRadius", 1000, "Vanilla Default: 100\nModded Default: 1000");
DataChipScanRadius = ((BaseUnityPlugin)this).Config.Bind<int>("Settings", "DataChipsScanRadius", 100, "Vanilla Default: 20\nModded Default: 100");
}
}
[HarmonyPatch(typeof(HUDManager))]
[HarmonyPatch("AttemptScanNode")]
public class ScanNodePatch
{
[HarmonyPrefix]
private static void AttemptScanNode(HUDManager __instance, ScanNodeProperties node, int i, PlayerControllerB playerScript)
{
switch (node.headerText)
{
case "Ship":
node.maxRange = DynamicScannerBase.ShipScanRadius.Value;
break;
case "Main entrance":
node.maxRange = DynamicScannerBase.MainEntranceScanRadius.Value;
break;
case "Data chip":
node.maxRange = DynamicScannerBase.DataChipScanRadius.Value;
break;
}
if (Traverse.Create((object)__instance).Method("MeetsScanNodeRequirements", new object[2] { node, playerScript }).GetValue<bool>())
{
if (node.nodeType == 2)
{
Traverse.Create((object)__instance).Field("scannedScrapNum").SetValue((object)(Traverse.Create((object)__instance).Field("scannedScrapNum").GetValue<int>() + 1));
}
List<ScanNodeProperties> value = Traverse.Create((object)__instance).Field<List<ScanNodeProperties>>("nodesOnScreen").Value;
if (!value.Contains(node))
{
value.Add(node);
}
if (Traverse.Create((object)__instance).Field("playerPingingScan").GetValue<float>() >= 0f)
{
Traverse.Create((object)__instance).Method("AssignNodeToUIElement", new object[1] { node }).GetValue(new object[1] { node });
}
}
}
}