using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using Il2CppInterop.Runtime.Injection; using Il2CppInterop.Runtime.InteropTypes; using Microsoft.CodeAnalysis; using SSSGame; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("AskaPrecisionBuilding")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.2.0")] [assembly: AssemblyInformationalVersion("1.0.2+68fe07186b5362ed8ed9228338a768838dbb4a79")] [assembly: AssemblyProduct("AskaPrecisionBuilding")] [assembly: AssemblyTitle("AskaPrecisionBuilding")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.2.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace AskaPrecisionBuilding { [BepInPlugin("AskaPrecisionBuilding", "Aska Precision Building", "1.0.2")] public class Plugin : BasePlugin { internal static ManualLogSource Logger; public override void Load() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown //IL_0092: Unknown result type (might be due to invalid IL or missing references) Logger = ((BasePlugin)this).Log; RotationConfig.Bind(((BasePlugin)this).Config); SnapState.InitFromConfig(); ClassInjector.RegisterTypeInIl2Cpp(); GameObject val = new GameObject("AskaPrecisionBuilding"); Object.DontDestroyOnLoad((Object)val); ((Object)val).hideFlags = (HideFlags)61; RotationController.Instance = val.AddComponent(); ManualLogSource logger = Logger; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(36, 3, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted("Aska Precision Building"); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" v"); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted("1.0.2"); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" loaded. "); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Cycle snap angle with ["); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted(RotationConfig.CycleSnapKey.Value); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("]."); } logger.LogInfo(val2); } } internal static class RotationConfig { internal static readonly int[] SnapAngles = new int[3] { 15, 45, 90 }; internal static ConfigEntry Enabled; internal static ConfigEntry RotateLeftKey; internal static ConfigEntry RotateRightKey; internal static ConfigEntry CycleSnapKey; internal static ConfigEntry StartSnapAngle; internal static ConfigEntry ShowHud; internal static ConfigEntry DebugLogging; internal static void Bind(ConfigFile cfg) { //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Expected O, but got Unknown Enabled = cfg.Bind("General", "Enabled", true, "Master switch for the snap-rotate keys. Aska's normal rotate keys (Q/E) are never touched."); RotateLeftKey = cfg.Bind("Keybinds", "SnapRotateLeft", (KeyCode)276, "Rotate the structure one snap step counter-clockwise (single press)."); RotateRightKey = cfg.Bind("Keybinds", "SnapRotateRight", (KeyCode)275, "Rotate the structure one snap step clockwise (single press)."); CycleSnapKey = cfg.Bind("Keybinds", "CycleSnapAngle", (KeyCode)114, "Cycle the snap step size: 15 -> 45 -> 90 -> 15 ..."); StartSnapAngle = cfg.Bind("General", "StartSnapAngle", 15, new ConfigDescription("Snap step (degrees) selected when the game starts.", (AcceptableValueBase)(object)new AcceptableValueList(SnapAngles), Array.Empty())); ShowHud = cfg.Bind("HUD", "ShowIndicator", true, "Show a small on-screen indicator of the current snap step."); DebugLogging = cfg.Bind("Debug", "VerboseLogging", false, "Log rotation info to the BepInEx console. Useful while tuning; leave off for normal play."); } } public class RotationController : MonoBehaviour { internal static RotationController Instance; private float _flashTimer; private PlayerBuilder _builder; private Preview _preview; public RotationController(IntPtr ptr) : base(ptr) { } private void Update() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_007a: Unknown result type (might be due to invalid IL or missing references) if (!RotationConfig.Enabled.Value) { return; } if (Input.GetKeyDown(RotationConfig.CycleSnapKey.Value)) { SnapState.Cycle(); _flashTimer = 2f; ManualLogSource logger = Plugin.Logger; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(33, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("[PrecisionBuilding] Snap step -> "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(SnapState.Label); } logger.LogInfo(val); } if (Input.GetKeyDown(RotationConfig.RotateLeftKey.Value)) { StepSnap(-1); } if (Input.GetKeyDown(RotationConfig.RotateRightKey.Value)) { StepSnap(1); } if (_flashTimer > 0f) { _flashTimer -= Time.deltaTime; } } private void StepSnap(int dir) { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown try { PlacementTool val = ActiveTool(); if ((Object)(object)val == (Object)null) { return; } float num = ReadAngle(val); if (float.IsNaN(num)) { return; } float num2 = SnapState.CurrentAngle; float num3 = Mathf.Repeat(Mathf.Round(num / num2) * num2 + (float)dir * num2, 360f); WriteAngle(val, num3); RecomputePreview(val); ApplyPreviewYaw(num3); if (RotationConfig.DebugLogging.Value) { ManualLogSource logger = Plugin.Logger; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(32, 4, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("[PrecisionBuilding] Snap "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted((dir > 0) ? "+" : "-"); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted(num2); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("°: "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted(num, "0.#"); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" -> "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted(num3, "0.#"); } logger.LogInfo(val2); } } catch (Exception ex) { Plugin.Logger.LogWarning((object)("[PrecisionBuilding] StepSnap error: " + ex.Message)); } } private PlacementTool ActiveTool() { if ((Object)(object)_builder == (Object)null) { _builder = Object.FindObjectOfType(); } if (!((Object)(object)_builder != (Object)null)) { return null; } return _builder._placementTool; } private static float ReadAngle(PlacementTool tool) { AnchorPointPlacementTool val = ((Il2CppObjectBase)tool).TryCast(); if ((Object)(object)val != (Object)null) { return val._angle; } GridPlacementTool val2 = ((Il2CppObjectBase)tool).TryCast(); if ((Object)(object)val2 != (Object)null) { return val2._angle; } return float.NaN; } private static void WriteAngle(PlacementTool tool, float value) { AnchorPointPlacementTool val = ((Il2CppObjectBase)tool).TryCast(); if ((Object)(object)val != (Object)null) { val._angle = value; return; } GridPlacementTool val2 = ((Il2CppObjectBase)tool).TryCast(); if ((Object)(object)val2 != (Object)null) { val2._angle = value; } } private static void RecomputePreview(PlacementTool tool) { AnchorPointPlacementTool val = ((Il2CppObjectBase)tool).TryCast(); if ((Object)(object)val != (Object)null) { val._ComputeSnappedPosition(); return; } GridPlacementTool val2 = ((Il2CppObjectBase)tool).TryCast(); if ((Object)(object)val2 != (Object)null) { val2._TrySnap(true); } } private void ApplyPreviewYaw(float yaw) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_preview == (Object)null) { _preview = Object.FindObjectOfType(); } if (!((Object)(object)_preview == (Object)null)) { Transform transform = ((Component)_preview).transform; Vector3 eulerAngles = transform.eulerAngles; transform.eulerAngles = new Vector3(eulerAngles.x, yaw, eulerAngles.z); } } private void OnGUI() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_004a: 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) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Expected O, but got Unknown if (RotationConfig.Enabled.Value && (RotationConfig.ShowHud.Value || !(_flashTimer <= 0f))) { Rect val = new Rect(12f, 12f, 190f, 26f); GUIStyle val2 = new GUIStyle(GUI.skin.box) { alignment = (TextAnchor)4, fontSize = 13, fontStyle = (FontStyle)1 }; GUI.Box(val, "Snap Step: " + SnapState.Label, val2); } } } internal static class SnapState { private static int _index; internal static int CurrentAngle => RotationConfig.SnapAngles[_index]; internal static bool Active => RotationConfig.Enabled.Value; internal static string Label => CurrentAngle + "°"; internal static void InitFromConfig() { SetAngle(RotationConfig.StartSnapAngle.Value); } internal static void Cycle() { _index = (_index + 1) % RotationConfig.SnapAngles.Length; } internal static void SetAngle(int degrees) { for (int i = 0; i < RotationConfig.SnapAngles.Length; i++) { if (RotationConfig.SnapAngles[i] == degrees) { _index = i; return; } } _index = 0; } } public static class MyPluginInfo { public const string PLUGIN_GUID = "AskaPrecisionBuilding"; public const string PLUGIN_NAME = "Aska Precision Building"; public const string PLUGIN_VERSION = "1.0.2"; } }