From a740f99b509242bba4d894f0345ca773b868f9ae Mon Sep 17 00:00:00 2001 From: pizzaboxer Date: Thu, 18 May 2023 11:24:09 +0100 Subject: [PATCH] Add support for emoij selection (#148) --- Bloxstrap/Bootstrapper.cs | 25 ++++++++++++++ Bloxstrap/Enums/EmojiType.cs | 11 ++++++ Bloxstrap/Extensions/EmojiTypeEx.cs | 34 +++++++++++++++++++ Bloxstrap/Models/Settings.cs | 1 + Bloxstrap/Models/State.cs | 3 ++ Bloxstrap/UI/Menu/ViewModels/ModsViewModel.cs | 14 +++++++- Bloxstrap/UI/Menu/Views/Pages/ModsPage.xaml | 11 ++++++ 7 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 Bloxstrap/Enums/EmojiType.cs create mode 100644 Bloxstrap/Extensions/EmojiTypeEx.cs diff --git a/Bloxstrap/Bootstrapper.cs b/Bloxstrap/Bootstrapper.cs index 75f27ae..851642c 100644 --- a/Bloxstrap/Bootstrapper.cs +++ b/Bloxstrap/Bootstrapper.cs @@ -13,6 +13,7 @@ using System.Windows; using Microsoft.Win32; using Bloxstrap.Enums; +using Bloxstrap.Extensions; using Bloxstrap.Integrations; using Bloxstrap.Models; using Bloxstrap.Tools; @@ -915,6 +916,30 @@ namespace Bloxstrap await CheckModPreset(App.Settings.Prop.UseOldCharacterSounds, @"content\sounds\impact_water.mp3", "Empty.mp3"); await CheckModPreset(App.Settings.Prop.UseDisableAppPatch, @"ExtraContent\places\Mobile.rbxl", ""); + // emoji presets are downloaded remotely from github due to how large they are + string emojiFontLocation = Path.Combine(Directories.Modifications, "content\\fonts\\TwemojiMozilla.ttf"); + + if (App.Settings.Prop.PreferredEmojiType == EmojiType.Default && App.State.Prop.CurrentEmojiType != EmojiType.Default) + { + if (File.Exists(emojiFontLocation)) + File.Delete(emojiFontLocation); + + App.State.Prop.CurrentEmojiType = EmojiType.Default; + } + else if (App.Settings.Prop.PreferredEmojiType != EmojiType.Default && App.State.Prop.CurrentEmojiType != App.Settings.Prop.PreferredEmojiType) + { + if (File.Exists(emojiFontLocation)) + File.Delete(emojiFontLocation); + + string remoteEmojiLocation = App.Settings.Prop.PreferredEmojiType.GetRemoteLocation(); + + var response = await App.HttpClient.GetAsync(remoteEmojiLocation); + await using var fileStream = new FileStream(emojiFontLocation, FileMode.CreateNew); + await response.Content.CopyToAsync(fileStream); + + App.State.Prop.CurrentEmojiType = App.Settings.Prop.PreferredEmojiType; + } + foreach (string file in Directory.GetFiles(modFolder, "*.*", SearchOption.AllDirectories)) { // get relative directory path diff --git a/Bloxstrap/Enums/EmojiType.cs b/Bloxstrap/Enums/EmojiType.cs new file mode 100644 index 0000000..cdefefd --- /dev/null +++ b/Bloxstrap/Enums/EmojiType.cs @@ -0,0 +1,11 @@ +namespace Bloxstrap.Enums +{ + public enum EmojiType + { + Default, + Catmoji, + Windows11, + Windows10, + Windows8 + } +} diff --git a/Bloxstrap/Extensions/EmojiTypeEx.cs b/Bloxstrap/Extensions/EmojiTypeEx.cs new file mode 100644 index 0000000..5978b66 --- /dev/null +++ b/Bloxstrap/Extensions/EmojiTypeEx.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; + +using Bloxstrap.Enums; + +namespace Bloxstrap.Extensions +{ + static class EmojiTypeEx + { + public static IReadOnlyDictionary Selections => new Dictionary + { + { "Default (Twemoji)", EmojiType.Default }, + { "Catmoji", EmojiType.Catmoji }, + { "Windows 11", EmojiType.Windows11 }, + { "Windows 10", EmojiType.Windows10 }, + { "Windows 8", EmojiType.Windows8 }, + }; + + public static IReadOnlyDictionary Filenames => new Dictionary + { + { EmojiType.Catmoji, "Catmoji.ttf" }, + { EmojiType.Windows11, "Win1122H2SegoeUIEmoji.ttf" }, + { EmojiType.Windows10, "Win10April2018SegoeUIEmoji.ttf" }, + { EmojiType.Windows8, "Win8.1SegoeUIEmoji.ttf" }, + }; + + public static string GetRemoteLocation(this EmojiType emojiType) + { + if (emojiType == EmojiType.Default) + return ""; + + return $"https://github.com/NikSavchenk0/rbxcustom-fontemojis/raw/8a552f4aaaecfa58d6bd9b0540e1ac16e81faadb/{Filenames[emojiType]}"; + } + } +} diff --git a/Bloxstrap/Models/Settings.cs b/Bloxstrap/Models/Settings.cs index cfb173f..477d324 100644 --- a/Bloxstrap/Models/Settings.cs +++ b/Bloxstrap/Models/Settings.cs @@ -31,6 +31,7 @@ namespace Bloxstrap.Models public bool UseOldCharacterSounds { get; set; } = false; public bool UseOldMouseCursor { get; set; } = false; public bool UseDisableAppPatch { get; set; } = false; + public EmojiType PreferredEmojiType { get; set; } = EmojiType.Default; public bool DisableFullscreenOptimizations { get; set; } = false; } } diff --git a/Bloxstrap/Models/State.cs b/Bloxstrap/Models/State.cs index 5b59a9b..cd1a7fc 100644 --- a/Bloxstrap/Models/State.cs +++ b/Bloxstrap/Models/State.cs @@ -1,10 +1,13 @@ using System.Collections.Generic; +using Bloxstrap.Enums; + namespace Bloxstrap.Models { public class State { public string VersionGuid { get; set; } = ""; + public EmojiType CurrentEmojiType { get; set; } = EmojiType.Default; public List ModManifest { get; set; } = new(); } } diff --git a/Bloxstrap/UI/Menu/ViewModels/ModsViewModel.cs b/Bloxstrap/UI/Menu/ViewModels/ModsViewModel.cs index 9be1101..e9117a1 100644 --- a/Bloxstrap/UI/Menu/ViewModels/ModsViewModel.cs +++ b/Bloxstrap/UI/Menu/ViewModels/ModsViewModel.cs @@ -1,7 +1,11 @@ -using System.ComponentModel; +using System.Collections.Generic; using System.Diagnostics; +using System.Linq; using System.Windows.Input; +using Bloxstrap.Enums; +using Bloxstrap.Extensions; + using CommunityToolkit.Mvvm.Input; namespace Bloxstrap.UI.Menu.ViewModels @@ -36,6 +40,14 @@ namespace Bloxstrap.UI.Menu.ViewModels set => App.Settings.Prop.UseDisableAppPatch = value; } + public IReadOnlyDictionary EmojiTypes => EmojiTypeEx.Selections; + + public string SelectedEmojiType + { + get => EmojiTypes.FirstOrDefault(x => x.Value == App.Settings.Prop.PreferredEmojiType).Key; + set => App.Settings.Prop.PreferredEmojiType = EmojiTypes[value]; + } + public bool DisableFullscreenOptimizationsEnabled { get => App.Settings.Prop.DisableFullscreenOptimizations; diff --git a/Bloxstrap/UI/Menu/Views/Pages/ModsPage.xaml b/Bloxstrap/UI/Menu/Views/Pages/ModsPage.xaml index 8d0e4f1..57dd470 100644 --- a/Bloxstrap/UI/Menu/Views/Pages/ModsPage.xaml +++ b/Bloxstrap/UI/Menu/Views/Pages/ModsPage.xaml @@ -63,6 +63,7 @@ + @@ -107,6 +108,16 @@ + + + + + + + + + +