From ea6e998280a5c66a3ec20669ad5906be4721711a Mon Sep 17 00:00:00 2001 From: OverkillSD Date: Sat, 17 Jun 2023 20:46:27 -0700 Subject: [PATCH] feat: Updated for patch 0.216.9 and added keybind config --- OCDheim/Keybindings.cs | 35 +++++++++++++--- OCDheim/OCDheim.cs | 26 +++++++++++- OCDheim/OCDheim.csproj | 63 ++++++++++++++++++++++++++--- OCDheim/PreciseBuildPieceSnapper.cs | 13 +++++- OCDheim/Visualization/HoverInfo.cs | 2 +- OCDheim/app.config | 16 ++++---- OCDheim/packages.config | 2 + environment.props | 2 +- environment.props.bak | 9 +++++ 9 files changed, 145 insertions(+), 23 deletions(-) create mode 100644 environment.props.bak diff --git a/OCDheim/Keybindings.cs b/OCDheim/Keybindings.cs index 57a3fdf..8e5c514 100755 --- a/OCDheim/Keybindings.cs +++ b/OCDheim/Keybindings.cs @@ -4,7 +4,7 @@ namespace OCDheim { [HarmonyPatch(typeof(ZInput), "Load")] - public static class Keybindings + public class Keybindings { public const string GridMode = "GridMode"; public const string NoSnapMode = "AltPlace"; @@ -32,25 +32,50 @@ public static class Keybindings public static bool SnapModeEnabled { get { return !ZInput.GetButton(NoSnapMode) && !ZInput.GetButton(JoyNoSnapMode); } } public static bool SnapModeDisabled { get { return !SnapModeEnabled; } } + public static KeyCode PrecisionModeKeycode; + public static KeyCode PrecisionModeJoycode; + public static KeyCode GridModeKeycode; + public static KeyCode GridModeJoycode; + public static ZInput ZInstance; + public static void Postfix(ZInput __instance) { - __instance.AddButton(PrecisionMode, KeyCode.Z); - __instance.AddButton(GridMode, KeyCode.LeftAlt); - __instance.AddButton(JoyGridMode, KeyCode.JoystickButton5); - __instance.AddButton(JoyPrecisionMode, KeyCode.JoystickButton2); + ZInstance = __instance; + __instance.AddButton(PrecisionMode, OCDheim.configPrecisionModeKeybind.Value.MainKey); + __instance.AddButton(JoyPrecisionMode, OCDheim.configPrecisionModeJoybind.Value.MainKey); + __instance.AddButton(GridMode, OCDheim.configGridModeKeybind.Value.MainKey); + __instance.AddButton(JoyGridMode, OCDheim.configGridModeJoybind.Value.MainKey); } public static void Refresh() { + if ( + ZInstance.GetButtonDef(PrecisionMode).m_key != OCDheim.configPrecisionModeKeybind.Value.MainKey + || ZInstance.GetButtonDef(JoyPrecisionMode).m_key != OCDheim.configPrecisionModeJoybind.Value.MainKey + || ZInstance.GetButtonDef(GridMode).m_key != OCDheim.configGridModeKeybind.Value.MainKey + || ZInstance.GetButtonDef(JoyGridMode).m_key != OCDheim.configGridModeJoybind.Value.MainKey + ) + { + Debug.Log("Keybind change detected, updating to use new value"); + ZInstance.Setbutton(PrecisionMode, OCDheim.configPrecisionModeKeybind.Value.MainKey); + ZInstance.Setbutton(JoyPrecisionMode, OCDheim.configPrecisionModeJoybind.Value.MainKey); + ZInstance.Setbutton(GridMode, OCDheim.configGridModeKeybind.Value.MainKey); + ZInstance.Setbutton(JoyGridMode, OCDheim.configGridModeJoybind.Value.MainKey); + } + if (ZInput.GetButtonDown(GridMode) || ZInput.GetButtonDown(JoyGridMode)) { GridModeEnabled = !GridModeEnabled; gridModeFreshlyEnabled = GridModeEnabled; gridModeFreshlyDisabled = GridModeDisabled; + Debug.Log("Grid Mode Toggle: " + GridModeEnabled); + Player.m_localPlayer.Message(MessageHud.MessageType.TopLeft,"Grid Mode: " + GridModeEnabled); } if (ZInput.GetButtonDown(PrecisionMode) || ZInput.GetButtonDown(JoyPrecisionMode)) { PrecisionModeEnabled = !PrecisionModeEnabled; + Debug.Log("Precision Mode Toggle: " + PrecisionModeEnabled); + Player.m_localPlayer.Message(MessageHud.MessageType.TopLeft, "Precision Mode: " + PrecisionModeEnabled); } } diff --git a/OCDheim/OCDheim.cs b/OCDheim/OCDheim.cs index ddd031e..554678c 100755 --- a/OCDheim/OCDheim.cs +++ b/OCDheim/OCDheim.cs @@ -1,4 +1,5 @@ using BepInEx; +using BepInEx.Configuration; using HarmonyLib; using Jotunn.Configs; using Jotunn.Entities; @@ -10,7 +11,7 @@ namespace OCDheim { [BepInDependency(Jotunn.Main.ModGuid)] - [BepInPlugin("dymek.dev.OCDheim", "OCDheim", "0.1.2")] + [BepInPlugin("dymek.dev.OCDheim", "OCDheim", "0.1.4")] [NetworkCompatibility(CompatibilityLevel.EveryoneMustHaveMod, VersionStrictness.Minor)] public class OCDheim : BaseUnityPlugin { @@ -21,15 +22,30 @@ public class OCDheim : BaseUnityPlugin private Harmony harmony { get; } = new Harmony("dymek.OCDheim"); private static OCDheim ocdheim { get; set; } + public static ConfigEntry configPrecisionModeKeybind; + public static ConfigEntry configPrecisionModeJoybind; + public static ConfigEntry configGridModeKeybind; + public static ConfigEntry configGridModeJoybind; + + private void OCDHeimCreateConfigValues() + { + configPrecisionModeKeybind = Config.Bind("Keybinds", "PrecisionModeKeybind", new KeyboardShortcut(KeyCode.Z), "The keyboard binding for Precision Mode"); + configPrecisionModeJoybind = Config.Bind("Keybinds", "PrecisionModeJoybind", new KeyboardShortcut(KeyCode.JoystickButton2), "The joystick binding for Precision Mode"); + configGridModeKeybind = Config.Bind("Keybinds", "GridModeKeybind", new KeyboardShortcut(KeyCode.LeftAlt), "The keyboard binding for Grid Mode"); + configGridModeJoybind = Config.Bind("Keybinds", "GridModeJoybind", new KeyboardShortcut(KeyCode.JoystickButton5), "The joystick binding for Grid Mode"); + } + public static Texture2D LoadTextureFromDisk(string fileName) => AssetUtils.LoadTexture(Path.Combine(Path.GetDirectoryName(ocdheim.Info.Location), fileName)); public void Awake() { ocdheim = this; harmony.PatchAll(); + OCDHeimCreateConfigValues(); PrefabManager.OnVanillaPrefabsAvailable += AddOCDheimToolPieces; PrefabManager.OnVanillaPrefabsAvailable += AddOCDheimBuildPieces; PrefabManager.OnVanillaPrefabsAvailable += ModVanillaValheimTools; + } private void AddOCDheimToolPieces() @@ -41,6 +57,10 @@ private void AddOCDheimToolPieces() private void AddToolPiece(string pieceName, string basePieceName, string pieceTable, Texture2D iconTexture, bool level = false, bool raise = false, bool smooth = false, bool paint = false) where TOverlayVisualizer: OverlayVisualizer { + var pieceExists = PieceManager.Instance.GetPiece(pieceName) != null; + if (pieceExists) + return; + var pieceIcon = Sprite.Create(iconTexture, new Rect(0, 0, iconTexture.width, iconTexture.height), Vector2.zero); var piece = new CustomPiece(pieceName, basePieceName, new PieceConfig { @@ -71,6 +91,10 @@ private void AddOCDheimBuildPieces() private void AddBrickBuildPiece(string brickSuffix, Vector3 brickScale, int brickPrice, Texture2D iconTexture) { + var pieceExists = PieceManager.Instance.GetPiece($"stone_floor_{brickSuffix}") != null; + if (pieceExists) + return; + var brick = PrefabManager.Instance.CreateClonedPrefab($"stone_floor_{brickSuffix}", "stone_floor_2x2"); var brickIcon = Sprite.Create(iconTexture, new Rect(0, 0, iconTexture.width, iconTexture.height), Vector2.zero); brick.transform.localScale = brickScale; diff --git a/OCDheim/OCDheim.csproj b/OCDheim/OCDheim.csproj index 6d51f5a..76df48d 100755 --- a/OCDheim/OCDheim.csproj +++ b/OCDheim/OCDheim.csproj @@ -23,7 +23,7 @@ bin\Debug\ DEBUG;TRACE prompt - 4 + 0 false false @@ -34,7 +34,7 @@ prompt - 4 + 0 false false @@ -45,11 +45,32 @@ $(VALHEIM_INSTALL) - - ..\packages\HarmonyX.2.10.1\lib\net45\0Harmony.dll + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\BepInEx\core\0Harmony.dll - - ..\packages\JotunnLib.2.10.0\lib\net462\Jotunn.dll + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\valheim_Data\Managed\assembly_utils.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\valheim_Data\Managed\publicized_assemblies\assembly_utils_publicized.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\valheim_Data\Managed\assembly_valheim.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\valheim_Data\Managed\publicized_assemblies\assembly_valheim_publicized.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\BepInEx\core\BepInEx.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\BepInEx\core\BepInEx.Harmony.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\BepInEx\core\BepInEx.Preloader.dll + + + D:\ValheimMods\Jotunn\Jotunn.dll ..\packages\Mono.Cecil.0.11.4\lib\net40\Mono.Cecil.dll @@ -74,11 +95,41 @@ + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\Unity.5.11.10\lib\net48\Unity.Abstractions.dll + + + ..\packages\Unity.5.11.10\lib\net48\Unity.Container.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\unstripped_corlib\UnityEngine.dll + + + ..\..\..\..\..\..\steam\steamapps\common\Valheim\unstripped_corlib\UnityEngine.AssetBundleModule.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\unstripped_corlib\UnityEngine.CoreModule.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\unstripped_corlib\UnityEngine.InputLegacyModule.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\unstripped_corlib\UnityEngine.ParticleSystemModule.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\unstripped_corlib\UnityEngine.PhysicsModule.dll + + + ..\..\..\..\..\..\Steam\steamapps\common\Valheim\unstripped_corlib\UnityEngine.TextRenderingModule.dll + diff --git a/OCDheim/PreciseBuildPieceSnapper.cs b/OCDheim/PreciseBuildPieceSnapper.cs index d64b9e5..54c8293 100755 --- a/OCDheim/PreciseBuildPieceSnapper.cs +++ b/OCDheim/PreciseBuildPieceSnapper.cs @@ -38,6 +38,17 @@ public static void Postfix(bool flashGuardStone, Player __instance, GameObject _ } } + public static void GetAllPiecesInRadius(Vector3 p, float radius, List pieces) + { + if (Piece.s_ghostLayer == 0) + Piece.s_ghostLayer = LayerMask.NameToLayer("ghost"); + foreach (Piece allPiece in Piece.s_allPieces) + { + if (allPiece.gameObject.layer != Piece.s_ghostLayer && (double)Vector3.Distance(p, allPiece.transform.position) < (double)radius) + pieces.Add(allPiece); + } + } + private static void SnapToNeighbourPiece(Piece buildPiece, int layerMask) { var playerPoV = DeterminePlayerPoV(layerMask); @@ -114,7 +125,7 @@ private static List FindNeighbourPieces(Vector3 playerPoV) { neighbourPieces.Clear(); snappableNeighbourPieces.Clear(); - Piece.GetAllPiecesInRadius(playerPoV, NeighbourhoodSize, neighbourPieces); + GetAllPiecesInRadius(playerPoV, NeighbourhoodSize, neighbourPieces); foreach (var neighbourPiece in neighbourPieces) { if (neighbourPiece.IsSnappablePiece()) diff --git a/OCDheim/Visualization/HoverInfo.cs b/OCDheim/Visualization/HoverInfo.cs index 064d5ca..7fd4d63 100755 --- a/OCDheim/Visualization/HoverInfo.cs +++ b/OCDheim/Visualization/HoverInfo.cs @@ -28,7 +28,7 @@ public HoverInfo(Transform parentTransform) public void RotateToPlayer() { - var playerXAxisDirection = new Vector3(GameCamera.m_instance.transform.position.x, transform.position.y, GameCamera.m_instance.transform.position.z); + var playerXAxisDirection = new Vector3(GameCamera.instance.transform.position.x, transform.position.y, GameCamera.instance.transform.position.z); transform.LookAt(playerXAxisDirection, Vector3.up); transform.Rotate(90f, 180f, 0f); } diff --git a/OCDheim/app.config b/OCDheim/app.config index 79bfcc7..4ff7193 100755 --- a/OCDheim/app.config +++ b/OCDheim/app.config @@ -1,19 +1,19 @@ - + - - + + - - + + - - + + - + diff --git a/OCDheim/packages.config b/OCDheim/packages.config index a98c99a..8217046 100755 --- a/OCDheim/packages.config +++ b/OCDheim/packages.config @@ -6,4 +6,6 @@ + + \ No newline at end of file diff --git a/environment.props b/environment.props index d079cec..ad08307 100755 --- a/environment.props +++ b/environment.props @@ -2,7 +2,7 @@ - C:\Program Files (x86)\Steam\steamapps\common\Valheim + C:\steam\steamapps\common\Valheim $(VALHEIM_INSTALL)\BepInEx\plugins diff --git a/environment.props.bak b/environment.props.bak new file mode 100644 index 0000000..d079cec --- /dev/null +++ b/environment.props.bak @@ -0,0 +1,9 @@ + + + + + C:\Program Files (x86)\Steam\steamapps\common\Valheim + + $(VALHEIM_INSTALL)\BepInEx\plugins + +