Files
HSUI/Extensions.cs
T

140 lines
4.4 KiB
C#

using System;
using System.Globalization;
using System.Numerics;
using System.Text;
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Game.Text.SeStringHandling;
using HSUI.Config;
using HSUI.Interface.Bars;
using FFXIVClientStructs.FFXIV.Client.System.String;
using static System.Globalization.CultureInfo;
namespace HSUI
{
public static class Extensions
{
public static string Abbreviate(this string str)
{
if (str.Length > 20) {
string[] splits = str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < splits.Length - 1; i++)
{
splits[i] = splits[i][0].ToString();
}
return string.Join(". ", splits).ToString();
}
return str;
}
public static string FirstName(this string str)
{
string[] splits = str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
return splits.Length > 0 ? splits[0] : "";
}
public static string LastName(this string str)
{
string[] splits = str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
return splits.Length > 1 ? splits[^1] : "";
}
public static string Initials(this string str)
{
var initials = "";
var firstName = FirstName(str);
var lastName = LastName(str);
if (firstName.Length > 0)
{
initials = firstName[0] + ".";
}
if (lastName.Length > 0)
{
initials += " " + lastName[0] + ".";
}
return initials;
}
public static string Truncated(this string str, int length = 0)
{
return length > 0 ? str.Substring(0, Math.Min(str.Length, length)) : str;
}
public static Vector4 AdjustColor(this Vector4 vec, float correctionFactor)
{
float red = vec.X;
float green = vec.Y;
float blue = vec.Z;
if (correctionFactor < 0)
{
correctionFactor = 1 + correctionFactor;
red *= correctionFactor;
green *= correctionFactor;
blue *= correctionFactor;
}
else
{
red = (1 - red) * correctionFactor + red;
green = (1 - green) * correctionFactor + green;
blue = (1 - blue) * correctionFactor + blue;
}
return new Vector4(red, green, blue, vec.W);
}
public static Vector4 WithNewAlpha(this Vector4 vec, float alpha)
{
return new Vector4(vec.X, vec.Y, vec.Z, alpha);
}
public static string KiloFormat(this uint num)
{
return num switch
{
>= 100000000 => (num / 1000000.0).ToString("#,0M", ConfigurationManager.Instance.ActiveCultreInfo),
>= 1000000 => (num / 1000000.0).ToString("0.0", ConfigurationManager.Instance.ActiveCultreInfo) + "M",
>= 100000 => (num / 1000.0).ToString("#,0K", ConfigurationManager.Instance.ActiveCultreInfo),
>= 10000 => (num / 1000.0).ToString("0.0", ConfigurationManager.Instance.ActiveCultreInfo) + "K",
_ => num.ToString("#,0", ConfigurationManager.Instance.ActiveCultreInfo)
};
}
public static bool IsHorizontal(this BarDirection direction)
{
return direction == BarDirection.Right || direction == BarDirection.Left;
}
public static bool IsInverted(this BarDirection direction)
{
return direction == BarDirection.Left || direction == BarDirection.Up;
}
public static void Draw(this BarHud[] bars, Vector2 origin)
{
foreach (BarHud bar in bars)
{
bar.Draw(origin);
}
}
public static string CheckForUpperCase(this string str)
{
var culture = CurrentCulture.TextInfo;
if (!string.IsNullOrEmpty(str) && char.IsLetter(str[0]) && !char.IsUpper(str[0]))
{
str = culture.ToTitleCase(str);
}
return str;
}
public static string Repeat(this string s, int n)
=> new StringBuilder(s.Length * n).Insert(0, s, n).ToString();
}
}