protected override string FormatState(PlayerInfoResponse playerInfo, DiscordPresence presence) { bool hasActivePlanet = !string.IsNullOrWhiteSpace(playerInfo.ActivePlanet); bool hasActiveZone = !string.IsNullOrWhiteSpace(playerInfo.ActiveZonePosition); bool hasActiveBossZone = !string.IsNullOrWhiteSpace(playerInfo.ActiveBossGame); var state = "Inactive"; if (hasActivePlanet && (hasActiveZone || hasActiveBossZone)) { state = $"Planet {playerInfo.ActivePlanet} - "; if (hasActiveBossZone) { state += $"Boss Zone"; } else if (hasActiveZone) { state += $"Zone {playerInfo.ActiveZonePosition}"; } var planet = SaliensApi.GetPlanet(playerInfo.ActivePlanet); if (hasActiveZone && int.TryParse(playerInfo.ActiveZonePosition, out int zonePos)) { var zone = planet.Zones[zonePos]; if (zone != null) { state += $" ({zone.RealDifficulty.ToString().Substring(0, 1)})"; } } } else if (hasActivePlanet && !hasActiveZone) { state = $"Planet {playerInfo.ActivePlanet}"; } return(state); }
protected override string FormatDetails(PlayerInfoResponse playerInfo, DiscordPresence presence) { var details = $"Level {playerInfo.Level}"; if (long.TryParse(playerInfo.Score, out long xp)) { details += $" - {xp.ToString("#,##0", CultureInfo.InvariantCulture)} XP"; } return(details); }
protected override Assets GetAssets(PlayerInfoResponse playerInfoResponse, DiscordPresence presence) { string smallImageKey = null; string smallImageText = null; switch (playerInfoResponse.Level) { case var level when level > 0 && level < 6: smallImageKey = "badge1"; smallImageText = "Rank 1"; break; case var level when level >= 6 && level < 9: smallImageKey = "badge2"; smallImageText = "Rank 2"; break; case var level when level >= 9 && level < 11: smallImageKey = "badge3"; smallImageText = "Rank 3"; break; case var level when level >= 11 && level < 16: smallImageKey = "badge4"; smallImageText = "Rank 4"; break; case var level when level >= 16 && level < 21: smallImageKey = "badge5"; smallImageText = "Rank 5"; break; case var level when level >= 21: smallImageKey = "badge6"; smallImageText = "Rank 6"; break; } return(new Assets { SmallImageKey = smallImageKey, SmallImageText = smallImageText, LargeImageKey = !string.IsNullOrWhiteSpace(playerInfoResponse.ActiveBossGame) ? "logo_boss" : "logo_large", LargeImageText = "Steam Summer Saliens" }); }
public virtual RichPresence FormatPresence(PlayerInfoResponse playerInfo, DiscordPresence presence) { if (playerInfo == null) { throw new ArgumentNullException(nameof(playerInfo)); } if (presence == null) { throw new ArgumentNullException(nameof(presence)); } return(new RichPresence { Details = this.FormatDetails(playerInfo, presence), State = this.FormatState(playerInfo, presence), Timestamps = this.FormatTimestamps(playerInfo, presence), Assets = this.GetAssets(playerInfo, presence) }); }
protected override Timestamps FormatTimestamps(PlayerInfoResponse playerInfo, DiscordPresence presence) { bool hasActivePlanet = !string.IsNullOrWhiteSpace(playerInfo.ActivePlanet); bool hasActiveBossZone = !string.IsNullOrWhiteSpace(playerInfo.ActiveBossGame); if (hasActivePlanet && hasActiveBossZone) { return(new Timestamps { Start = (DateTime.Now - playerInfo.TimeInZone).ToUniversalTime() }); } if (hasActivePlanet) { return(new Timestamps { Start = (DateTime.Now - playerInfo.TimeOnPlanet).ToUniversalTime() }); } return(null); }
protected abstract Assets GetAssets(PlayerInfoResponse playerInfoResponse, DiscordPresence presence);
protected abstract Timestamps FormatTimestamps(PlayerInfoResponse playerInfo, DiscordPresence presence);
protected abstract string FormatState(PlayerInfoResponse playerInfo, DiscordPresence presence);
public virtual void SetSaliensPlayerState(PlayerInfoResponse playerInfo) => this.presence?.SetSaliensPlayerState(playerInfo);
protected override Timestamps FormatTimestamps(PlayerInfoResponse playerInfo, DiscordPresence presence) { bool hasActivePlanet = !string.IsNullOrWhiteSpace(playerInfo.ActivePlanet); bool hasActiveZone = !string.IsNullOrWhiteSpace(playerInfo.ActiveZonePosition); bool hasActiveBossZone = !string.IsNullOrWhiteSpace(playerInfo.ActiveBossGame); Timestamps timestamps = null; if (!hasActiveBossZone) { if (hasActivePlanet && hasActiveZone && long.TryParse(playerInfo.Score, out long xp) && long.TryParse(playerInfo.NextLevelScore, out long nextLevelXp)) { if (xp > this.LastXp) { if (this.LastXp > 0 && this.MeasureStartTime.Ticks > 0) { int diffXp = (int)(xp - this.LastXp); var diffTime = DateTime.Now - this.MeasureStartTime - playerInfo.TimeInZone; var eta = TimeSpan.FromSeconds(diffTime.TotalSeconds * ((double)(nextLevelXp - xp) / diffXp)); this.PredictedLevelUpDate = DateTime.Now + eta - playerInfo.TimeInZone; } this.MeasureStartTime = DateTime.Now - playerInfo.TimeInZone; } this.LastXp = xp; } else if (string.IsNullOrWhiteSpace(playerInfo.NextLevelScore)) { this.PredictedLevelUpDate = DateTime.Now; } // Only show when it's less than a day: Discord doesn't show days if (this.PredictedLevelUpDate > DateTime.Now && this.PredictedLevelUpDate < DateTime.Now.AddDays(1)) { timestamps = new Timestamps { End = this.PredictedLevelUpDate.ToUniversalTime() } } ; } // Fallbacks if (timestamps == null && hasActivePlanet && (hasActiveZone || hasActiveBossZone)) { timestamps = new Timestamps { Start = (DateTime.Now - playerInfo.TimeInZone).ToUniversalTime() } } ; if (timestamps == null && hasActivePlanet) { timestamps = new Timestamps { Start = (DateTime.Now - playerInfo.TimeOnPlanet).ToUniversalTime() } } ; if (hasActivePlanet && hasActiveZone) { this.MeasureStartTime = DateTime.Now - playerInfo.TimeInZone; } return(timestamps); } } }
protected override Timestamps FormatTimestamps(PlayerInfoResponse playerInfo, DiscordPresence presence) { return(null); }