Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions SubnauticaModSystem/PrawnsuitLightswitch/Config.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
using System;
using SMLHelper.V2.Json;
using SMLHelper.V2.Options;
using SMLHelper.V2.Options.Attributes;

namespace PrawnsuitLightswitch
{
[Serializable]
class Config
{
public bool PrawnsuitLightsUseEnergy = true;
}
[Menu("Prawnsuit Lightswitch")]
public class Config : ConfigFile
{
[Toggle("Lights Use Energy")]
public bool PrawnsuitLightsUseEnergy = true;
}
}
53 changes: 11 additions & 42 deletions SubnauticaModSystem/PrawnsuitLightswitch/Mod.cs
Original file line number Diff line number Diff line change
@@ -1,56 +1,25 @@
using Common.Mod;
using Harmony;
using HarmonyLib;
using BepInEx;
using System;
using System.Reflection;
using SMLHelper.V2.Handlers;

namespace PrawnsuitLightswitch
{
static class Mod
[BepInPlugin(GUID, PluginName, VersionString)]
public class Mod : BaseUnityPlugin
{
public static Config config;

private static string modDirectory;
private const string PluginName = "PrawnsuitLightswitch";
private const string VersionString = "1.0.3";
private const string GUID = "com.PrawnsuitLightswitch.mod";

public static void Patch(string modDirectory = null)
private void Awake()
{
Mod.modDirectory = modDirectory ?? "Subnautica_Data/Managed";
LoadConfig();

HarmonyInstance harmony = HarmonyInstance.Create("com.PrawnsuitLightswitch.mod");
Harmony harmony = new Harmony(GUID);
harmony.PatchAll(Assembly.GetExecutingAssembly());

Logger.Log("Patched");
}

public static string GetModPath()
{
return Environment.CurrentDirectory + "/" + modDirectory;
}

public static string GetAssetPath(string filename)
{
return GetModPath() + "/Assets/" + filename;
}

private static string GetModInfoPath()
{
return GetModPath() + "/mod.json";
}

private static void LoadConfig()
{
config = ModUtils.LoadConfig<Config>(GetModInfoPath());
ValidateConfig();
}

private static void ValidateConfig()
{
Config defaultConfig = new Config();
if (config == null)
{
config = defaultConfig;
return;
}
config = OptionsPanelHandler.Main.RegisterModOptions<Config>();
}
}
}
11 changes: 0 additions & 11 deletions SubnauticaModSystem/PrawnsuitLightswitch/ModLoaderIntegration.cs

This file was deleted.

79 changes: 51 additions & 28 deletions SubnauticaModSystem/PrawnsuitLightswitch/Patches/Exosuit_Patches.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Common.Mod;
using Harmony;
using HarmonyLib;
using System;
using System.Collections;
using System.Collections.Generic;
Expand All @@ -10,16 +10,23 @@

