From 671096a7584b509c7a4976a3120d7d2d8c4d00a3 Mon Sep 17 00:00:00 2001 From: Brett Hewitson Date: Fri, 20 Aug 2021 11:27:12 +1000 Subject: [PATCH] GameData and Converter Changes (#6) --- src/ARKServerManager/Lib/GameData.cs | 14 ++++++---- .../Converters/FloatToStringConverter.cs | 28 +++++++++++++++++++ .../Converters/IntToVisibilityConverter.cs | 21 ++++++++++++++ .../InvertIntToVisibilityConverter.cs | 21 ++++++++++++++ 4 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 src/ServerManager.Common/Converters/FloatToStringConverter.cs create mode 100644 src/ServerManager.Common/Converters/IntToVisibilityConverter.cs create mode 100644 src/ServerManager.Common/Converters/InvertIntToVisibilityConverter.cs diff --git a/src/ARKServerManager/Lib/GameData.cs b/src/ARKServerManager/Lib/GameData.cs index c3c0612e..c5f2c7ce 100644 --- a/src/ARKServerManager/Lib/GameData.cs +++ b/src/ARKServerManager/Lib/GameData.cs @@ -192,7 +192,7 @@ namespace ServerManagerTool.Lib public static Engram GetEngramForClass(string className) => engrams.FirstOrDefault(e => e.EngramClassName.Equals(className)); - public static bool HasEngramForClass(string className) => engrams.Any(e => e.EngramClassName.Equals(className)); + public static bool HasEngramForClass(string className) => !string.IsNullOrWhiteSpace(className) && engrams.Any(e => e.EngramClassName.Equals(className)); public static bool IsTekgram(string className) => engrams.Any(e => e.EngramClassName.Equals(className) && e.IsTekgram); @@ -206,9 +206,11 @@ namespace ServerManagerTool.Lib public static PrimalItem GetItemForClass(string className) => items.FirstOrDefault(e => e.ClassName.Equals(className)); - public static bool HasItemForClass(string className) => items.Any(e => e.ClassName.Equals(className)); + public static bool HasItemForClass(string className) => !string.IsNullOrWhiteSpace(className) && items.Any(e => e.ClassName.Equals(className)); public static string FriendlyItemNameForClass(string className, bool returnEmptyIfNotFound = false) => string.IsNullOrWhiteSpace(className) ? string.Empty : GlobalizedApplication.Instance.GetResourceString(className) ?? gameData?.Items?.FirstOrDefault(i => i.ClassName.Equals(className))?.Description ?? (returnEmptyIfNotFound ? string.Empty : className); + + public static string FriendlyItemModNameForClass(string className) => string.IsNullOrWhiteSpace(className) ? string.Empty : GameData.FriendlyNameForClass($"Mod_{gameData?.Items?.FirstOrDefault(i => i.ClassName.Equals(className))?.Mod}", true) ?? string.Empty; #endregion #region Resources @@ -218,7 +220,7 @@ namespace ServerManagerTool.Lib public static ResourceClassMultiplier GetResourceMultiplierForClass(string className) => resourceMultipliers.FirstOrDefault(e => e.ClassName.Equals(className)); - public static bool HasResourceMultiplierForClass(string className) => resourceMultipliers.Any(e => e.ClassName.Equals(className)); + public static bool HasResourceMultiplierForClass(string className) => !string.IsNullOrWhiteSpace(className) && resourceMultipliers.Any(e => e.ClassName.Equals(className)); public static string FriendlyResourceNameForClass(string className) => string.IsNullOrWhiteSpace(className) ? string.Empty : GlobalizedApplication.Instance.GetResourceString(className) ?? gameData?.Items?.FirstOrDefault(i => i.ClassName.Equals(className) && i.IsHarvestable)?.Description ?? className; #endregion @@ -230,7 +232,7 @@ namespace ServerManagerTool.Lib public static MapSpawner GetMapSpawnerForClass(string className) => mapSpawners.FirstOrDefault(e => e.ClassName.Equals(className)); - public static bool HasMapSpawnerForClass(string className) => mapSpawners.Any(e => e.ClassName.Equals(className)); + public static bool HasMapSpawnerForClass(string className) => !string.IsNullOrWhiteSpace(className) && mapSpawners.Any(e => e.ClassName.Equals(className)); public static string FriendlyMapSpawnerNameForClass(string className, bool returnEmptyIfNotFound = false) => string.IsNullOrWhiteSpace(className) ? string.Empty : GlobalizedApplication.Instance.GetResourceString(className) ?? gameData?.MapSpawners?.FirstOrDefault(i => i.ClassName.Equals(className))?.Description ?? (returnEmptyIfNotFound ? string.Empty : className); #endregion @@ -242,9 +244,11 @@ namespace ServerManagerTool.Lib public static SupplyCrate GetSupplyCrateForClass(string className) => supplyCrates.FirstOrDefault(e => e.ClassName.Equals(className)); - public static bool HasSupplyCrateForClass(string className) => supplyCrates.Any(e => e.ClassName.Equals(className)); + public static bool HasSupplyCrateForClass(string className) => !string.IsNullOrWhiteSpace(className) && supplyCrates.Any(e => e.ClassName.Equals(className)); public static string FriendlySupplyCrateNameForClass(string className, bool returnEmptyIfNotFound = false) => string.IsNullOrWhiteSpace(className) ? string.Empty : GlobalizedApplication.Instance.GetResourceString(className) ?? gameData?.SupplyCrates?.FirstOrDefault(i => i.ClassName.Equals(className))?.Description ?? (returnEmptyIfNotFound ? string.Empty : className); + + public static string FriendlySupplyCrateModNameForClass(string className) => string.IsNullOrWhiteSpace(className) ? string.Empty : GameData.FriendlyNameForClass($"Mod_{gameData?.SupplyCrates?.FirstOrDefault(i => i.ClassName.Equals(className))?.Mod}", true) ?? string.Empty; #endregion #region Game Maps diff --git a/src/ServerManager.Common/Converters/FloatToStringConverter.cs b/src/ServerManager.Common/Converters/FloatToStringConverter.cs new file mode 100644 index 00000000..ec1afca6 --- /dev/null +++ b/src/ServerManager.Common/Converters/FloatToStringConverter.cs @@ -0,0 +1,28 @@ +using System; +using System.Globalization; +using System.Windows.Data; + +namespace ServerManagerTool.Common.Converters +{ + public class FloatToStringConverter : IValueConverter + { + public const string DEFAULT_CULTURE_CODE = "en-US"; + public const int MIN_VALUE = 0; + + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var floatValue = System.Convert.ToSingle(value); + floatValue = Math.Max(MIN_VALUE, floatValue); + + return ((float)floatValue).ToString("0.000000####", CultureInfo.GetCultureInfo(DEFAULT_CULTURE_CODE)); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + var floatValue = System.Convert.ToSingle(value); + floatValue = Math.Max(MIN_VALUE, floatValue); + + return floatValue; + } + } +} diff --git a/src/ServerManager.Common/Converters/IntToVisibilityConverter.cs b/src/ServerManager.Common/Converters/IntToVisibilityConverter.cs new file mode 100644 index 00000000..c350e744 --- /dev/null +++ b/src/ServerManager.Common/Converters/IntToVisibilityConverter.cs @@ -0,0 +1,21 @@ +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace ServerManagerTool.Common.Converters +{ + public class IntToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + double scaledValue = System.Convert.ToInt32(value); + return scaledValue == 0 ? Visibility.Collapsed : Visibility.Visible; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotSupportedException("IntToVisibilityConverter is a OneWay converter."); + } + } +} diff --git a/src/ServerManager.Common/Converters/InvertIntToVisibilityConverter.cs b/src/ServerManager.Common/Converters/InvertIntToVisibilityConverter.cs new file mode 100644 index 00000000..c7030bb8 --- /dev/null +++ b/src/ServerManager.Common/Converters/InvertIntToVisibilityConverter.cs @@ -0,0 +1,21 @@ +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace ServerManagerTool.Common.Converters +{ + public class InvertIntToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + double scaledValue = System.Convert.ToInt32(value); + return scaledValue == 0 ? Visibility.Visible : Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotSupportedException("InvertIntToVisibilityConverter is a OneWay converter."); + } + } +}