diff --git a/dist/1.4/Assemblies/RimRPC.dll b/dist/1.4/Assemblies/RimRPC.dll new file mode 100644 index 0000000..f2d962d Binary files /dev/null and b/dist/1.4/Assemblies/RimRPC.dll differ diff --git a/dist/About/About.xml b/dist/About/About.xml index abc0a8d..01aebe9 100644 --- a/dist/About/About.xml +++ b/dist/About/About.xml @@ -1,15 +1,19 @@ + - RimRPC - RichPresence - Weilbyte - -
  • 1.0
  • -
  • 1.1
  • -
  • 1.2
  • -
  • 1.3
  • -
    - Discord Rich Presence for RimWorld! - 1.2 support is here! - - weilbyte.rimrpc -
    + RimRPC - RichPresence + Weilbyte + +
  • 1.0
  • +
  • 1.1
  • +
  • 1.2
  • +
  • 1.3
  • +
  • 1.4
  • +
    + + Discord Rich Presence for RimWorld! + 1.4 support is here! + + https://github.com/Weilbyte/RWRichPresence + weilbyte.rimrpc + \ No newline at end of file diff --git a/dist/About/LoadFolders.xml b/dist/About/LoadFolders.xml index d745f7a..1cac042 100644 --- a/dist/About/LoadFolders.xml +++ b/dist/About/LoadFolders.xml @@ -1,11 +1,14 @@ - - -
  • 1.1
  • -
    - -
  • 1.2
  • -
    - -
  • 1.3
  • -
    -
    \ No newline at end of file + + +
  • 1.1
  • +
    + +
  • 1.2
  • +
    + +
  • 1.3
  • +
    + +
  • 1.4
  • +
    +
    \ No newline at end of file diff --git a/dist/Languages/English/Keyed/RimRPC.xml b/dist/Languages/English/Keyed/RimRPC.xml index cabd562..2f95d2c 100644 --- a/dist/Languages/English/Keyed/RimRPC.xml +++ b/dist/Languages/English/Keyed/RimRPC.xml @@ -3,6 +3,7 @@ RimRPC Colony name Colonist count + Current biome Current year Shorten year text Current quadrum @@ -10,8 +11,17 @@ Hour of current day Game session length (Requires restart) Manually update presence + Custom text (Top) Custom text (Bottom) Text Text + + Main Menu + Day + Colonists + h + Year + y + Playing! diff --git a/dist/Languages/Russian/Keyed/RimRPC.xml b/dist/Languages/Russian/Keyed/RimRPC.xml new file mode 100644 index 0000000..f7dfa82 --- /dev/null +++ b/dist/Languages/Russian/Keyed/RimRPC.xml @@ -0,0 +1,28 @@ + + + RimRPC + Отображение названия колонии + Отоброжение количества колонистов + Отображение биома + Отображение года + Сокращать отображение года + Отображение квадрума + Отображение дня + Отображение часа + Длина игровой сессии (Требуется рестарт) + Принудительное обновление RPC + + Произвольный текст (Вверх) + Произвольный текст (Низ) + Текст + Текст + + В главном меню + День + Биом + колонистов + ч + Год + г + Играю! + diff --git a/src/Details.cs b/src/Details.cs new file mode 100644 index 0000000..c68aad1 --- /dev/null +++ b/src/Details.cs @@ -0,0 +1,32 @@ +using Verse; + +namespace RimRPC +{ + internal class Details + { + public static string GetDetails(string[] args) + { + var _colonyname = args[0]; + var _colonistnumber = args[1]; + + if (RWRPCMod.Settings.RpcCustomTop) + return RWRPCMod.Settings.RpcCustomTopText; + + if (RWRPCMod.Settings.RpcColony) + { + if (RWRPCMod.Settings.RpcColonistCount) + { + return _colonyname + " (" + _colonistnumber + ")"; + } + return _colonyname; + } + + if (RWRPCMod.Settings.RpcColonistCount) + { + return _colonistnumber + " RPC_Colonists".Translate(); + } + + return null; + } + } +} diff --git a/src/DiscordRPC.cs b/src/DiscordRPC.cs index de2d6b0..7127352 100644 --- a/src/DiscordRPC.cs +++ b/src/DiscordRPC.cs @@ -5,7 +5,6 @@ namespace RimRPC { internal class DiscordRPC { - //DLL Imports here. Make sure the discord-rpc.dll is in the game's mono folder or else the game will crash. [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void ReadyCallback(); @@ -22,65 +21,44 @@ internal class DiscordRPC public delegate void SpectateCallback(string secret); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void RequestCallback(DiscordRPC.JoinRequest request); + public delegate void RequestCallback(JoinRequest request); public struct EventHandlers { - public DiscordRPC.ReadyCallback readyCallback; - - public DiscordRPC.DisconnectedCallback disconnectedCallback; - - public DiscordRPC.ErrorCallback errorCallback; - - public DiscordRPC.JoinCallback joinCallback; - - public DiscordRPC.SpectateCallback spectateCallback; - - public DiscordRPC.RequestCallback requestCallback; + public ReadyCallback ReadyCallback; + public DisconnectedCallback DisconnectedCallback; + public ErrorCallback ErrorCallback; + public JoinCallback JoinCallback; + public SpectateCallback SpectateCallback; + public RequestCallback RequestCallback; } [Serializable] public struct RichPresence { - public string state; - - public string details; - - public long startTimestamp; - - public long endTimestamp; - - public string largeImageKey; - - public string largeImageText; - - public string smallImageKey; - - public string smallImageText; - - public string partyId; - - public int partySize; - - public int partyMax; - - public string matchSecret; - - public string joinSecret; - - public string spectateSecret; - - public bool instance; + public string State; + public string Details; + public long StartTimestamp; + public long EndTimestamp; + public string LargeImageKey; + public string LargeImageText; + public string SmallImageKey; + public string SmallImageText; + public string PartyId; + public int PartySize; + public int PartyMax; + public string MatchSecret; + public string JoinSecret; + public string SpectateSecret; + public bool Instance; } [Serializable] public struct JoinRequest { - public string userId; - - public string username; - - public string avatar; + public string UserId; + public string Username; + public string Avatar; } public enum Reply @@ -91,7 +69,7 @@ public enum Reply } [DllImport("0discord-rpc", CallingConvention = CallingConvention.Cdecl, EntryPoint = "Discord_Initialize")] - public static extern void Initialize(string applicationId, ref DiscordRPC.EventHandlers handlers, bool autoRegister, string optionalSteamId); + public static extern void Initialize(string applicationId, ref EventHandlers handlers, bool autoRegister, string optionalSteamId); [DllImport("0discord-rpc", CallingConvention = CallingConvention.Cdecl, EntryPoint = "Discord_Shutdown")] public static extern void Shutdown(); @@ -100,9 +78,9 @@ public enum Reply public static extern void RunCallbacks(); [DllImport("0discord-rpc", CallingConvention = CallingConvention.Cdecl, EntryPoint = "Discord_UpdatePresence")] - public static extern void UpdatePresence(ref DiscordRPC.RichPresence presence); + public static extern void UpdatePresence(ref RichPresence presence); [DllImport("0discord-rpc", CallingConvention = CallingConvention.Cdecl, EntryPoint = "Discord_Respond")] - public static extern void Respond(string userId, DiscordRPC.Reply reply); + public static extern void Respond(string userId, Reply reply); } } \ No newline at end of file diff --git a/src/MapCompHandler.cs b/src/MapCompHandler.cs index 09ec352..0873fb2 100644 --- a/src/MapCompHandler.cs +++ b/src/MapCompHandler.cs @@ -4,7 +4,7 @@ namespace RimRPC { internal class MapCompHandler : MapComponent { - private int cooldown = 0; + private int _cooldown; public MapCompHandler(Map map) : base(map) { @@ -13,12 +13,14 @@ public MapCompHandler(Map map) : base(map) public override void MapComponentTick() { - cooldown = cooldown + 1; - if (cooldown > 1250) //Update is called every 1250 ticks (Twice an in-game hour, or every 20.5 seconds real-time) + _cooldown++; + + if (_cooldown > 1250) //Update is called every 1250 ticks (Twice an in-game hour, or every 20.5 seconds real-time) { StateHandler.PushState(map); - cooldown = 0; + _cooldown = 0; } + base.MapComponentTick(); } } diff --git a/src/MapCompInjector.cs b/src/MapCompInjector.cs index 72a7245..f981d4e 100644 --- a/src/MapCompInjector.cs +++ b/src/MapCompInjector.cs @@ -9,19 +9,14 @@ internal class MapCompInjector : MonoBehaviour public void FixedUpdate() { if (Current.ProgramState != ProgramState.Playing) - { return; - } - else - { - foreach (var map in Find.Maps.Where(m => m.GetComponent() == null)) - { - map.components.Add(new MapCompHandler(map)); - Log.Message("RichPresence :: Injected handler to existing map!"); - } - Destroy(this); + foreach (var map in Find.Maps.Where(m => m.GetComponent() == null)) + { + map.components.Add(new MapCompHandler(map)); } + + Destroy(this); } } } \ No newline at end of file diff --git a/src/ModSettings.cs b/src/ModSettings.cs index 3ee8638..78209b6 100644 --- a/src/ModSettings.cs +++ b/src/ModSettings.cs @@ -3,86 +3,100 @@ namespace RimRPC { - class RWRPCSettings : ModSettings + class RwrpcSettings : ModSettings { #region variables - public bool RPC_Colony = true; - public bool RPC_ColonistCount = false; - public bool RPC_Year = false; - public bool RPC_YearShort = true; - public bool RPC_Quadrum = true; - public bool RPC_Day = true; - public bool RPC_Hour = true; - public bool RPC_Time = true; - public bool RPC_CustomTop = false; - public bool RPC_CustomBottom = false; - public string RPC_CustomTopText = "OwO"; - public string RPC_CustomBottomText = "*nuzzles u*"; + public bool RpcColony = true; + public bool RpcColonistCount; + public bool RpcYear; + public bool RpcYearShort = true; + public bool RpcQuadrum = true; + public bool RpcDay = true; + public bool RpcHour = true; + public bool RpcTime = true; + public bool RpcBiome; + public bool RpcCustomTop; + public bool RpcCustomBottom; + public string RpcCustomTopText = "Example"; + public string RpcCustomBottomText = "Example"; #endregion public override void ExposeData() { base.ExposeData(); - Scribe_Values.Look(ref this.RPC_Colony, "RPC_Colony", true); - Scribe_Values.Look(ref this.RPC_ColonistCount, "RPC_ColonistCount", false); - Scribe_Values.Look(ref this.RPC_Year, "RPC_Year", false); - Scribe_Values.Look(ref this.RPC_YearShort, "RPC_YearShort", true); - Scribe_Values.Look(ref this.RPC_Quadrum, "RPC_Quadrum", true); - Scribe_Values.Look(ref this.RPC_Day, "RPC_Day", true); - Scribe_Values.Look(ref this.RPC_Hour, "RPC_Hour", true); - Scribe_Values.Look(ref this.RPC_Time, "RPC_Time", true); - Scribe_Values.Look(ref this.RPC_CustomTop, "RPC_CustomTop", false); - Scribe_Values.Look(ref this.RPC_CustomTop, "RPC_CustomBottom", false); - Scribe_Values.Look(ref this.RPC_CustomTopText, "RPC_CustomTopText", "OwO"); - Scribe_Values.Look(ref this.RPC_CustomTopText, "RPC_CustomBottomText", "*nuzzles u*"); + + Scribe_Values.Look(ref RpcColony, "RPC_Colony", true); + Scribe_Values.Look(ref RpcColonistCount, "RPC_ColonistCount"); + Scribe_Values.Look(ref RpcBiome, "RPC_Biome"); + Scribe_Values.Look(ref RpcYear, "RPC_Year"); + Scribe_Values.Look(ref RpcYearShort, "RPC_YearShort", true); + Scribe_Values.Look(ref RpcQuadrum, "RPC_Quadrum", true); + Scribe_Values.Look(ref RpcDay, "RPC_Day", true); + Scribe_Values.Look(ref RpcHour, "RPC_Hour", true); + Scribe_Values.Look(ref RpcTime, "RPC_Time", true); + Scribe_Values.Look(ref RpcCustomTop, "RPC_CustomTop"); + Scribe_Values.Look(ref RpcCustomTop, "RPC_CustomBottom"); + Scribe_Values.Look(ref RpcCustomTopText, "RPC_CustomTopText", "Example"); + Scribe_Values.Look(ref RpcCustomTopText, "RPC_CustomBottomText", "*Example"); } } class RWRPCMod : Mod { - public static RWRPCSettings settings; + public static RwrpcSettings Settings; public RWRPCMod(ModContentPack content) : base(content) { - settings = GetSettings(); + Settings = GetSettings(); } public override string SettingsCategory() => "RPC_CategoryLabel".Translate(); public override void DoSettingsWindowContents(Rect inRect) { - Listing_Standard listing_Standard = new Listing_Standard(); - listing_Standard.Begin(inRect); + Listing_Standard listingStandard = new Listing_Standard(); + listingStandard.Begin(inRect); + //Default settings - listing_Standard.CheckboxLabeled("RPC_ColonyLabel".Translate() + " ", ref settings.RPC_Colony); - listing_Standard.CheckboxLabeled("RPC_ColonistCountLabel".Translate() + " ", ref settings.RPC_ColonistCount); - listing_Standard.CheckboxLabeled("RPC_YearLabel".Translate() + " ", ref settings.RPC_Year); - listing_Standard.CheckboxLabeled("RPC_YearShortLabel".Translate() + " ", ref settings.RPC_YearShort); - listing_Standard.CheckboxLabeled("RPC_QuadrumLabel".Translate() + " ", ref settings.RPC_Quadrum); - listing_Standard.CheckboxLabeled("RPC_DayLabel".Translate() + " ", ref settings.RPC_Day); - listing_Standard.CheckboxLabeled("RPC_HourLabel".Translate() + " ", ref settings.RPC_Hour); - listing_Standard.CheckboxLabeled("RPC_TimeLabel".Translate() + " ", ref settings.RPC_Time); + SetDefaultSettings(listingStandard); + //Custom field settings - listing_Standard.CheckboxLabeled("CustomTopCheckbox".Translate() + " ", ref settings.RPC_CustomTop); - if (RWRPCMod.settings.RPC_CustomTop) - { - settings.RPC_CustomTopText = listing_Standard.TextEntryLabeled("CustomTopLabel".Translate() + " ", settings.RPC_CustomTopText); - } - listing_Standard.CheckboxLabeled("CustomBottomCheckbox".Translate() + " ", ref settings.RPC_CustomBottom); - if (RWRPCMod.settings.RPC_CustomBottom) - { - settings.RPC_CustomBottomText = listing_Standard.TextEntryLabeled("CustomBottomLabel".Translate() + " ", settings.RPC_CustomBottomText); - } - if (listing_Standard.ButtonText("RPC_UpdateLabel".Translate())) + SetCustomFields(listingStandard); + + listingStandard.End(); + Settings.Write(); + } + + private static void SetDefaultSettings(Listing_Standard listingStandard) + { + listingStandard.CheckboxLabeled("RPC_ColonyLabel".Translate() + " ", ref Settings.RpcColony); + listingStandard.CheckboxLabeled("RPC_ColonistCountLabel".Translate() + " ", ref Settings.RpcColonistCount); + listingStandard.CheckboxLabeled("RPC_BiomeLabel".Translate() + " ", ref Settings.RpcBiome); + listingStandard.CheckboxLabeled("RPC_YearLabel".Translate() + " ", ref Settings.RpcYear); + listingStandard.CheckboxLabeled("RPC_YearShortLabel".Translate() + " ", ref Settings.RpcYearShort); + listingStandard.CheckboxLabeled("RPC_QuadrumLabel".Translate() + " ", ref Settings.RpcQuadrum); + listingStandard.CheckboxLabeled("RPC_DayLabel".Translate() + " ", ref Settings.RpcDay); + listingStandard.CheckboxLabeled("RPC_HourLabel".Translate() + " ", ref Settings.RpcHour); + listingStandard.CheckboxLabeled("RPC_TimeLabel".Translate() + " ", ref Settings.RpcTime); + } + + private static void SetCustomFields(Listing_Standard listingStandard) + { + listingStandard.CheckboxLabeled("CustomTopCheckbox".Translate() + " ", ref Settings.RpcCustomTop); + + if (Settings.RpcCustomTop) + Settings.RpcCustomTopText = listingStandard.TextEntryLabeled("CustomTopLabel".Translate() + " ", Settings.RpcCustomTopText); + + listingStandard.CheckboxLabeled("CustomBottomCheckbox".Translate() + " ", ref Settings.RpcCustomBottom); + + if (Settings.RpcCustomBottom) + Settings.RpcCustomBottomText = listingStandard.TextEntryLabeled("CustomBottomLabel".Translate() + " ", Settings.RpcCustomBottomText); + + + if (listingStandard.ButtonText("RPC_UpdateLabel".Translate())) { - Verse.Log.Message("UPDATED"); - var world = Current.Game != null ? Current.Game.World : null; + var world = Current.Game?.World; if (world != null) - { StateHandler.PushState(Current.Game.CurrentMap); - } - } - listing_Standard.End(); - settings.Write(); } } } diff --git a/src/RimRPC.cs b/src/RimRPC.cs index c443086..654a31d 100644 --- a/src/RimRPC.cs +++ b/src/RimRPC.cs @@ -2,45 +2,50 @@ using System; using System.Reflection; using Verse; -using UnityEngine; namespace RimRPC { public class Mod : Verse.Mod { - public Mod(ModContentPack content) : base(content) + protected Mod(ModContentPack content) : base(content) { var femboyfoxes = new Harmony("weilbyte.rimworld.rimrpc"); - MethodInfo targetmethod = AccessTools.Method(typeof(Verse.GenScene), "GoToMainMenu"); + + MethodInfo targetmethod = AccessTools.Method(typeof(GenScene), "GoToMainMenu"); HarmonyMethod postfixmethod = new HarmonyMethod(typeof(RimRPC).GetMethod("GoToMainMenu_Postfix")); + femboyfoxes.Patch(targetmethod, null, postfixmethod); - Log.Message("RichPresence :: Patched"); + RimRPC.BootMeUp(); } } public class RimRPC { - internal static DiscordRPC.RichPresence prsnc; + internal static DiscordRPC.RichPresence Presence; internal static string Colony; internal static int onDay; - internal static long started = ((DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks) / TimeSpan.TicksPerSecond); + internal static long Started = (DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks) / TimeSpan.TicksPerSecond; public static void BootMeUp() { - DiscordRPC.EventHandlers eventHandlers = default(DiscordRPC.EventHandlers); - eventHandlers.readyCallback = (DiscordRPC.ReadyCallback)Delegate.Combine(eventHandlers.readyCallback, new DiscordRPC.ReadyCallback(ReadyCallback)); - eventHandlers.disconnectedCallback = (DiscordRPC.DisconnectedCallback)Delegate.Combine(eventHandlers.disconnectedCallback, new DiscordRPC.DisconnectedCallback(DisconnectedCallback)); - eventHandlers.errorCallback = (DiscordRPC.ErrorCallback)Delegate.Combine(eventHandlers.errorCallback, new DiscordRPC.ErrorCallback(ErrorCallback)); - eventHandlers.joinCallback = (DiscordRPC.JoinCallback)Delegate.Combine(eventHandlers.joinCallback, new DiscordRPC.JoinCallback(JoinCallback)); - eventHandlers.spectateCallback = (DiscordRPC.SpectateCallback)Delegate.Combine(eventHandlers.spectateCallback, new DiscordRPC.SpectateCallback(SpectateCallback)); - eventHandlers.requestCallback = (DiscordRPC.RequestCallback)Delegate.Combine(eventHandlers.requestCallback, new DiscordRPC.RequestCallback(RequestCallback)); + DiscordRPC.EventHandlers eventHandlers = default; + + eventHandlers.ReadyCallback = (DiscordRPC.ReadyCallback)Delegate.Combine(eventHandlers.ReadyCallback, new DiscordRPC.ReadyCallback(ReadyCallback)); + eventHandlers.DisconnectedCallback = (DiscordRPC.DisconnectedCallback)Delegate.Combine(eventHandlers.DisconnectedCallback, new DiscordRPC.DisconnectedCallback(DisconnectedCallback)); + eventHandlers.ErrorCallback = (DiscordRPC.ErrorCallback)Delegate.Combine(eventHandlers.ErrorCallback, new DiscordRPC.ErrorCallback(ErrorCallback)); + eventHandlers.JoinCallback = (DiscordRPC.JoinCallback)Delegate.Combine(eventHandlers.JoinCallback, new DiscordRPC.JoinCallback(JoinCallback)); + eventHandlers.SpectateCallback = (DiscordRPC.SpectateCallback)Delegate.Combine(eventHandlers.SpectateCallback, new DiscordRPC.SpectateCallback(SpectateCallback)); + eventHandlers.RequestCallback = (DiscordRPC.RequestCallback)Delegate.Combine(eventHandlers.RequestCallback, new DiscordRPC.RequestCallback(RequestCallback)); + DiscordRPC.Initialize("428272711702282252", ref eventHandlers, true, "0612"); - prsnc = default(DiscordRPC.RichPresence); - prsnc.largeImageKey = "logo"; - prsnc.state = "Main Menu"; - DiscordRPC.UpdatePresence(ref RimRPC.prsnc); + + Presence = default; + Presence.LargeImageKey = "logo"; + Presence.State = "RPC_MainMenu".Translate(); + + DiscordRPC.UpdatePresence(ref Presence); ReadyCallback(); } diff --git a/src/RimRPC.csproj b/src/RimRPC.csproj index c8e982f..3d23af7 100644 --- a/src/RimRPC.csproj +++ b/src/RimRPC.csproj @@ -16,7 +16,7 @@ none true - ..\dist\1.3\Assemblies\ + ..\dist\1.4\Assemblies\ prompt @@ -33,6 +33,7 @@ + @@ -40,16 +41,18 @@ + - 1.3.3056-beta + 1.4.3901 2.0.2 runtime + diff --git a/src/StateHandler.cs b/src/StateHandler.cs index 93dd740..41e77c2 100644 --- a/src/StateHandler.cs +++ b/src/StateHandler.cs @@ -1,137 +1,82 @@ using RimWorld; -using System; -using System.Linq; using Verse; namespace RimRPC { public class StateHandler { - internal static string colonyname; - internal static int years; - internal static int days; - internal static int dayhour; - internal static float colonistnumber; - internal static Quadrum quadrum; + private static string _colonyname; + private static string _biome; + private static int _years; + private static int _days; + private static int _dayhour; + private static float _colonistnumber; + private static Quadrum _quadrum; - public static string GetColonyName() - { - return Faction.OfPlayer.Name; - } - - public static int GetDaysSurvived() - { - long ticks = Find.TickManager.TicksAbs; - int num = (int)(ticks / 60000L); - if (num < 0L) - { - ticks--; - } - return num; - } + private static string GetColonyName() => Faction.OfPlayer.Name; public static void MenuState() { - RimRPC.prsnc.details = "Main Menu"; - RimRPC.prsnc.state = null; - RimRPC.prsnc.smallImageKey = null; - RimRPC.prsnc.smallImageText = null; - DiscordRPC.UpdatePresence(ref RimRPC.prsnc); + RimRPC.Presence.Details = "RPC_MainMenu".Translate(); + RimRPC.Presence.State = null; + RimRPC.Presence.SmallImageKey = null; + RimRPC.Presence.SmallImageText = null; + DiscordRPC.UpdatePresence(ref RimRPC.Presence); } - - public static string BuildString(string which) + + private static string BuildString(string which, string[] args) { + var state = ""; + if (which == "state") - { - string state = ""; - if (RWRPCMod.settings.RPC_CustomBottom) - { - return RWRPCMod.settings.RPC_CustomBottomText; - } - if (RWRPCMod.settings.RPC_Day) - { - state += "Day " + days; - } - if (RWRPCMod.settings.RPC_Day && RWRPCMod.settings.RPC_Hour) - { - state += " (" + dayhour + "h)"; - } - if (RWRPCMod.settings.RPC_Quadrum) - { - if (RWRPCMod.settings.RPC_Day) - { - state += " | "; - } - state += quadrum; - } - if (RWRPCMod.settings.RPC_Year) - { - if (RWRPCMod.settings.RPC_Quadrum || RWRPCMod.settings.RPC_Day) - { - state += " | "; - } - if (RWRPCMod.settings.RPC_YearShort) - { - state += "y" + years; - return state; - } - state += "Year " + years; - } - return state; - - } + return States.GetState(state, args); + if (which == "details") - { - if (RWRPCMod.settings.RPC_CustomTop) - { - return RWRPCMod.settings.RPC_CustomTopText; - } - if (RWRPCMod.settings.RPC_Colony) - { - if (RWRPCMod.settings.RPC_ColonistCount) - { - return colonyname + " (" + colonistnumber + ")"; - } - return colonyname; - } - if (RWRPCMod.settings.RPC_ColonistCount) - { - return colonistnumber + " Colonists"; - } - } + return Details.GetDetails(args); + return null; } public static void PushState(Map map) { - var world = Current.Game != null ? Current.Game.World : null; + var world = Current.Game?.World; + if (world == null) - { - RimRPC.prsnc.details = "Main Menu"; - } + RimRPC.Presence.Details = "RPC_MainMenu".Translate(); + else { - float latitude = (map == null) ? 0f : Find.WorldGrid.LongLatOf(map.Tile).y; - float longitude = (map == null) ? 0f : Find.WorldGrid.LongLatOf(map.Tile).x; - colonyname = GetColonyName(); - years = days / 60; - colonistnumber = (float)PawnsFinder.AllMapsCaravansAndTravelingTransportPods_Alive_FreeColonists.Count(); - days = GenDate.DaysPassed; - dayhour = GenDate.HourOfDay(Find.TickManager.TicksAbs, longitude); - quadrum = GenDate.Quadrum(Find.TickManager.TicksAbs, longitude); + var latitude = (map == null) ? 0f : Find.WorldGrid.LongLatOf(map.Tile).y; + var longitude = (map == null) ? 0f : Find.WorldGrid.LongLatOf(map.Tile).x; + + _colonyname = GetColonyName(); + _years = _days / 60; + _colonistnumber = PawnsFinder.AllMapsCaravansAndTravelingTransportPods_Alive_FreeColonists.Count; + _days = GenDate.DaysPassed; + _dayhour = GenDate.HourOfDay(Find.TickManager.TicksAbs, longitude); + _quadrum = GenDate.Quadrum(Find.TickManager.TicksAbs, longitude); + _biome = ""; - BiomeDef biome = Find.WorldGrid[map.uniqueID].biome; - RimRPC.prsnc.state = BuildString("state"); - RimRPC.prsnc.details = BuildString("details"); - RimRPC.prsnc.largeImageText = "RimWorld"; - RimRPC.prsnc.smallImageKey = "inmap"; - RimRPC.prsnc.smallImageText = "Playing!"; - if (RWRPCMod.settings.RPC_Time) + if (map != null) { - RimRPC.prsnc.startTimestamp = RimRPC.started; + var biome = Find.WorldGrid[map.uniqueID].biome; + _biome = biome.LabelCap; } + + string[] stateArgs = { _years.ToString(), _days.ToString(), _dayhour.ToString(), _quadrum.Label(), _biome }; + string[] detailsArgs = { _colonyname, _colonistnumber.ToString()}; + + RimRPC.Presence.State = BuildString("state", stateArgs); + RimRPC.Presence.Details = BuildString("details", detailsArgs); + RimRPC.Presence.LargeImageText = "RimWorld"; + RimRPC.Presence.SmallImageKey = "inmap"; + RimRPC.Presence.SmallImageText = "RPC_Playing".Translate(); + + if (RWRPCMod.Settings.RpcTime) + RimRPC.Presence.StartTimestamp = RimRPC.Started; } - DiscordRPC.UpdatePresence(ref RimRPC.prsnc); + + DiscordRPC.UpdatePresence(ref RimRPC.Presence); } } } \ No newline at end of file diff --git a/src/States.cs b/src/States.cs new file mode 100644 index 0000000..6488693 --- /dev/null +++ b/src/States.cs @@ -0,0 +1,69 @@ +using Verse; + +namespace RimRPC +{ + internal class States + { + public static string GetState(string state, string[] args) + { + var years = args[0]; + var days = args[1]; + var dayhour = args[2]; + var quadrum = args[3]; + var biome = args[4]; + + if (RWRPCMod.Settings.RpcCustomBottom) + return RWRPCMod.Settings.RpcCustomBottomText; + + if (RWRPCMod.Settings.RpcDay) + state = GetRpcDay(state, days, dayhour); + + if (RWRPCMod.Settings.RpcQuadrum) + state = GetRpcQuadrum(state, quadrum); + + if (RWRPCMod.Settings.RpcYear) + state = GetRpcYear(state, years); + + if (RWRPCMod.Settings.RpcBiome) + state += biome; + + return state; + } + + private static string GetRpcDay(string state, string days, string dayhour) + { + state += $"{"RPC_Day".Translate()} {days}"; + + if (RWRPCMod.Settings.RpcDay && RWRPCMod.Settings.RpcHour) + state += $" ({dayhour}{"RPC_Hour".Translate()})"; + + return state; + } + + private static string GetRpcYear(string state, string years) + { + if (RWRPCMod.Settings.RpcQuadrum || RWRPCMod.Settings.RpcDay) + state += " | "; + + if (RWRPCMod.Settings.RpcYearShort) + { + state += $"{years}{"RPC_ShortYears".Translate()}"; + return state; + } + state += $"{"RPC_Years".Translate()} {years}"; + + return state; + } + + private static string GetRpcQuadrum(string state, string quadrum) + { + if (RWRPCMod.Settings.RpcDay) + { + state += " | "; + } + state += quadrum; + + return state; + } + } +}