docs: unify documentation and streamline code comments
- Translated project documentation (LEARNING-JOURNEY, CONTRIBUTORS, AI_DISCLOSURE) to English for better accessibility. - Standardized internal code documentation by converting XML-doc blocks to standard comment format. - Cleaned up inline comments and removed redundant versioning metadata across the codebase. - Refactored non-functional text elements to improve readability and maintain a consistent style.
This commit is contained in:
@@ -1,34 +1,17 @@
|
||||
namespace HellionChat.Ui;
|
||||
|
||||
/// <summary>
|
||||
/// Hash-Color-Tinting für Auto-Tell-Tabs in der Sidebar (v1.2.0).
|
||||
/// Differenziert Tells visuell ohne dass User pro Tab manuell ein
|
||||
/// Custom-Icon setzen muss. Gleicher Tell-Partner (Name+World) liefert
|
||||
/// konsistent dieselbe Farbe über Sessions hinweg.
|
||||
///
|
||||
/// Kuratierte 12-Farb-Palette aus dem Hellion-Theme-Pool: alle saturiert
|
||||
/// mid-bright, lesbar gegen Dark-Theme-Backgrounds. Bei realistischen
|
||||
/// 1-5 parallelen Tells ist Kollisions-Wahrscheinlichkeit gering.
|
||||
///
|
||||
/// Reine String-Logik (kein Dalamud-Dep) — testbar im HellionChat.Tests-
|
||||
/// Projekt das ohne Dalamud-Reference baut.
|
||||
/// </summary>
|
||||
// Deterministic hash-based color and icon tinting for Auto-Tell sidebar tabs.
|
||||
// Same tell partner (name+world) always produces the same color and icon across
|
||||
// sessions. Pure string logic, no Dalamud dependency — testable without game refs.
|
||||
internal static class AutoTellTabTint
|
||||
{
|
||||
/// <summary>
|
||||
/// Fallback bei ungültigem Input (leerer Name, World=0). Standard-
|
||||
/// Text-Color (weiß) — passt mit existierendem TextPrimary-Default
|
||||
/// zusammen, sodass die Sidebar visuell konsistent bleibt.
|
||||
/// </summary>
|
||||
// Fallback for invalid input (empty name or world=0). White matches
|
||||
// TextPrimary default so the sidebar stays visually consistent.
|
||||
public const uint Fallback = 0xFFFFFFFFu;
|
||||
|
||||
/// <summary>
|
||||
/// 12 saturierte mid-bright Farben aus den 5 Built-In-Themes
|
||||
/// (Hellion-Arctic, Chat2-Klassik, Event-Horizon, Moonlit-Bloom,
|
||||
/// Mint-Grove). Reihenfolge ist deterministisch — Hash-Index wählt
|
||||
/// Farbe per Modulo. RGBA-Format (passt zu ColourUtil.RgbaToAbgr-
|
||||
/// Konvention im restlichen Code).
|
||||
/// </summary>
|
||||
// 12 saturated mid-bright colors from the built-in theme pool, readable
|
||||
// on dark backgrounds. Collision risk is low at realistic 1-5 active tells.
|
||||
// RGBA format, matching ColourUtil.RgbaToAbgr convention.
|
||||
public static readonly IReadOnlyList<uint> Palette = new uint[]
|
||||
{
|
||||
0x00BED2FFu, // Arctic Cyan
|
||||
@@ -45,30 +28,19 @@ internal static class AutoTellTabTint
|
||||
0xE85D04FFu, // Deep Ember
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Liefert eine konsistente Tint-Color für einen Tell-Partner.
|
||||
/// Hash basiert auf "Name@World" — Cross-World-Namen kollidieren
|
||||
/// nur bei Hash-Bucket-Kollision, nicht durch Identitäts-Annahme.
|
||||
/// </summary>
|
||||
public static uint For(string name, uint world)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name) || world == 0)
|
||||
return Fallback;
|
||||
|
||||
// GetHashCode kann negativ sein; Bitmaske auf positive Range
|
||||
// damit Modulo-Division immer einen validen Index liefert.
|
||||
// Mask to positive range so modulo always yields a valid index.
|
||||
var key = $"{name}@{world}";
|
||||
var hash = (uint)(key.GetHashCode() & 0x7FFFFFFF);
|
||||
return Palette[(int)(hash % Palette.Count)];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tell-spezifischer Icon-Pool. 7 visuell distinkte FontAwesome-Glyphen
|
||||
/// die im Tell-Kontext sinnvoll wirken (envelope = Tell-Default, star/
|
||||
/// heart/bell = personalisiert, bookmark/flag/fire = markiert/wichtig).
|
||||
/// Bewusst kein cog/comment/users — die wären für System-/Group-Tabs
|
||||
/// reserviert und würden im Tell-Bereich verwirrend wirken.
|
||||
/// </summary>
|
||||
// 7 visually distinct FA glyphs that make sense in a tell context.
|
||||
// Excludes cog/comment/users — those read as system or group tabs.
|
||||
public static readonly IReadOnlyList<string> IconPool = new[]
|
||||
{
|
||||
"envelope",
|
||||
@@ -80,26 +52,17 @@ internal static class AutoTellTabTint
|
||||
"fire",
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Fallback-Icon bei ungültigem Input. "envelope" passt semantisch zum
|
||||
/// Tell-Kontext besser als das alte hardcoded "clock".
|
||||
/// </summary>
|
||||
// "envelope" matches the tell context better than the old hardcoded "clock".
|
||||
public const string IconFallback = "envelope";
|
||||
|
||||
/// <summary>
|
||||
/// Liefert ein konsistentes Icon-Glyph für einen Tell-Partner.
|
||||
/// Nutzt einen anderen Hash-Bias als For() (Color), damit Icon und
|
||||
/// Color unabhängig variieren — gibt 7 × 12 = 84 distinct Combinations.
|
||||
/// </summary>
|
||||
public static string IconFor(string name, uint world)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name) || world == 0)
|
||||
return IconFallback;
|
||||
|
||||
// Anderer Hash-Bias als For() (verschiedene Modulo-Basis): wir
|
||||
// nutzen "world@name" statt "name@world" damit Icon und Color
|
||||
// nicht synchron variieren. Ohne Bias-Trennung würden alle Tells
|
||||
// mit derselben Color auch dasselbe Icon haben.
|
||||
// Reversed key ("world@name") gives icon and color independent variation
|
||||
// so the same tell partner doesn't always get the same color+icon pair.
|
||||
// 7 icons x 12 colors = 84 distinct combinations.
|
||||
var key = $"{world}@{name}";
|
||||
var hash = (uint)(key.GetHashCode() & 0x7FFFFFFF);
|
||||
return IconPool[(int)(hash % IconPool.Count)];
|
||||
|
||||
Reference in New Issue
Block a user