namespace PrawnsuitLightswitch.Patches
{
[HarmonyPatch(typeof(Exosuit))]
[HarmonyPatch("Awake")]
class Exosuit_Awake_Patch
class Exosuit_ToggleLights
{
private static void Postfix(Exosuit __instance)
private static GameObject seamoth;
private static IEnumerator SetupToggle(Exosuit __instance)
{
Logger.Log("Exosuit Awake");
Logger.Log("Setup Lights Toggle Start");
CoroutineTask<GameObject> request = CraftData.GetPrefabForTechTypeAsync(TechType.Seamoth);
yield return request;
seamoth = request.GetResult();
if (seamoth is null)
{
Logger.Log("Couldn't get seamoth prefab");
yield break;
}

var toggleLights = __instance.GetComponent<ToggleLights>();
var seamothPrefab = Resources.Load<GameObject>("WorldEntities/Tools/SeaMoth");
var toggleLightsPrefab = seamothPrefab.GetComponent<SeaMoth>().toggleLights;
var toggleLightsPrefab = seamoth.GetComponent<SeaMoth>().toggleLights;

if (toggleLights == null)
{
Expand All @@ -33,9 +40,21 @@ private static void Postfix(Exosuit __instance)
toggleLights.offSound = toggleLightsPrefab.offSound;
toggleLights.energyPerSecond = toggleLightsPrefab.energyPerSecond;
}

toggleLights.lightsParent = __instance.transform.Find("lights_parent").gameObject;
toggleLights.energyMixin = __instance.GetComponent<EnergyMixin>();
Logger.Log("Setup Lights Toggle Finish");
}

[HarmonyPatch(typeof(Exosuit))]
[HarmonyPatch("Awake")]
class Exosuit_Awake_Patch
{
private static void Postfix(Exosuit __instance)
{
Logger.Log("Exosuit Awake");
__instance.StartCoroutine(SetupToggle(__instance));
}
}
}

Expand Down Expand Up @@ -67,28 +86,32 @@ class Exosuit_UpdateUIText_Patch
{
private static readonly FieldInfo Exosuit_uiStringPrimary = typeof(Exosuit).GetField("uiStringPrimary", BindingFlags.NonPublic | BindingFlags.Instance);
private static readonly FieldInfo Exosuit_rightArm = typeof(Exosuit).GetField("rightArm", BindingFlags.NonPublic | BindingFlags.Instance);
private static readonly FieldInfo Exosuit_leftArm = typeof(Exosuit).GetField("leftArm", BindingFlags.NonPublic | BindingFlags.Instance);
public static GameInput.Button lightsBinding;
private static readonly FieldInfo Exosuit_leftArm = typeof(Exosuit).GetField("leftArm", BindingFlags.NonPublic | BindingFlags.Instance);
public static GameInput.Button lightsBinding;

private static void Postfix(Exosuit __instance)
{
bool hasPropCannon = Exosuit_rightArm.GetValue(__instance) is ExosuitPropulsionArm || Exosuit_leftArm.GetValue(__instance) is ExosuitPropulsionArm;
var toggleLights = __instance.GetComponent<ToggleLights>();
string lightsString = LanguageCache.GetButtonFormat((!toggleLights.lightsActive) ? "Lights On (<color=#ADF8FFFF>{0}</color>)" : "Lights Off (<color=#ADF8FFFF>{0}</color>)", lightsBinding);
string exitString = string.Join("\n", ((string)Exosuit_uiStringPrimary.GetValue(__instance)).Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Take(1).ToArray());
var primaryString = string.Join("\n", ((string)Exosuit_uiStringPrimary.GetValue(__instance)).Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Skip(1).ToArray()) + System.Environment.NewLine + lightsString;
var secondaryString = string.Empty;
if (hasPropCannon)
{
lightsBinding = GameInput.Button.Deconstruct;
secondaryString = exitString;
}
else
{
lightsBinding = GameInput.Button.AltTool;
primaryString = primaryString + System.Environment.NewLine + exitString;
}
HandReticle.main.SetUseTextRaw(primaryString, secondaryString);
bool hasPropCannon = Exosuit_rightArm.GetValue(__instance) is ExosuitPropulsionArm || Exosuit_leftArm.GetValue(__instance) is ExosuitPropulsionArm;
var toggleLights = __instance.GetComponent<ToggleLights>();
if (toggleLights != null)
{
string lightsString = LanguageCache.GetButtonFormat((!toggleLights.lightsActive) ? "Lights On (<color=#ADF8FFFF>{0}</color>)" : "Lights Off (<color=#ADF8FFFF>{0}</color>)", lightsBinding);
string exitString = string.Join("\n", ((string)Exosuit_uiStringPrimary.GetValue(__instance)).Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Take(1).ToArray());
var primaryString = string.Join("\n", ((string)Exosuit_uiStringPrimary.GetValue(__instance)).Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Skip(1).ToArray()) + System.Environment.NewLine + lightsString;
var secondaryString = string.Empty;
if (hasPropCannon)
{
lightsBinding = GameInput.Button.Deconstruct;
secondaryString = exitString;
}
else
{
lightsBinding = GameInput.Button.AltTool;
primaryString = primaryString + System.Environment.NewLine + exitString;
}
HandReticle.main.SetTextRaw(HandReticle.TextType.Use, primaryString);
HandReticle.main.SetTextRaw(HandReticle.TextType.UseSubscript, secondaryString);
}
}
}
}
Loading