using System.Collections.Generic; using ChatTwo.Code; using ChatTwo.Util; namespace ChatTwo.Resources; // Hellion Chat — v0.6.0 built-in colour presets for the ChatColours // settings section. Read-only static data; users apply a preset via the // settings UI which overwrites Configuration.ChatColours immediately. // Battle-channel types are intentionally NOT covered by the stylistic // presets so that combat-log tuning the user has done stays intact. public sealed record ChatColourPreset( string DisplayName, string LocalizationKey, bool IsBrandPreset, IReadOnlyDictionary Colours); public static class ChatColourPresets { public static IReadOnlyDictionary All { get; } = BuildAll(); private static Dictionary BuildAll() { return new Dictionary { ["Default"] = new( DisplayName: "ChatTwo Default", LocalizationKey: "ChatColourPresets_Default", IsBrandPreset: false, Colours: BuildDefault()), ["HighContrast"] = new( DisplayName: "High-Contrast", LocalizationKey: "ChatColourPresets_HighContrast", IsBrandPreset: false, Colours: BuildHighContrast()), ["Pastell"] = new( DisplayName: "Pastell", LocalizationKey: "ChatColourPresets_Pastell", IsBrandPreset: false, Colours: BuildPastell()), ["DarkModeTuned"] = new( DisplayName: "Dark-Mode-Tuned", LocalizationKey: "ChatColourPresets_DarkModeTuned", IsBrandPreset: false, Colours: BuildDarkModeTuned()), ["Hellion"] = new( DisplayName: "Hellion", LocalizationKey: "ChatColourPresets_Hellion", IsBrandPreset: true, Colours: BuildHellion()), }; } // The Default preset spiegelt 1:1 die Werte aus ChatTypeExt.DefaultColor. // Channels ohne Default-Wert (return null) werden ausgelassen — wer sie // anwenden will, behält seine aktuelle Farbe. private static IReadOnlyDictionary BuildDefault() { var dict = new Dictionary(); foreach (var (_, types) in ChatTypeExt.SortOrder) { foreach (var type in types) { var def = type.DefaultColor(); if (def.HasValue) dict[type] = def.Value; } } return dict; } private static IReadOnlyDictionary BuildHighContrast() { return new Dictionary { [ChatType.Say] = ColourUtil.ComponentsToRgba(255, 255, 255), [ChatType.Yell] = ColourUtil.ComponentsToRgba(255, 192, 0), [ChatType.Shout] = ColourUtil.ComponentsToRgba(255, 96, 0), [ChatType.TellIncoming] = ColourUtil.ComponentsToRgba(255, 128, 255), [ChatType.TellOutgoing] = ColourUtil.ComponentsToRgba(255, 128, 255), [ChatType.Party] = ColourUtil.ComponentsToRgba(128, 192, 255), [ChatType.Alliance] = ColourUtil.ComponentsToRgba(255, 128, 64), [ChatType.FreeCompany] = ColourUtil.ComponentsToRgba(96, 192, 255), [ChatType.NoviceNetwork] = ColourUtil.ComponentsToRgba(192, 255, 64), [ChatType.Linkshell1] = ColourUtil.ComponentsToRgba(255, 128, 128), [ChatType.Linkshell2] = ColourUtil.ComponentsToRgba(255, 192, 128), [ChatType.Linkshell3] = ColourUtil.ComponentsToRgba(255, 255, 128), [ChatType.Linkshell4] = ColourUtil.ComponentsToRgba(192, 255, 128), [ChatType.Linkshell5] = ColourUtil.ComponentsToRgba(128, 255, 192), [ChatType.Linkshell6] = ColourUtil.ComponentsToRgba(128, 192, 255), [ChatType.Linkshell7] = ColourUtil.ComponentsToRgba(192, 128, 255), [ChatType.Linkshell8] = ColourUtil.ComponentsToRgba(255, 128, 192), [ChatType.CrossLinkshell1] = ColourUtil.ComponentsToRgba(255, 96, 96), [ChatType.CrossLinkshell2] = ColourUtil.ComponentsToRgba(255, 160, 96), [ChatType.CrossLinkshell3] = ColourUtil.ComponentsToRgba(255, 255, 96), [ChatType.CrossLinkshell4] = ColourUtil.ComponentsToRgba(160, 255, 96), [ChatType.CrossLinkshell5] = ColourUtil.ComponentsToRgba(96, 255, 160), [ChatType.CrossLinkshell6] = ColourUtil.ComponentsToRgba(96, 160, 255), [ChatType.CrossLinkshell7] = ColourUtil.ComponentsToRgba(160, 96, 255), [ChatType.CrossLinkshell8] = ColourUtil.ComponentsToRgba(255, 96, 160), }; } private static IReadOnlyDictionary BuildPastell() { return new Dictionary { [ChatType.Say] = ColourUtil.ComponentsToRgba(232, 232, 232), [ChatType.Yell] = ColourUtil.ComponentsToRgba(245, 216, 155), [ChatType.Shout] = ColourUtil.ComponentsToRgba(245, 176, 155), [ChatType.TellIncoming] = ColourUtil.ComponentsToRgba(224, 176, 224), [ChatType.TellOutgoing] = ColourUtil.ComponentsToRgba(224, 176, 224), [ChatType.Party] = ColourUtil.ComponentsToRgba(176, 204, 224), [ChatType.Alliance] = ColourUtil.ComponentsToRgba(224, 192, 160), [ChatType.FreeCompany] = ColourUtil.ComponentsToRgba(168, 200, 224), [ChatType.NoviceNetwork] = ColourUtil.ComponentsToRgba(200, 224, 176), [ChatType.Linkshell1] = ColourUtil.ComponentsToRgba(224, 176, 176), [ChatType.Linkshell2] = ColourUtil.ComponentsToRgba(224, 200, 176), [ChatType.Linkshell3] = ColourUtil.ComponentsToRgba(224, 224, 176), [ChatType.Linkshell4] = ColourUtil.ComponentsToRgba(200, 224, 176), [ChatType.Linkshell5] = ColourUtil.ComponentsToRgba(176, 224, 200), [ChatType.Linkshell6] = ColourUtil.ComponentsToRgba(176, 200, 224), [ChatType.Linkshell7] = ColourUtil.ComponentsToRgba(200, 176, 224), [ChatType.Linkshell8] = ColourUtil.ComponentsToRgba(224, 176, 200), [ChatType.CrossLinkshell1] = ColourUtil.ComponentsToRgba(224, 160, 160), [ChatType.CrossLinkshell2] = ColourUtil.ComponentsToRgba(224, 192, 160), [ChatType.CrossLinkshell3] = ColourUtil.ComponentsToRgba(224, 224, 160), [ChatType.CrossLinkshell4] = ColourUtil.ComponentsToRgba(192, 224, 160), [ChatType.CrossLinkshell5] = ColourUtil.ComponentsToRgba(160, 224, 192), [ChatType.CrossLinkshell6] = ColourUtil.ComponentsToRgba(160, 192, 224), [ChatType.CrossLinkshell7] = ColourUtil.ComponentsToRgba(192, 160, 224), [ChatType.CrossLinkshell8] = ColourUtil.ComponentsToRgba(224, 160, 192), }; } private static IReadOnlyDictionary BuildDarkModeTuned() { return new Dictionary { [ChatType.Say] = ColourUtil.ComponentsToRgba(240, 240, 240), [ChatType.Yell] = ColourUtil.ComponentsToRgba(255, 208, 64), [ChatType.Shout] = ColourUtil.ComponentsToRgba(255, 128, 64), [ChatType.TellIncoming] = ColourUtil.ComponentsToRgba(255, 160, 255), [ChatType.TellOutgoing] = ColourUtil.ComponentsToRgba(255, 160, 255), [ChatType.Party] = ColourUtil.ComponentsToRgba(160, 208, 255), [ChatType.Alliance] = ColourUtil.ComponentsToRgba(255, 160, 96), [ChatType.FreeCompany] = ColourUtil.ComponentsToRgba(128, 200, 255), [ChatType.NoviceNetwork] = ColourUtil.ComponentsToRgba(192, 255, 96), [ChatType.Linkshell1] = ColourUtil.ComponentsToRgba(255, 160, 160), [ChatType.Linkshell2] = ColourUtil.ComponentsToRgba(255, 192, 160), [ChatType.Linkshell3] = ColourUtil.ComponentsToRgba(255, 255, 160), [ChatType.Linkshell4] = ColourUtil.ComponentsToRgba(192, 255, 160), [ChatType.Linkshell5] = ColourUtil.ComponentsToRgba(160, 255, 192), [ChatType.Linkshell6] = ColourUtil.ComponentsToRgba(160, 192, 255), [ChatType.Linkshell7] = ColourUtil.ComponentsToRgba(192, 160, 255), [ChatType.Linkshell8] = ColourUtil.ComponentsToRgba(255, 160, 192), [ChatType.CrossLinkshell1] = ColourUtil.ComponentsToRgba(255, 128, 128), [ChatType.CrossLinkshell2] = ColourUtil.ComponentsToRgba(255, 160, 128), [ChatType.CrossLinkshell3] = ColourUtil.ComponentsToRgba(255, 255, 128), [ChatType.CrossLinkshell4] = ColourUtil.ComponentsToRgba(160, 255, 128), [ChatType.CrossLinkshell5] = ColourUtil.ComponentsToRgba(128, 255, 160), [ChatType.CrossLinkshell6] = ColourUtil.ComponentsToRgba(128, 160, 255), [ChatType.CrossLinkshell7] = ColourUtil.ComponentsToRgba(160, 128, 255), [ChatType.CrossLinkshell8] = ColourUtil.ComponentsToRgba(255, 128, 160), }; } // Hellion brand preset — blau-violetter Akzent passend zum // Event-Horizon-Theme. Source-of-Truth für Brand-Farben dokumentiert // im Vault unter Systeme/KAZAMA. Bei Theme-Updates hier mit-anpassen // und ein Plugin-Release rausgeben. private static IReadOnlyDictionary BuildHellion() { return new Dictionary { [ChatType.Say] = ColourUtil.ComponentsToRgba(224, 224, 248), [ChatType.Yell] = ColourUtil.ComponentsToRgba(200, 168, 255), [ChatType.Shout] = ColourUtil.ComponentsToRgba(160, 128, 255), [ChatType.TellIncoming] = ColourUtil.ComponentsToRgba(255, 160, 232), [ChatType.TellOutgoing] = ColourUtil.ComponentsToRgba(255, 160, 232), [ChatType.Party] = ColourUtil.ComponentsToRgba(128, 176, 255), [ChatType.Alliance] = ColourUtil.ComponentsToRgba(192, 144, 255), [ChatType.FreeCompany] = ColourUtil.ComponentsToRgba(96, 144, 255), [ChatType.NoviceNetwork] = ColourUtil.ComponentsToRgba(176, 224, 255), [ChatType.Linkshell1] = ColourUtil.ComponentsToRgba(192, 160, 255), [ChatType.Linkshell2] = ColourUtil.ComponentsToRgba(160, 160, 255), [ChatType.Linkshell3] = ColourUtil.ComponentsToRgba(128, 160, 255), [ChatType.Linkshell4] = ColourUtil.ComponentsToRgba(128, 192, 255), [ChatType.Linkshell5] = ColourUtil.ComponentsToRgba(128, 224, 255), [ChatType.Linkshell6] = ColourUtil.ComponentsToRgba(160, 224, 255), [ChatType.Linkshell7] = ColourUtil.ComponentsToRgba(192, 224, 255), [ChatType.Linkshell8] = ColourUtil.ComponentsToRgba(224, 192, 255), [ChatType.CrossLinkshell1] = ColourUtil.ComponentsToRgba(176, 128, 255), [ChatType.CrossLinkshell2] = ColourUtil.ComponentsToRgba(144, 128, 255), [ChatType.CrossLinkshell3] = ColourUtil.ComponentsToRgba(128, 128, 255), [ChatType.CrossLinkshell4] = ColourUtil.ComponentsToRgba(128, 160, 255), [ChatType.CrossLinkshell5] = ColourUtil.ComponentsToRgba(128, 192, 255), [ChatType.CrossLinkshell6] = ColourUtil.ComponentsToRgba(160, 192, 255), [ChatType.CrossLinkshell7] = ColourUtil.ComponentsToRgba(192, 160, 255), [ChatType.CrossLinkshell8] = ColourUtil.ComponentsToRgba(224, 160, 255), }; } }