using System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BaboonAPI.Hooks.Initializer; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using TootTallyCore; using TootTallyCore.Utils.TootTallyModules; using TootTallySettings; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("JudgementCounter")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Real Time Hit Note Judgement Counter")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+9254ad9336e356ba83d8ce136c173bbc8d8c4ed0")] [assembly: AssemblyProduct("JudgementCounter")] [assembly: AssemblyTitle("JudgementCounter")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.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 JudgementCounter { public static class JudgementCounterManager { public enum DisplayPosition { BottomLeft, TopLeft } private static GameObject _uiholder; private static Text _judgmentLabels; private static Text[] _counterRows = (Text[])(object)new Text[5]; [HarmonyPatch(typeof(GameController), "doScoreText")] [HarmonyPostfix] private static void DoScorePatch(GameController __instance) { if (Plugin.Instance.ModuleConfigEnabled.Value && !((Object)(object)_counterRows[0] == (Object)null)) { UpdateCounterText(0, __instance.scores_A); UpdateCounterText(1, __instance.scores_B); UpdateCounterText(2, __instance.scores_C); UpdateCounterText(3, __instance.scores_D); UpdateCounterText(4, __instance.scores_F); } } private static void UpdateCounterText(int index, int scoreValue) { string text = scoreValue.ToString(); _counterRows[index].text = text; if (text.Length >= 4) { _counterRows[index].fontSize = 12; } else { _counterRows[index].fontSize = 13; } } [HarmonyPatch(typeof(GameController), "Start")] [HarmonyPostfix] private static void OnGameControllerStart(GameController __instance) { //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_0302: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_0319: Unknown result type (might be due to invalid IL or missing references) //IL_0331: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) _uiholder = GameObject.Find("GameplayCanvas/UIHolder"); if (!((Object)(object)_uiholder == (Object)null)) { float num = 13f; DisplayPosition value = Plugin.Instance.DisplayPosition.Value; if (1 == 0) { } (float, float, float, float) tuple = ((value != DisplayPosition.BottomLeft) ? (0.0175f, 0.89f, 0.03f, 0.996f) : (0.0175f, 0.01f, 0.03f, 0.116f)); if (1 == 0) { } (float, float, float, float) tuple2 = tuple; float item = tuple2.Item1; float item2 = tuple2.Item2; float item3 = tuple2.Item3; float item4 = tuple2.Item4; string text = ColorUtility.ToHtmlStringRGBA(Plugin.Instance.ColorPerfect.Value); string text2 = ColorUtility.ToHtmlStringRGBA(Plugin.Instance.ColorNice.Value); string text3 = ColorUtility.ToHtmlStringRGBA(Plugin.Instance.ColorOk.Value); string text4 = ColorUtility.ToHtmlStringRGBA(Plugin.Instance.ColorMeh.Value); string text5 = ColorUtility.ToHtmlStringRGBA(Plugin.Instance.ColorNasty.Value); _judgmentLabels = Object.Instantiate(__instance.ui_score, _uiholder.transform); ((Object)_judgmentLabels).name = "JudgmentLabels"; _judgmentLabels.supportRichText = true; _judgmentLabels.fontSize = 13; _judgmentLabels.alignment = (TextAnchor)0; _judgmentLabels.horizontalOverflow = (HorizontalWrapMode)1; _judgmentLabels.text = "P\nN\nO\nM\nX"; RectTransform component = ((Component)_judgmentLabels).GetComponent(); component.anchorMax = new Vector2(item, item2); component.anchorMin = new Vector2(item, item2); component.pivot = Vector2.one * 0.5f; component.anchoredPosition = Vector2.zero; component.sizeDelta = new Vector2(50f, 100f); for (int i = 0; i < 5; i++) { _counterRows[i] = Object.Instantiate(__instance.ui_score, _uiholder.transform); ((Object)_counterRows[i]).name = $"JudgmentCounter_{i}"; _counterRows[i].fontSize = 13; _counterRows[i].alignment = (TextAnchor)3; _counterRows[i].text = "0"; _counterRows[i].horizontalOverflow = (HorizontalWrapMode)1; _counterRows[i].verticalOverflow = (VerticalWrapMode)1; _counterRows[i].resizeTextForBestFit = false; RectTransform component2 = ((Component)_counterRows[i]).GetComponent(); component2.anchorMax = new Vector2(item3, item4); component2.anchorMin = new Vector2(item3, item4); component2.pivot = Vector2.one * 0.5f; component2.anchoredPosition = new Vector2(0f, 0f - (float)i * num); component2.sizeDelta = new Vector2(40f, 15f); } } } [HarmonyPatch(typeof(GameController), "Update")] [HarmonyPostfix] private static void Postfix(GameController __instance) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 if ((int)__instance.musictrack_status != 2) { return; } if ((Object)(object)_judgmentLabels != (Object)null) { Object.Destroy((Object)(object)((Component)_judgmentLabels).gameObject); } for (int i = 0; i < 5; i++) { if ((Object)(object)_counterRows[i] != (Object)null) { Object.Destroy((Object)(object)((Component)_counterRows[i]).gameObject); } _counterRows[i] = null; } _judgmentLabels = null; _uiholder = null; } } [BepInPlugin("JudgementCounter", "JudgementCounter", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin, ITootTallyModule { public static Plugin Instance; private const string CONFIG_NAME = "JudgementCounter.cfg"; private Harmony _harmony; public static TootTallySettingPage settingPage; public ConfigEntry ModuleConfigEnabled { get; set; } public bool IsConfigInitialized { get; set; } public ConfigEntry DisplayPosition { get; set; } public ConfigEntry ColorPerfect { get; set; } public ConfigEntry ColorNice { get; set; } public ConfigEntry ColorOk { get; set; } public ConfigEntry ColorMeh { get; set; } public ConfigEntry ColorNasty { get; set; } public string Name { get { return "JudgementCounter"; } set { Name = value; } } public static void LogInfo(string msg) { ((BaseUnityPlugin)Instance).Logger.LogInfo((object)msg); } public static void LogError(string msg) { ((BaseUnityPlugin)Instance).Logger.LogError((object)msg); } private void Awake() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown if (!((Object)(object)Instance != (Object)null)) { Instance = this; _harmony = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); GameInitializationEvent.Register(((BaseUnityPlugin)this).Info, (Action)TryInitialize); } } private void TryInitialize() { ModuleConfigEnabled = ((BaseUnityPlugin)Plugin.Instance).Config.Bind("Modules", "Judgement Counter", true, "Displays a live hit note window overlay during gameplay."); TootTallyModuleManager.AddModule((ITootTallyModule)(object)this); Plugin.Instance.AddModuleToSettingPage((ITootTallyModule)(object)this); } public void LoadModule() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0093: 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) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) string text = Path.Combine(Paths.BepInExRootPath, "config/"); ConfigFile val = new ConfigFile(text + "JudgementCounter.cfg", true) { SaveOnConfigSet = true }; DisplayPosition = val.Bind("Settings", "DisplayPosition", JudgementCounterManager.DisplayPosition.TopLeft, "Judgement Display Position."); ColorPerfect = val.Bind("Hex Colors", "Perfecto Color", new Color(0f, 1f, 1f), "Hex for Perfectos."); ColorNice = val.Bind("Hex Colors", "Nice Color", new Color(0f, 1f, 0f), "Hex for Nices."); ColorOk = val.Bind("Hex Colors", "OK Color", new Color(1f, 1f, 0f), "Hex for OKs."); ColorMeh = val.Bind("Hex Colors", "Meh Color", new Color(1f, 0.5f, 0f), "Hex for Mehs."); ColorNasty = val.Bind("Hex Colors", "Nasty Color", new Color(1f, 0f, 0f), "Hex for Nastys."); settingPage = TootTallySettingsManager.AddNewPage("Judgement Counter", "Judgement Counter", 40f, new Color(0f, 0f, 0f, 0f)); if (settingPage != null) { settingPage.AddLabel("Display Position", (FontStyles)0, (TextAlignmentOptions)4097); settingPage.AddDropdown("Display Position", (ConfigEntryBase)(object)DisplayPosition); settingPage.AddLabel("Perfecto Color Hex", (FontStyles)0, (TextAlignmentOptions)4097); settingPage.AddColorSliders("Perfecto Color", "Perfecto Color", ColorPerfect); settingPage.AddLabel("Nice Color Hex", (FontStyles)0, (TextAlignmentOptions)4097); settingPage.AddColorSliders("Nice Color Hex", "Nice Color", ColorNice); settingPage.AddLabel("OK Color Hex", (FontStyles)0, (TextAlignmentOptions)4097); settingPage.AddColorSliders("OK Color Hex", "OK Color", ColorOk); settingPage.AddLabel("Meh Color Hex", (FontStyles)0, (TextAlignmentOptions)4097); settingPage.AddColorSliders("Meh Color Hex", "Meh Color", ColorMeh); settingPage.AddLabel("Nasty Color Hex", (FontStyles)0, (TextAlignmentOptions)4097); settingPage.AddColorSliders("Nasty Color Hex", "Nasty Color", ColorNasty); } _harmony.PatchAll(typeof(JudgementCounterManager)); LogInfo("Module loaded!"); } public void UnloadModule() { _harmony.UnpatchSelf(); TootTallySettingPage obj = settingPage; if (obj != null) { obj.Remove(); } LogInfo("Module unloaded!"); } } public static class PluginInfo { public const string PLUGIN_GUID = "JudgementCounter"; public const string PLUGIN_NAME = "JudgementCounter"; public const string PLUGIN_VERSION = "1.0.0"; } }