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;
+ }
+ }
+}