diff --git a/src/SAM/Stats/Factories/SteamStatisticFactory.cs b/src/SAM/Stats/Factories/SteamStatisticFactory.cs index 71db04c7..1599d796 100644 --- a/src/SAM/Stats/Factories/SteamStatisticFactory.cs +++ b/src/SAM/Stats/Factories/SteamStatisticFactory.cs @@ -17,44 +17,46 @@ public static class SteamStatisticFactory /// /// Occurs when the , , or the is or empty. /// Occurs when an unkown type is supplied. - public static SteamStatisticBase CreateStat(Client client, StatInfoBase stat) + public static SteamStatisticBase CreateStat(Client client, StatInfoBase stat) +{ + if (client == null) throw new ArgumentNullException(nameof(client)); + if (string.IsNullOrEmpty(stat?.Id)) throw new ArgumentNullException(nameof(stat)); + + switch (stat) { - if (client == null) throw new ArgumentNullException(nameof(client)); - if (string.IsNullOrEmpty(stat?.Id)) throw new ArgumentNullException(nameof(stat)); + // STAT_INT + case IntegerStatInfo intDefinition: + { + if (!client.SteamUserStats.GetStatValue(intDefinition.Id, out int value)) break; - switch (stat) + intDefinition.Value = value; + + return new IntegerSteamStatistic(intDefinition); + } + // STAT_AVGRATE + case AvgRateStatInfo avgRateDefinition: { - // STAT_INT - case IntegerStatInfo intDefinition: - { - if (!client.SteamUserStats.GetStatValue(intDefinition.Id, out int value)) break; - - intDefinition.Value = value; - - return new IntegerSteamStatistic(intDefinition); - } - // STAT_AVGRATE - case AvgRateStatInfo avgRateDefinition: - { - if (!client.SteamUserStats.GetStatValue(avgRateDefinition.Id, out float value)) break; - - avgRateDefinition.Value = value; - - // NOTE: average rate stats are always treated as floats - return new FloatSteamStatistic(avgRateDefinition); - } - // STAT_FLOAT - case FloatStatInfo floatDefinition: - { - if (!client.SteamUserStats.GetStatValue(floatDefinition.Id, out float value)) break; - - floatDefinition.Value = value; - - return new FloatSteamStatistic(floatDefinition); - } + if (!client.SteamUserStats.GetStatValue(avgRateDefinition.Id, out float value)) break; + + avgRateDefinition.Value = value; + + // NOTE: average rate stats are always treated as floats + return new FloatSteamStatistic(avgRateDefinition); } + // STAT_FLOAT + case FloatStatInfo floatDefinition: + { + if (!client.SteamUserStats.GetStatValue(floatDefinition.Id, out float value)) break; - throw new ArgumentOutOfRangeException(nameof(stat)); + floatDefinition.Value = value; + + return new FloatSteamStatistic(floatDefinition); + } + default: + // Log the type of the unhandled stat + Console.WriteLine($"Unhandled stat type: {stat.GetType()} with ID: {stat.Id}"); + break; } + throw new ArgumentOutOfRangeException(nameof(stat), $"Unhandled stat type: {stat?.GetType()} with ID: {stat?.Id}"); }