Code cleanup (#2439)

* Use new Lock objects

* Fix CA1513: Use ObjectDisposedException.ThrowIf

* Fix CA1860: Avoid using 'Enumerable.Any()' extension method

* Fix IDE0028: Use collection initializers or expressions

* Fix CA2263: Prefer generic overload when type is known

* Fix CA1862: Use the 'StringComparison' method overloads to perform case-insensitive string comparisons

* Fix IDE0270: Null check can be simplified

* Fix IDE0280: Use 'nameof'

* Fix IDE0009: Add '.this'

* Fix IDE0007: Use 'var' instead of explicit type

* Fix IDE0062: Make local function static

* Fix CA1859: Use concrete types when possible for improved performance

* Fix IDE0066: Use switch expression

Only applied to where it doesn't look horrendous.

* Use is over switch

* Fix CA1847: Use String.Contains(char) instead of String.Contains(string) with single characters

* Fix SYSLIB1045: Use 'GeneratedRegexAttribute' to generate the regular expression implementation at compile-time.

* Fix CA1866: Use 'string.EndsWith(char)' instead of 'string.EndsWith(string)' when you have a string with a single char

* Fix IDE0057: Substring can be simplified

* Fix IDE0059: Remove unnecessary value assignment

* Fix CA1510: Use ArgumentNullException throw helper

* Fix IDE0300: Use collection expression for array

* Fix IDE0250: Struct can be made 'readonly'

* Fix IDE0018: Inline variable declaration

* Fix CA1850: Prefer static HashData method over ComputeHash

* Fi CA1872: Prefer 'Convert.ToHexString' and 'Convert.ToHexStringLower' over call chains based on 'BitConverter.ToString'

* Update ModuleLog instantiations

* Organize usings
This commit is contained in:
Haselnussbomber 2026-01-06 17:36:55 +01:00 committed by GitHub
parent 27414d33dd
commit c93f04f0e4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
295 changed files with 830 additions and 932 deletions

View file

@ -10,7 +10,6 @@ using System.Threading.Tasks;
using Dalamud.Game.Text;
using Dalamud.Interface;
using Dalamud.Interface.FontIdentifier;
using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Internal;
using Dalamud.Interface.Internal.ReShadeHandling;
using Dalamud.Interface.Style;
@ -20,9 +19,12 @@ using Dalamud.Plugin.Internal.AutoUpdate;
using Dalamud.Plugin.Internal.Profiles;
using Dalamud.Storage;
using Dalamud.Utility;
using Newtonsoft.Json;
using Serilog;
using Serilog.Events;
using Windows.Win32.UI.WindowsAndMessaging;
namespace Dalamud.Configuration.Internal;
@ -91,7 +93,7 @@ internal sealed class DalamudConfiguration : IInternalDisposableService
/// <summary>
/// Gets or sets a dictionary of seen FTUE levels.
/// </summary>
public Dictionary<string, int> SeenFtueLevels { get; set; } = new();
public Dictionary<string, int> SeenFtueLevels { get; set; } = [];
/// <summary>
/// Gets or sets the last loaded Dalamud version.
@ -111,7 +113,7 @@ internal sealed class DalamudConfiguration : IInternalDisposableService
/// <summary>
/// Gets or sets a list of custom repos.
/// </summary>
public List<ThirdPartyRepoSettings> ThirdRepoList { get; set; } = new();
public List<ThirdPartyRepoSettings> ThirdRepoList { get; set; } = [];
/// <summary>
/// Gets or sets a value indicating whether a disclaimer regarding third-party repos has been dismissed.
@ -121,12 +123,12 @@ internal sealed class DalamudConfiguration : IInternalDisposableService
/// <summary>
/// Gets or sets a list of hidden plugins.
/// </summary>
public List<string> HiddenPluginInternalName { get; set; } = new();
public List<string> HiddenPluginInternalName { get; set; } = [];
/// <summary>
/// Gets or sets a list of seen plugins.
/// </summary>
public List<string> SeenPluginInternalName { get; set; } = new();
public List<string> SeenPluginInternalName { get; set; } = [];
/// <summary>
/// Gets or sets a list of additional settings for devPlugins. The key is the absolute path
@ -134,14 +136,14 @@ internal sealed class DalamudConfiguration : IInternalDisposableService
/// However by specifiying this value manually, you can add arbitrary files outside the normal
/// file paths.
/// </summary>
public Dictionary<string, DevPluginSettings> DevPluginSettings { get; set; } = new();
public Dictionary<string, DevPluginSettings> DevPluginSettings { get; set; } = [];
/// <summary>
/// Gets or sets a list of additional locations that dev plugins should be loaded from. This can
/// be either a DLL or folder, but should be the absolute path, or a path relative to the currently
/// injected Dalamud instance.
/// </summary>
public List<DevPluginLocationSettings> DevPluginLoadLocations { get; set; } = new();
public List<DevPluginLocationSettings> DevPluginLoadLocations { get; set; } = [];
/// <summary>
/// Gets or sets the global UI scale.
@ -223,7 +225,7 @@ internal sealed class DalamudConfiguration : IInternalDisposableService
/// <summary>
/// Gets or sets a list representing the command history for the Dalamud Console.
/// </summary>
public List<string> LogCommandHistory { get; set; } = new();
public List<string> LogCommandHistory { get; set; } = [];
/// <summary>
/// Gets or sets a value indicating whether the dev bar should open at startup.
@ -599,7 +601,7 @@ internal sealed class DalamudConfiguration : IInternalDisposableService
{
// https://source.chromium.org/chromium/chromium/src/+/main:ui/gfx/animation/animation_win.cc;l=29?q=ReducedMotion&ss=chromium
var winAnimEnabled = 0;
var success = false;
bool success;
unsafe
{
success = Windows.Win32.PInvoke.SystemParametersInfo(

View file

@ -31,5 +31,5 @@ internal sealed class DevPluginSettings
/// <summary>
/// Gets or sets a list of validation problems that have been dismissed by the user.
/// </summary>
public List<string> DismissedValidationProblems { get; set; } = new();
public List<string> DismissedValidationProblems { get; set; } = [];
}

View file

@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text.RegularExpressions;
@ -17,9 +17,9 @@ namespace Dalamud.Console;
[ServiceManager.BlockingEarlyLoadedService("Console is needed by other blocking early loaded services.")]
internal partial class ConsoleManager : IServiceType
{
private static readonly ModuleLog Log = new("CON");
private static readonly ModuleLog Log = ModuleLog.Create<ConsoleManager>();
private Dictionary<string, IConsoleEntry> entries = new();
private Dictionary<string, IConsoleEntry> entries = [];
/// <summary>
/// Initializes a new instance of the <see cref="ConsoleManager"/> class.
@ -99,10 +99,7 @@ internal partial class ConsoleManager : IServiceType
ArgumentNullException.ThrowIfNull(name);
ArgumentNullException.ThrowIfNull(alias);
var target = this.FindEntry(name);
if (target == null)
throw new EntryNotFoundException(name);
var target = this.FindEntry(name) ?? throw new EntryNotFoundException(name);
if (this.FindEntry(alias) != null)
throw new InvalidOperationException($"Entry '{alias}' already exists.");
@ -346,7 +343,7 @@ internal partial class ConsoleManager : IServiceType
private static class Traits
{
public static void ThrowIfTIsNullableAndNull<T>(T? argument, [CallerArgumentExpression("argument")] string? paramName = null)
public static void ThrowIfTIsNullableAndNull<T>(T? argument, [CallerArgumentExpression(nameof(argument))] string? paramName = null)
{
if (argument == null && !typeof(T).IsValueType)
throw new ArgumentNullException(paramName);

View file

@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
@ -65,7 +65,7 @@ internal class ConsoleManagerPluginScoped : IConsole, IInternalDisposableService
[ServiceManager.ServiceDependency]
private readonly ConsoleManager console = Service<ConsoleManager>.Get();
private readonly List<IConsoleEntry> trackedEntries = new();
private readonly List<IConsoleEntry> trackedEntries = [];
/// <summary>
/// Initializes a new instance of the <see cref="ConsoleManagerPluginScoped"/> class.

View file

@ -14,7 +14,9 @@ using Dalamud.Plugin.Internal;
using Dalamud.Storage;
using Dalamud.Utility;
using Dalamud.Utility.Timing;
using Serilog;
using Windows.Win32.Foundation;
using Windows.Win32.Security;

View file

@ -8,11 +8,13 @@ using Dalamud.IoC.Internal;
using Dalamud.Plugin.Services;
using Dalamud.Utility;
using Dalamud.Utility.Timing;
using Lumina;
using Lumina.Data;
using Lumina.Excel;
using Newtonsoft.Json;
using Serilog;
namespace Dalamud.Data;

View file

@ -3,7 +3,9 @@ using System.Collections.Generic;
using Dalamud.Hooking;
using Dalamud.Logging.Internal;
using Dalamud.Memory;
using FFXIVClientStructs.FFXIV.Client.LayoutEngine;
using Lumina.Text.ReadOnly;
namespace Dalamud.Data;
@ -13,7 +15,7 @@ namespace Dalamud.Data;
/// </summary>
internal sealed unsafe class RsvResolver : IDisposable
{
private static readonly ModuleLog Log = new("RsvProvider");
private static readonly ModuleLog Log = ModuleLog.Create<RsvResolver>();
private readonly Hook<LayoutWorld.Delegates.AddRsvString> addRsvStringHook;

View file

@ -1,8 +1,6 @@
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
@ -16,10 +14,13 @@ using Dalamud.Plugin.Internal;
using Dalamud.Storage;
using Dalamud.Support;
using Dalamud.Utility;
using Newtonsoft.Json;
using Serilog;
using Serilog.Core;
using Serilog.Events;
using Windows.Win32.Foundation;
using Windows.Win32.UI.WindowsAndMessaging;

View file

@ -1,5 +1,4 @@
using Dalamud.Plugin.Services;
using Dalamud.Utility;
using FFXIVClientStructs.FFXIV.Component.GUI;

View file

@ -24,7 +24,7 @@ internal unsafe class AddonEventManager : IInternalDisposableService
/// </summary>
public static readonly Guid DalamudInternalKey = Guid.NewGuid();
private static readonly ModuleLog Log = new("AddonEventManager");
private static readonly ModuleLog Log = ModuleLog.Create<AddonEventManager>();
[ServiceManager.ServiceDependency]
private readonly AddonLifecycle addonLifecycle = Service<AddonLifecycle>.Get();

View file

@ -5,7 +5,6 @@ using Dalamud.Game.Addon.Events.EventDataTypes;
using Dalamud.Game.Gui;
using Dalamud.Logging.Internal;
using Dalamud.Plugin.Services;
using Dalamud.Utility;
using FFXIVClientStructs.FFXIV.Component.GUI;
@ -16,7 +15,7 @@ namespace Dalamud.Game.Addon.Events;
/// </summary>
internal unsafe class PluginEventController : IDisposable
{
private static readonly ModuleLog Log = new("AddonEventManager");
private static readonly ModuleLog Log = ModuleLog.Create<AddonEventManager>();
/// <summary>
/// Initializes a new instance of the <see cref="PluginEventController"/> class.
@ -28,7 +27,7 @@ internal unsafe class PluginEventController : IDisposable
private AddonEventListener EventListener { get; init; }
private List<AddonEventEntry> Events { get; } = new();
private List<AddonEventEntry> Events { get; } = [];
/// <summary>
/// Adds a tracked event.

View file

@ -25,7 +25,7 @@ internal unsafe class AddonLifecycle : IInternalDisposableService
/// </summary>
public static readonly List<AddonVirtualTable> AllocatedTables = [];
private static readonly ModuleLog Log = new("AddonLifecycle");
private static readonly ModuleLog Log = ModuleLog.Create<AddonLifecycle>();
private Hook<AtkUnitBase.Delegates.Initialize>? onInitializeAddonHook;

View file

@ -14,7 +14,7 @@ public abstract class BaseAddressResolver
/// <summary>
/// Gets a list of memory addresses that were found, to list in /xldata.
/// </summary>
public static Dictionary<string, List<(string ClassName, IntPtr Address)>> DebugScannedValues { get; } = new();
public static Dictionary<string, List<(string ClassName, IntPtr Address)>> DebugScannedValues { get; } = [];
/// <summary>
/// Gets or sets a value indicating whether the resolver has successfully run <see cref="Setup32Bit(ISigScanner)"/> or <see cref="Setup64Bit(ISigScanner)"/>.

View file

@ -1,5 +1,4 @@
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using CheapLoc;
@ -23,7 +22,7 @@ namespace Dalamud.Game;
[ServiceManager.EarlyLoadedService]
internal partial class ChatHandlers : IServiceType
{
private static readonly ModuleLog Log = new("ChatHandlers");
private static readonly ModuleLog Log = ModuleLog.Create<ChatHandlers>();
[ServiceManager.ServiceDependency]
private readonly DalamudConfiguration configuration = Service<DalamudConfiguration>.Get();

View file

@ -8,6 +8,7 @@ using Dalamud.Plugin.Services;
using Dalamud.Utility;
using FFXIVClientStructs.FFXIV.Client.Game.UI;
using Serilog;
namespace Dalamud.Game.ClientState.Aetherytes;

View file

@ -33,7 +33,7 @@ namespace Dalamud.Game.ClientState;
[ServiceManager.EarlyLoadedService]
internal sealed class ClientState : IInternalDisposableService, IClientState
{
private static readonly ModuleLog Log = new("ClientState");
private static readonly ModuleLog Log = ModuleLog.Create<ClientState>();
private readonly GameLifecycle lifecycle;
private readonly ClientStateAddressResolver address;

View file

@ -5,7 +5,9 @@ using Dalamud.Hooking;
using Dalamud.IoC;
using Dalamud.IoC.Internal;
using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Client.System.Input;
using Serilog;
namespace Dalamud.Game.ClientState.GamePad;

View file

@ -37,7 +37,7 @@ internal class JobGauges : IServiceType, IJobGauges
// Since the gauge itself reads from live memory, there isn't much downside to doing this.
if (!this.cache.TryGetValue(typeof(T), out var gauge))
{
gauge = this.cache[typeof(T)] = (T)Activator.CreateInstance(typeof(T), BindingFlags.NonPublic | BindingFlags.Instance, null, new object[] { this.Address }, null);
gauge = this.cache[typeof(T)] = (T)Activator.CreateInstance(typeof(T), BindingFlags.NonPublic | BindingFlags.Instance, null, [this.Address], null);
}
return (T)gauge;

View file

@ -1,4 +1,5 @@
using Dalamud.Game.ClientState.JobGauge.Enums;
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
namespace Dalamud.Game.ClientState.JobGauge.Types;
@ -82,12 +83,12 @@ public unsafe class BRDGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game
{
get
{
return new[]
{
return
[
this.Struct->SongFlags.HasFlag(SongFlags.MagesBalladCoda) ? Song.Mage : Song.None,
this.Struct->SongFlags.HasFlag(SongFlags.ArmysPaeonCoda) ? Song.Army : Song.None,
this.Struct->SongFlags.HasFlag(SongFlags.WanderersMinuetCoda) ? Song.Wanderer : Song.None,
};
];
}
}
}

View file

@ -1,4 +1,5 @@
using Dalamud.Game.ClientState.JobGauge.Enums;
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
namespace Dalamud.Game.ClientState.JobGauge.Types;

View file

@ -1,4 +1,4 @@
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
using CanvasFlags = Dalamud.Game.ClientState.JobGauge.Enums.CanvasFlags;
using CreatureFlags = Dalamud.Game.ClientState.JobGauge.Enums.CreatureFlags;
@ -22,45 +22,45 @@ public unsafe class PCTGauge : JobGaugeBase<PictomancerGauge>
/// <summary>
/// Gets the use of subjective pallete.
/// </summary>
public byte PalleteGauge => Struct->PalleteGauge;
public byte PalleteGauge => this.Struct->PalleteGauge;
/// <summary>
/// Gets the amount of paint the player has.
/// </summary>
public byte Paint => Struct->Paint;
public byte Paint => this.Struct->Paint;
/// <summary>
/// Gets a value indicating whether a creature motif is drawn.
/// </summary>
public bool CreatureMotifDrawn => Struct->CreatureMotifDrawn;
public bool CreatureMotifDrawn => this.Struct->CreatureMotifDrawn;
/// <summary>
/// Gets a value indicating whether a weapon motif is drawn.
/// </summary>
public bool WeaponMotifDrawn => Struct->WeaponMotifDrawn;
public bool WeaponMotifDrawn => this.Struct->WeaponMotifDrawn;
/// <summary>
/// Gets a value indicating whether a landscape motif is drawn.
/// </summary>
public bool LandscapeMotifDrawn => Struct->LandscapeMotifDrawn;
public bool LandscapeMotifDrawn => this.Struct->LandscapeMotifDrawn;
/// <summary>
/// Gets a value indicating whether a moogle portrait is ready.
/// </summary>
public bool MooglePortraitReady => Struct->MooglePortraitReady;
public bool MooglePortraitReady => this.Struct->MooglePortraitReady;
/// <summary>
/// Gets a value indicating whether a madeen portrait is ready.
/// </summary>
public bool MadeenPortraitReady => Struct->MadeenPortraitReady;
public bool MadeenPortraitReady => this.Struct->MadeenPortraitReady;
/// <summary>
/// Gets which creature flags are present.
/// </summary>
public CreatureFlags CreatureFlags => (CreatureFlags)Struct->CreatureFlags;
public CreatureFlags CreatureFlags => (CreatureFlags)this.Struct->CreatureFlags;
/// <summary>
/// Gets which canvas flags are present.
/// </summary>
public CanvasFlags CanvasFlags => (CanvasFlags)Struct->CanvasFlags;
public CanvasFlags CanvasFlags => (CanvasFlags)this.Struct->CanvasFlags;
}

View file

@ -1,4 +1,5 @@
using Dalamud.Game.ClientState.JobGauge.Enums;
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
namespace Dalamud.Game.ClientState.JobGauge.Types;

View file

@ -1,7 +1,5 @@
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
using Reloaded.Memory;
using DreadCombo = Dalamud.Game.ClientState.JobGauge.Enums.DreadCombo;
using SerpentCombo = Dalamud.Game.ClientState.JobGauge.Enums.SerpentCombo;
@ -24,25 +22,25 @@ public unsafe class VPRGauge : JobGaugeBase<ViperGauge>
/// <summary>
/// Gets how many uses of uncoiled fury the player has.
/// </summary>
public byte RattlingCoilStacks => Struct->RattlingCoilStacks;
public byte RattlingCoilStacks => this.Struct->RattlingCoilStacks;
/// <summary>
/// Gets Serpent Offering stacks and gauge.
/// </summary>
public byte SerpentOffering => Struct->SerpentOffering;
public byte SerpentOffering => this.Struct->SerpentOffering;
/// <summary>
/// Gets value indicating the use of 1st, 2nd, 3rd, 4th generation and Ouroboros.
/// </summary>
public byte AnguineTribute => Struct->AnguineTribute;
public byte AnguineTribute => this.Struct->AnguineTribute;
/// <summary>
/// Gets the last Weaponskill used in DreadWinder/Pit of Dread combo.
/// </summary>
public DreadCombo DreadCombo => (DreadCombo)Struct->DreadCombo;
public DreadCombo DreadCombo => (DreadCombo)this.Struct->DreadCombo;
/// <summary>
/// Gets current ability for Serpent's Tail.
/// </summary>
public SerpentCombo SerpentCombo => (SerpentCombo)Struct->SerpentCombo;
public SerpentCombo SerpentCombo => (SerpentCombo)this.Struct->SerpentCombo;
}

View file

@ -30,50 +30,50 @@ internal sealed unsafe class TargetManager : IServiceType, ITargetManager
/// <inheritdoc/>
public IGameObject? Target
{
get => this.objectTable.CreateObjectReference((IntPtr)Struct->GetHardTarget());
set => Struct->SetHardTarget((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address);
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->GetHardTarget());
set => this.Struct->SetHardTarget((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address);
}
/// <inheritdoc/>
public IGameObject? MouseOverTarget
{
get => this.objectTable.CreateObjectReference((IntPtr)Struct->MouseOverTarget);
set => Struct->MouseOverTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->MouseOverTarget);
set => this.Struct->MouseOverTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
}
/// <inheritdoc/>
public IGameObject? FocusTarget
{
get => this.objectTable.CreateObjectReference((IntPtr)Struct->FocusTarget);
set => Struct->FocusTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->FocusTarget);
set => this.Struct->FocusTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
}
/// <inheritdoc/>
public IGameObject? PreviousTarget
{
get => this.objectTable.CreateObjectReference((IntPtr)Struct->PreviousTarget);
set => Struct->PreviousTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->PreviousTarget);
set => this.Struct->PreviousTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
}
/// <inheritdoc/>
public IGameObject? SoftTarget
{
get => this.objectTable.CreateObjectReference((IntPtr)Struct->GetSoftTarget());
set => Struct->SetSoftTarget((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address);
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->GetSoftTarget());
set => this.Struct->SetSoftTarget((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address);
}
/// <inheritdoc/>
public IGameObject? GPoseTarget
{
get => this.objectTable.CreateObjectReference((IntPtr)Struct->GPoseTarget);
set => Struct->GPoseTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->GPoseTarget);
set => this.Struct->GPoseTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
}
/// <inheritdoc/>
public IGameObject? MouseOverNameplateTarget
{
get => this.objectTable.CreateObjectReference((IntPtr)Struct->MouseOverNameplateTarget);
set => Struct->MouseOverNameplateTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->MouseOverNameplateTarget);
set => this.Struct->MouseOverNameplateTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
}
private TargetSystem* Struct => TargetSystem.Instance();

View file

@ -1,5 +1,4 @@
using Dalamud.Game.ClientState.Statuses;
using Dalamud.Utility;
namespace Dalamud.Game.ClientState.Objects.Types;

View file

@ -1,9 +1,6 @@
using System.Runtime.CompilerServices;
using Dalamud.Data;
using Dalamud.Game.ClientState.Objects.Enums;
using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Memory;
using Lumina.Excel;
using Lumina.Excel.Sheets;

View file

@ -47,7 +47,7 @@ internal sealed unsafe partial class PartyList : IServiceType, IPartyList
public unsafe nint GroupManagerAddress => (nint)CSGroupManager.Instance();
/// <inheritdoc/>
public nint GroupListAddress => (nint)Unsafe.AsPointer(ref GroupManagerStruct->MainGroup.PartyMembers[0]);
public nint GroupListAddress => (nint)Unsafe.AsPointer(ref this.GroupManagerStruct->MainGroup.PartyMembers[0]);
/// <inheritdoc/>
public nint AllianceListAddress => (nint)Unsafe.AsPointer(ref this.GroupManagerStruct->MainGroup.AllianceMembers[0]);

View file

@ -6,6 +6,7 @@ using Dalamud.Game.ClientState.Objects;
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Game.ClientState.Statuses;
using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Utility;
using Lumina.Excel;

View file

@ -38,7 +38,7 @@ public sealed unsafe partial class StatusList
/// <summary>
/// Gets the amount of status effect slots the actor has.
/// </summary>
public int Length => Struct->NumValidStatuses;
public int Length => this.Struct->NumValidStatuses;
private static int StatusSize { get; } = Marshal.SizeOf<FFXIVClientStructs.FFXIV.Client.Game.Status>();

View file

@ -24,7 +24,7 @@ namespace Dalamud.Game.Command;
[ServiceManager.EarlyLoadedService]
internal sealed unsafe class CommandManager : IInternalDisposableService, ICommandManager
{
private static readonly ModuleLog Log = new("Command");
private static readonly ModuleLog Log = ModuleLog.Create<CommandManager>();
private readonly ConcurrentDictionary<string, IReadOnlyCommandInfo> commandMap = new();
private readonly ConcurrentDictionary<(string, IReadOnlyCommandInfo), string> commandAssemblyNameMap = new();
@ -71,7 +71,7 @@ internal sealed unsafe class CommandManager : IInternalDisposableService, IComma
if (separatorPosition + 1 >= content.Length)
{
// Remove the trailing space
command = content.Substring(0, separatorPosition);
command = content[..separatorPosition];
}
else
{
@ -262,12 +262,12 @@ internal sealed unsafe class CommandManager : IInternalDisposableService, IComma
#pragma warning restore SA1015
internal class CommandManagerPluginScoped : IInternalDisposableService, ICommandManager
{
private static readonly ModuleLog Log = new("Command");
private static readonly ModuleLog Log = ModuleLog.Create<CommandManager>();
[ServiceManager.ServiceDependency]
private readonly CommandManager commandManagerService = Service<CommandManager>.Get();
private readonly List<string> pluginRegisteredCommands = new();
private readonly List<string> pluginRegisteredCommands = [];
private readonly LocalPlugin pluginInfo;
/// <summary>

View file

@ -1,11 +1,13 @@
using System.Threading.Tasks;
using System.Threading.Tasks;
using Dalamud.Hooking;
using Dalamud.IoC;
using Dalamud.IoC.Internal;
using Dalamud.Plugin.Services;
using Dalamud.Utility;
using FFXIVClientStructs.FFXIV.Common.Configuration;
using Serilog;
namespace Dalamud.Game.Config;

View file

@ -1,10 +1,12 @@
using System.Collections.Concurrent;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Text;
using Dalamud.Memory;
using Dalamud.Utility;
using FFXIVClientStructs.FFXIV.Common.Configuration;
using Serilog;
namespace Dalamud.Game.Config;

View file

@ -26,7 +26,7 @@ namespace Dalamud.Game;
[ServiceManager.EarlyLoadedService]
internal sealed class Framework : IInternalDisposableService, IFramework
{
private static readonly ModuleLog Log = new("Framework");
private static readonly ModuleLog Log = ModuleLog.Create<Framework>();
private static readonly Stopwatch StatsStopwatch = new();
@ -86,7 +86,7 @@ internal sealed class Framework : IInternalDisposableService, IFramework
/// <summary>
/// Gets the stats history mapping.
/// </summary>
public static Dictionary<string, List<double>> StatsHistory { get; } = new();
public static Dictionary<string, List<double>> StatsHistory { get; } = [];
/// <inheritdoc/>
public DateTime LastUpdate { get; private set; } = DateTime.MinValue;
@ -106,7 +106,7 @@ internal sealed class Framework : IInternalDisposableService, IFramework
/// <summary>
/// Gets the list of update sub-delegates that didn't get updated this frame.
/// </summary>
internal List<string> NonUpdatedSubDelegates { get; private set; } = new();
internal List<string> NonUpdatedSubDelegates { get; private set; } = [];
/// <summary>
/// Gets or sets a value indicating whether to dispatch update events.
@ -212,11 +212,10 @@ internal sealed class Framework : IInternalDisposableService, IFramework
if (cancellationToken == default)
cancellationToken = this.FrameworkThreadTaskFactory.CancellationToken;
return this.FrameworkThreadTaskFactory.ContinueWhenAll(
new[]
{
[
Task.Delay(delay, cancellationToken),
this.DelayTicks(delayTicks, cancellationToken),
},
],
_ => func(),
cancellationToken,
TaskContinuationOptions.HideScheduler,
@ -239,11 +238,10 @@ internal sealed class Framework : IInternalDisposableService, IFramework
if (cancellationToken == default)
cancellationToken = this.FrameworkThreadTaskFactory.CancellationToken;
return this.FrameworkThreadTaskFactory.ContinueWhenAll(
new[]
{
[
Task.Delay(delay, cancellationToken),
this.DelayTicks(delayTicks, cancellationToken),
},
],
_ => action(),
cancellationToken,
TaskContinuationOptions.HideScheduler,
@ -266,11 +264,10 @@ internal sealed class Framework : IInternalDisposableService, IFramework
if (cancellationToken == default)
cancellationToken = this.FrameworkThreadTaskFactory.CancellationToken;
return this.FrameworkThreadTaskFactory.ContinueWhenAll(
new[]
{
[
Task.Delay(delay, cancellationToken),
this.DelayTicks(delayTicks, cancellationToken),
},
],
_ => func(),
cancellationToken,
TaskContinuationOptions.HideScheduler,
@ -293,11 +290,10 @@ internal sealed class Framework : IInternalDisposableService, IFramework
if (cancellationToken == default)
cancellationToken = this.FrameworkThreadTaskFactory.CancellationToken;
return this.FrameworkThreadTaskFactory.ContinueWhenAll(
new[]
{
[
Task.Delay(delay, cancellationToken),
this.DelayTicks(delayTicks, cancellationToken),
},
],
_ => func(),
cancellationToken,
TaskContinuationOptions.HideScheduler,
@ -333,7 +329,7 @@ internal sealed class Framework : IInternalDisposableService, IFramework
internal static void AddToStats(string key, double ms)
{
if (!StatsHistory.ContainsKey(key))
StatsHistory.Add(key, new List<double>());
StatsHistory.Add(key, []);
StatsHistory[key].Add(ms);

View file

@ -37,10 +37,10 @@ namespace Dalamud.Game.Gui;
[ServiceManager.EarlyLoadedService]
internal sealed unsafe class ChatGui : IInternalDisposableService, IChatGui
{
private static readonly ModuleLog Log = new("ChatGui");
private static readonly ModuleLog Log = ModuleLog.Create<ChatGui>();
private readonly Queue<XivChatEntry> chatQueue = new();
private readonly Dictionary<(string PluginName, uint CommandId), Action<uint, SeString>> dalamudLinkHandlers = new();
private readonly Dictionary<(string PluginName, uint CommandId), Action<uint, SeString>> dalamudLinkHandlers = [];
private readonly Hook<PrintMessageDelegate> printMessageHook;
private readonly Hook<InventoryItem.Delegates.Copy> inventoryItemCopyHook;

View file

@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Threading;
using Dalamud.Game.Text;
using Dalamud.Game.Text.SeStringHandling;
@ -28,7 +29,7 @@ namespace Dalamud.Game.Gui.ContextMenu;
[ServiceManager.EarlyLoadedService]
internal sealed unsafe class ContextMenu : IInternalDisposableService, IContextMenu
{
private static readonly ModuleLog Log = new("ContextMenu");
private static readonly ModuleLog Log = ModuleLog.Create<ContextMenu>();
private readonly Hook<AtkModuleVf22OpenAddonByAgentDelegate> atkModuleVf22OpenAddonByAgentHook;
private readonly Hook<AddonContextMenu.Delegates.OnMenuSelected> addonContextMenuOnMenuSelectedHook;
@ -53,7 +54,7 @@ internal sealed unsafe class ContextMenu : IInternalDisposableService, IContextM
private Dictionary<ContextMenuType, List<IMenuItem>> MenuItems { get; } = [];
private object MenuItemsLock { get; } = new();
private Lock MenuItemsLock { get; } = new();
private AgentInterface* SelectedAgent { get; set; }

View file

@ -1,6 +1,5 @@
using System.Collections.Generic;
using Dalamud.Memory;
using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Client.UI.Agent;

View file

@ -30,7 +30,7 @@ internal sealed unsafe class DtrBar : IInternalDisposableService, IDtrBar
{
private const uint BaseNodeId = 1000;
private static readonly ModuleLog Log = new("DtrBar");
private static readonly ModuleLog Log = ModuleLog.Create<DtrBar>();
[ServiceManager.ServiceDependency]
private readonly Framework framework = Service<Framework>.Get();
@ -54,7 +54,7 @@ internal sealed unsafe class DtrBar : IInternalDisposableService, IDtrBar
private readonly ReaderWriterLockSlim entriesLock = new();
private readonly List<DtrBarEntry> entries = [];
private readonly Dictionary<uint, List<IAddonEventHandle>> eventHandles = new();
private readonly Dictionary<uint, List<IAddonEventHandle>> eventHandles = [];
private ImmutableList<IReadOnlyDtrBarEntry>? entriesReadOnlyCopy;
@ -516,7 +516,7 @@ internal sealed unsafe class DtrBar : IInternalDisposableService, IDtrBar
var node = data.TextNode = this.MakeNode(++this.runningNodeIds);
this.eventHandles.TryAdd(node->NodeId, new List<IAddonEventHandle>());
this.eventHandles.TryAdd(node->NodeId, []);
this.eventHandles[node->NodeId].AddRange(new List<IAddonEventHandle>
{
this.uiEventManager.AddEvent(AddonEventManager.DalamudInternalKey, (nint)dtr, (nint)node, AddonEventType.MouseOver, this.DtrEventHandler),

View file

@ -1,7 +1,6 @@
using System.Numerics;
using System.Numerics;
using Dalamud.Configuration.Internal;
using Dalamud.Game.Addon.Events.EventDataTypes;
using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Plugin.Internal.Types;
using Dalamud.Utility;

View file

@ -32,7 +32,7 @@ namespace Dalamud.Game.Gui;
[ServiceManager.EarlyLoadedService]
internal sealed unsafe class GameGui : IInternalDisposableService, IGameGui
{
private static readonly ModuleLog Log = new("GameGui");
private static readonly ModuleLog Log = ModuleLog.Create<GameGui>();
private readonly GameGuiAddressResolver address;

View file

@ -427,8 +427,8 @@ internal unsafe class NamePlateUpdateHandler : INamePlateUpdateHandler
/// <inheritdoc/>
public int VisibilityFlags
{
get => ObjectData->VisibilityFlags;
set => ObjectData->VisibilityFlags = value;
get => this.ObjectData->VisibilityFlags;
set => this.ObjectData->VisibilityFlags = value;
}
/// <inheritdoc/>

View file

@ -1,4 +1,5 @@
using Dalamud.Plugin.Services;
using Lumina.Excel.Sheets;
namespace Dalamud.Game.Gui.PartyFinder.Types;

View file

@ -23,23 +23,7 @@ public class PartyFinderSlot
/// <summary>
/// Gets a list of jobs that this slot is accepting.
/// </summary>
public IReadOnlyCollection<JobFlags> Accepting
{
get
{
if (this.listAccepting != null)
{
return this.listAccepting;
}
this.listAccepting = Enum.GetValues(typeof(JobFlags))
.Cast<JobFlags>()
.Where(flag => this[flag])
.ToArray();
return this.listAccepting;
}
}
public IReadOnlyCollection<JobFlags> Accepting => this.listAccepting ??= Enum.GetValues<JobFlags>().Where(flag => this[flag]).ToArray();
/// <summary>
/// Tests if this slot is accepting a job.

View file

@ -22,7 +22,7 @@ namespace Dalamud.Game.Internal;
[ServiceManager.EarlyLoadedService]
internal sealed unsafe class DalamudAtkTweaks : IInternalDisposableService
{
private static readonly ModuleLog Log = new("DalamudAtkTweaks");
private static readonly ModuleLog Log = ModuleLog.Create<DalamudAtkTweaks>();
private readonly Hook<AgentHUD.Delegates.OpenSystemMenu> hookAgentHudOpenSystemMenu;

View file

@ -18,15 +18,15 @@ namespace Dalamud.Game.Inventory;
[ServiceManager.EarlyLoadedService]
internal class GameInventory : IInternalDisposableService
{
private readonly List<GameInventoryPluginScoped> subscribersPendingChange = new();
private readonly List<GameInventoryPluginScoped> subscribers = new();
private readonly List<GameInventoryPluginScoped> subscribersPendingChange = [];
private readonly List<GameInventoryPluginScoped> subscribers = [];
private readonly List<InventoryItemAddedArgs> addedEvents = new();
private readonly List<InventoryItemRemovedArgs> removedEvents = new();
private readonly List<InventoryItemChangedArgs> changedEvents = new();
private readonly List<InventoryItemMovedArgs> movedEvents = new();
private readonly List<InventoryItemSplitArgs> splitEvents = new();
private readonly List<InventoryItemMergedArgs> mergedEvents = new();
private readonly List<InventoryItemAddedArgs> addedEvents = [];
private readonly List<InventoryItemRemovedArgs> removedEvents = [];
private readonly List<InventoryItemChangedArgs> changedEvents = [];
private readonly List<InventoryItemMovedArgs> movedEvents = [];
private readonly List<InventoryItemSplitArgs> splitEvents = [];
private readonly List<InventoryItemMergedArgs> mergedEvents = [];
[ServiceManager.ServiceDependency]
private readonly Framework framework = Service<Framework>.Get();
@ -151,7 +151,7 @@ internal class GameInventory : IInternalDisposableService
bool isNew;
lock (this.subscribersPendingChange)
{
isNew = this.subscribersPendingChange.Any() && !this.subscribers.Any();
isNew = this.subscribersPendingChange.Count != 0 && this.subscribers.Count == 0;
this.subscribers.Clear();
this.subscribers.AddRange(this.subscribersPendingChange);
this.subscribersChanged = false;
@ -348,7 +348,7 @@ internal class GameInventory : IInternalDisposableService
#pragma warning restore SA1015
internal class GameInventoryPluginScoped : IInternalDisposableService, IGameInventory
{
private static readonly ModuleLog Log = new(nameof(GameInventoryPluginScoped));
private static readonly ModuleLog Log = ModuleLog.Create<GameInventoryPluginScoped>();
[ServiceManager.ServiceDependency]
private readonly GameInventory gameInventoryService = Service<GameInventory>.Get();

View file

@ -1,5 +1,3 @@
using System.Linq;
using Dalamud.Game.Network.Internal;
using Dalamud.Game.Network.Structures;
using Dalamud.IoC;
@ -95,7 +93,7 @@ internal class MarketBoard : IInternalDisposableService, IMarketBoard
#pragma warning restore SA1015
internal class MarketBoardPluginScoped : IInternalDisposableService, IMarketBoard
{
private static readonly ModuleLog Log = new(nameof(MarketBoardPluginScoped));
private static readonly ModuleLog Log = ModuleLog.Create<MarketBoardPluginScoped>();
[ServiceManager.ServiceDependency]
private readonly MarketBoard marketBoardService = Service<MarketBoard>.Get();

View file

@ -89,7 +89,7 @@ public readonly unsafe struct AtkValuePtr(nint address) : IEquatable<AtkValuePtr
/// </returns>
public unsafe bool TryGet<T>([NotNullWhen(true)] out T? result) where T : struct
{
object? value = this.GetValue();
var value = this.GetValue();
if (value is T typed)
{
result = typed;

View file

@ -2,9 +2,6 @@ using System.Runtime.InteropServices;
using Dalamud.Configuration.Internal;
using Dalamud.Hooking;
using Dalamud.IoC;
using Dalamud.IoC.Internal;
using Dalamud.Plugin.Services;
using Dalamud.Utility;
using FFXIVClientStructs.FFXIV.Client.Network;

View file

@ -1,4 +1,3 @@
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
@ -8,6 +7,7 @@ using Dalamud.Game.Network.Structures;
using Dalamud.Networking.Http;
using Newtonsoft.Json;
using Serilog;
namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis;
@ -64,7 +64,7 @@ internal class UniversalisMarketBoardUploader : IMarketBoardUploader
PricePerUnit = marketBoardItemListing.PricePerUnit,
Quantity = marketBoardItemListing.ItemQuantity,
RetainerCity = marketBoardItemListing.RetainerCityId,
Materia = new List<UniversalisItemMateria>(),
Materia = [],
};
#pragma warning restore CS0618 // Type or member is obsolete

View file

@ -33,7 +33,7 @@ namespace Dalamud.Game.Network.Internal;
[ServiceManager.EarlyLoadedService]
internal unsafe class NetworkHandlers : IInternalDisposableService
{
private readonly IMarketBoardUploader uploader;
private readonly UniversalisMarketBoardUploader uploader;
private readonly IDisposable handleMarketBoardItemRequest;
private readonly IDisposable handleMarketTaxRates;
@ -419,7 +419,7 @@ internal unsafe class NetworkHandlers : IInternalDisposableService
private IDisposable HandleMarketBoardItemRequest()
{
void LogStartObserved(MarketBoardItemRequest request)
static void LogStartObserved(MarketBoardItemRequest request)
{
Log.Verbose("Observed start of request for item with {NumListings} expected listings", request.AmountToArrive);
}
@ -448,7 +448,7 @@ internal unsafe class NetworkHandlers : IInternalDisposableService
private void UploadMarketBoardData(
MarketBoardItemRequest request,
(uint CatalogId, ICollection<MarketBoardHistory.MarketBoardHistoryListing> Sales) sales,
ICollection<MarketBoardCurrentOfferings.MarketBoardItemListing> listings,
List<MarketBoardCurrentOfferings.MarketBoardItemListing> listings,
ulong uploaderId,
uint worldId)
{

View file

@ -11,7 +11,9 @@ using System.Threading;
using Dalamud.Plugin.Services;
using Iced.Intel;
using Newtonsoft.Json;
using Serilog;
namespace Dalamud.Game;

View file

@ -48,7 +48,7 @@ namespace Dalamud.Game.Text.Evaluator;
[ResolveVia<ISeStringEvaluator>]
internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
{
private static readonly ModuleLog Log = new("SeStringEvaluator");
private static readonly ModuleLog Log = ModuleLog.Create<SeStringEvaluator>();
[ServiceManager.ServiceDependency]
private readonly ClientState.ClientState clientState = Service<ClientState.ClientState>.Get();
@ -244,154 +244,67 @@ internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
// if (context.HandlePayload(payload, in context))
// return true;
switch (payload.MacroCode)
return payload.MacroCode switch
{
case MacroCode.SetResetTime:
return this.TryResolveSetResetTime(in context, payload);
case MacroCode.SetTime:
return this.TryResolveSetTime(in context, payload);
case MacroCode.If:
return this.TryResolveIf(in context, payload);
case MacroCode.Switch:
return this.TryResolveSwitch(in context, payload);
case MacroCode.SwitchPlatform:
return this.TryResolveSwitchPlatform(in context, payload);
case MacroCode.PcName:
return this.TryResolvePcName(in context, payload);
case MacroCode.IfPcGender:
return this.TryResolveIfPcGender(in context, payload);
case MacroCode.IfPcName:
return this.TryResolveIfPcName(in context, payload);
// case MacroCode.Josa:
// case MacroCode.Josaro:
case MacroCode.IfSelf:
return this.TryResolveIfSelf(in context, payload);
// case MacroCode.NewLine: // pass through
// case MacroCode.Wait: // pass through
// case MacroCode.Icon: // pass through
case MacroCode.Color:
return this.TryResolveColor(in context, payload);
case MacroCode.EdgeColor:
return this.TryResolveEdgeColor(in context, payload);
case MacroCode.ShadowColor:
return this.TryResolveShadowColor(in context, payload);
// case MacroCode.SoftHyphen: // pass through
// case MacroCode.Key:
// case MacroCode.Scale:
case MacroCode.Bold:
return this.TryResolveBold(in context, payload);
case MacroCode.Italic:
return this.TryResolveItalic(in context, payload);
// case MacroCode.Edge:
// case MacroCode.Shadow:
// case MacroCode.NonBreakingSpace: // pass through
// case MacroCode.Icon2: // pass through
// case MacroCode.Hyphen: // pass through
case MacroCode.Num:
return this.TryResolveNum(in context, payload);
case MacroCode.Hex:
return this.TryResolveHex(in context, payload);
case MacroCode.Kilo:
return this.TryResolveKilo(in context, payload);
// case MacroCode.Byte:
case MacroCode.Sec:
return this.TryResolveSec(in context, payload);
// case MacroCode.Time:
case MacroCode.Float:
return this.TryResolveFloat(in context, payload);
// case MacroCode.Link: // pass through
case MacroCode.Sheet:
return this.TryResolveSheet(in context, payload);
case MacroCode.SheetSub:
return this.TryResolveSheetSub(in context, payload);
case MacroCode.String:
return this.TryResolveString(in context, payload);
case MacroCode.Caps:
return this.TryResolveCaps(in context, payload);
case MacroCode.Head:
return this.TryResolveHead(in context, payload);
case MacroCode.Split:
return this.TryResolveSplit(in context, payload);
case MacroCode.HeadAll:
return this.TryResolveHeadAll(in context, payload);
case MacroCode.Fixed:
return this.TryResolveFixed(in context, payload);
case MacroCode.Lower:
return this.TryResolveLower(in context, payload);
case MacroCode.JaNoun:
return this.TryResolveNoun(ClientLanguage.Japanese, in context, payload);
case MacroCode.EnNoun:
return this.TryResolveNoun(ClientLanguage.English, in context, payload);
case MacroCode.DeNoun:
return this.TryResolveNoun(ClientLanguage.German, in context, payload);
case MacroCode.FrNoun:
return this.TryResolveNoun(ClientLanguage.French, in context, payload);
// case MacroCode.ChNoun:
case MacroCode.LowerHead:
return this.TryResolveLowerHead(in context, payload);
case MacroCode.ColorType:
return this.TryResolveColorType(in context, payload);
case MacroCode.EdgeColorType:
return this.TryResolveEdgeColorType(in context, payload);
// case MacroCode.Ruby:
case MacroCode.Digit:
return this.TryResolveDigit(in context, payload);
case MacroCode.Ordinal:
return this.TryResolveOrdinal(in context, payload);
// case MacroCode.Sound: // pass through
case MacroCode.LevelPos:
return this.TryResolveLevelPos(in context, payload);
default:
return false;
}
MacroCode.SetResetTime => this.TryResolveSetResetTime(in context, payload),
MacroCode.SetTime => this.TryResolveSetTime(in context, payload),
MacroCode.If => this.TryResolveIf(in context, payload),
MacroCode.Switch => this.TryResolveSwitch(in context, payload),
MacroCode.SwitchPlatform => this.TryResolveSwitchPlatform(in context, payload),
MacroCode.PcName => this.TryResolvePcName(in context, payload),
MacroCode.IfPcGender => this.TryResolveIfPcGender(in context, payload),
MacroCode.IfPcName => this.TryResolveIfPcName(in context, payload),
// MacroCode.Josa
// MacroCode.Josaro
MacroCode.IfSelf => this.TryResolveIfSelf(in context, payload),
// MacroCode.NewLine (pass through)
// MacroCode.Wait (pass through)
// MacroCode.Icon (pass through)
MacroCode.Color => this.TryResolveColor(in context, payload),
MacroCode.EdgeColor => this.TryResolveEdgeColor(in context, payload),
MacroCode.ShadowColor => this.TryResolveShadowColor(in context, payload),
// MacroCode.SoftHyphen (pass through)
// MacroCode.Key
// MacroCode.Scale
MacroCode.Bold => this.TryResolveBold(in context, payload),
MacroCode.Italic => this.TryResolveItalic(in context, payload),
// MacroCode.Edge
// MacroCode.Shadow
// MacroCode.NonBreakingSpace (pass through)
// MacroCode.Icon2 (pass through)
// MacroCode.Hyphen (pass through)
MacroCode.Num => this.TryResolveNum(in context, payload),
MacroCode.Hex => this.TryResolveHex(in context, payload),
MacroCode.Kilo => this.TryResolveKilo(in context, payload),
// MacroCode.Byte
MacroCode.Sec => this.TryResolveSec(in context, payload),
// MacroCode.Time
MacroCode.Float => this.TryResolveFloat(in context, payload),
// MacroCode.Link (pass through)
MacroCode.Sheet => this.TryResolveSheet(in context, payload),
MacroCode.SheetSub => this.TryResolveSheetSub(in context, payload),
MacroCode.String => this.TryResolveString(in context, payload),
MacroCode.Caps => this.TryResolveCaps(in context, payload),
MacroCode.Head => this.TryResolveHead(in context, payload),
MacroCode.Split => this.TryResolveSplit(in context, payload),
MacroCode.HeadAll => this.TryResolveHeadAll(in context, payload),
MacroCode.Fixed => this.TryResolveFixed(in context, payload),
MacroCode.Lower => this.TryResolveLower(in context, payload),
MacroCode.JaNoun => this.TryResolveNoun(ClientLanguage.Japanese, in context, payload),
MacroCode.EnNoun => this.TryResolveNoun(ClientLanguage.English, in context, payload),
MacroCode.DeNoun => this.TryResolveNoun(ClientLanguage.German, in context, payload),
MacroCode.FrNoun => this.TryResolveNoun(ClientLanguage.French, in context, payload),
// MacroCode.ChNoun
MacroCode.LowerHead => this.TryResolveLowerHead(in context, payload),
MacroCode.ColorType => this.TryResolveColorType(in context, payload),
MacroCode.EdgeColorType => this.TryResolveEdgeColorType(in context, payload),
// MacroCode.Ruby
MacroCode.Digit => this.TryResolveDigit(in context, payload),
MacroCode.Ordinal => this.TryResolveOrdinal(in context, payload),
// MacroCode.Sound (pass through)
MacroCode.LevelPos => this.TryResolveLevelPos(in context, payload),
_ => false,
};
}
private unsafe bool TryResolveSetResetTime(in SeStringContext context, in ReadOnlySePayloadSpan payload)

View file

@ -85,7 +85,7 @@ internal class NounProcessor : IServiceType
private const int PronounColumnIdx = 6;
private const int ArticleColumnIdx = 7;
private static readonly ModuleLog Log = new("NounProcessor");
private static readonly ModuleLog Log = ModuleLog.Create<NounProcessor>();
[ServiceManager.ServiceDependency]
private readonly DataManager dataManager = Service<DataManager>.Get();

View file

@ -213,11 +213,10 @@ public abstract partial class Payload
return payload;
}
private static Payload DecodeText(BinaryReader reader)
private static TextPayload DecodeText(BinaryReader reader)
{
var payload = new TextPayload();
payload.DecodeImpl(reader, reader.BaseStream.Length);
return payload;
}
}
@ -382,7 +381,7 @@ public abstract partial class Payload
{
if (value < 0xCF)
{
return new byte[] { (byte)(value + 1) };
return [(byte)(value + 1)];
}
var bytes = BitConverter.GetBytes(value);

View file

@ -45,10 +45,10 @@ public class IconPayload : Payload
{
var indexBytes = MakeInteger((uint)this.Icon);
var chunkLen = indexBytes.Length + 1;
var bytes = new List<byte>(new byte[]
{
var bytes = new List<byte>(
[
START_BYTE, (byte)SeStringChunkType.Icon, (byte)chunkLen,
});
]);
bytes.AddRange(indexBytes);
bytes.Add(END_BYTE);
return bytes.ToArray();

View file

@ -8,6 +8,7 @@ using Dalamud.Utility;
using Lumina.Excel;
using Lumina.Excel.Sheets;
using Newtonsoft.Json;
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
@ -172,7 +173,7 @@ public class ItemPayload : Payload
};
bytes.AddRange(idBytes);
// unk
bytes.AddRange(new byte[] { 0x02, 0x01 });
bytes.AddRange([0x02, 0x01]);
// Links don't have to include the name, but if they do, it requires additional work
if (hasName)
@ -183,17 +184,17 @@ public class ItemPayload : Payload
nameLen += 4; // space plus 3 bytes for HQ symbol
}
bytes.AddRange(new byte[]
{
bytes.AddRange(
[
0xFF, // unk
(byte)nameLen,
});
]);
bytes.AddRange(Encoding.UTF8.GetBytes(this.displayName));
if (this.IsHQ)
{
// space and HQ symbol
bytes.AddRange(new byte[] { 0x20, 0xEE, 0x80, 0xBC });
bytes.AddRange([0x20, 0xEE, 0x80, 0xBC]);
}
}

View file

@ -5,6 +5,7 @@ using Dalamud.Data;
using Lumina.Excel;
using Lumina.Excel.Sheets;
using Newtonsoft.Json;
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
@ -174,7 +175,7 @@ public class MapLinkPayload : Payload
bytes.AddRange(yBytes);
// unk
bytes.AddRange(new byte[] { 0xFF, 0x01, END_BYTE });
bytes.AddRange([0xFF, 0x01, END_BYTE]);
return bytes.ToArray();
}

View file

@ -7,7 +7,7 @@ namespace Dalamud.Game.Text.SeStringHandling.Payloads;
/// </summary>
public class NewLinePayload : Payload, ITextProvider
{
private readonly byte[] bytes = { START_BYTE, (byte)SeStringChunkType.NewLine, 0x01, END_BYTE };
private readonly byte[] bytes = [START_BYTE, (byte)SeStringChunkType.NewLine, 0x01, END_BYTE];
/// <summary>
/// Gets an instance of NewLinePayload.

View file

@ -3,6 +3,7 @@ using System.Diagnostics.CodeAnalysis;
using System.IO;
using Lumina.Extensions;
using Newtonsoft.Json;
namespace Dalamud.Game.Text.SeStringHandling.Payloads
@ -97,7 +98,7 @@ namespace Dalamud.Game.Text.SeStringHandling.Payloads
reader.ReadByte();
// if the next byte is 0xF3 then this listing is limited to home world
byte nextByte = reader.ReadByte();
var nextByte = reader.ReadByte();
switch (nextByte)
{
case (byte)PartyFinderLinkType.LimitedToHomeWorld:
@ -121,11 +122,11 @@ namespace Dalamud.Game.Text.SeStringHandling.Payloads
// if the link type is notification, just use premade payload data since it's always the same.
// i have no idea why it is formatted like this, but it is how it is.
// note it is identical to the link terminator payload except the embedded info type is 0x08
if (this.LinkType == PartyFinderLinkType.PartyFinderNotification) return new byte[] { 0x02, 0x27, 0x07, 0x08, 0x01, 0x01, 0x01, 0xFF, 0x01, 0x03, };
if (this.LinkType == PartyFinderLinkType.PartyFinderNotification) return [0x02, 0x27, 0x07, 0x08, 0x01, 0x01, 0x01, 0xFF, 0x01, 0x03,];
// back to our regularly scheduled programming...
var listingIDBytes = MakeInteger(this.ListingId);
bool isFlagSpecified = this.LinkType != PartyFinderLinkType.NotSpecified;
var isFlagSpecified = this.LinkType != PartyFinderLinkType.NotSpecified;
var chunkLen = listingIDBytes.Length + 4;
// 1 more byte for the type flag if it is specified

View file

@ -5,6 +5,7 @@ using Dalamud.Data;
using Lumina.Excel;
using Lumina.Excel.Sheets;
using Newtonsoft.Json;
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
@ -62,7 +63,7 @@ public class QuestPayload : Payload
};
bytes.AddRange(idBytes);
bytes.AddRange(new byte[] { 0x01, 0x01, END_BYTE });
bytes.AddRange([0x01, 0x01, END_BYTE]);
return bytes.ToArray();
}

View file

@ -45,7 +45,7 @@ public class RawPayload : Payload
/// <summary>
/// Gets a fixed Payload representing a common link-termination sequence, found in many payload chains.
/// </summary>
public static RawPayload LinkTerminator => new(new byte[] { 0x02, 0x27, 0x07, 0xCF, 0x01, 0x01, 0x01, 0xFF, 0x01, 0x03 });
public static RawPayload LinkTerminator => new([0x02, 0x27, 0x07, 0xCF, 0x01, 0x01, 0x01, 0xFF, 0x01, 0x03]);
/// <inheritdoc/>
public override PayloadType Type => PayloadType.Unknown;

View file

@ -7,7 +7,7 @@ namespace Dalamud.Game.Text.SeStringHandling.Payloads;
/// </summary>
public class SeHyphenPayload : Payload, ITextProvider
{
private readonly byte[] bytes = { START_BYTE, (byte)SeStringChunkType.SeHyphen, 0x01, END_BYTE };
private readonly byte[] bytes = [START_BYTE, (byte)SeStringChunkType.SeHyphen, 0x01, END_BYTE];
/// <summary>
/// Gets an instance of SeHyphenPayload.

View file

@ -5,6 +5,7 @@ using Dalamud.Data;
using Lumina.Excel;
using Lumina.Excel.Sheets;
using Newtonsoft.Json;
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
@ -63,7 +64,7 @@ public class StatusPayload : Payload
bytes.AddRange(idBytes);
// unk
bytes.AddRange(new byte[] { 0x01, 0x01, 0xFF, 0x02, 0x20, END_BYTE });
bytes.AddRange([0x01, 0x01, 0xFF, 0x02, 0x20, END_BYTE]);
return bytes.ToArray();
}

View file

@ -5,6 +5,7 @@ using Dalamud.Data;
using Lumina.Excel;
using Lumina.Excel.Sheets;
using Newtonsoft.Json;
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
@ -95,10 +96,10 @@ public class UIForegroundPayload : Payload
var colorBytes = MakeInteger(this.colorKey);
var chunkLen = colorBytes.Length + 1;
var bytes = new List<byte>(new byte[]
{
var bytes = new List<byte>(
[
START_BYTE, (byte)SeStringChunkType.UIForeground, (byte)chunkLen,
});
]);
bytes.AddRange(colorBytes);
bytes.Add(END_BYTE);

View file

@ -5,6 +5,7 @@ using Dalamud.Data;
using Lumina.Excel;
using Lumina.Excel.Sheets;
using Newtonsoft.Json;
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
@ -98,10 +99,10 @@ public class UIGlowPayload : Payload
var colorBytes = MakeInteger(this.colorKey);
var chunkLen = colorBytes.Length + 1;
var bytes = new List<byte>(new byte[]
{
var bytes = new List<byte>(
[
START_BYTE, (byte)SeStringChunkType.UIGlow, (byte)chunkLen,
});
]);
bytes.AddRange(colorBytes);
bytes.Add(END_BYTE);

View file

@ -28,7 +28,7 @@ public class SeString
/// </summary>
public SeString()
{
this.Payloads = new List<Payload>();
this.Payloads = [];
}
/// <summary>

View file

@ -169,9 +169,6 @@ public sealed class AsmHook : IDisposable, IDalamudHook
/// </summary>
private void CheckDisposed()
{
if (this.IsDisposed)
{
throw new ObjectDisposedException(message: "Hook is already disposed", null);
}
ObjectDisposedException.ThrowIf(this.IsDisposed, this);
}
}

View file

@ -160,7 +160,7 @@ public abstract class Hook<T> : IDalamudHook where T : Delegate
(int)Math.Min(pDataDirectory->Size + pDataDirectory->VirtualAddress - importDescriptor.Name, moduleNameLowerWithNullTerminator.Length));
// Is this entry about the DLL that we're looking for? (Case insensitive)
if (currentDllNameWithNullTerminator.ToLowerInvariant() != moduleNameLowerWithNullTerminator)
if (!currentDllNameWithNullTerminator.Equals(moduleNameLowerWithNullTerminator, StringComparison.InvariantCultureIgnoreCase))
continue;
if (isPe64)
@ -245,10 +245,7 @@ public abstract class Hook<T> : IDalamudHook where T : Delegate
/// </summary>
protected void CheckDisposed()
{
if (this.IsDisposed)
{
throw new ObjectDisposedException(message: "Hook is already disposed", null);
}
ObjectDisposedException.ThrowIf(this.IsDisposed, this);
}
private static unsafe IntPtr FromImportHelper32(IntPtr baseAddress, ref PeHeader.IMAGE_IMPORT_DESCRIPTOR desc, ref PeHeader.IMAGE_DATA_DIRECTORY dir, string functionName, uint hintOrOrdinal)

View file

@ -1,8 +1,8 @@
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.InteropServices;
using JetBrains.Annotations;
using Windows.Win32.System.Memory;
using Win32Exception = System.ComponentModel.Win32Exception;
@ -45,7 +45,7 @@ internal unsafe class FunctionPointerVariableHook<T> : Hook<T>
if (!HookManager.MultiHookTracker.TryGetValue(this.Address, out var indexList))
{
indexList = HookManager.MultiHookTracker[this.Address] = new List<IDalamudHook>();
indexList = HookManager.MultiHookTracker[this.Address] = [];
}
this.detourDelegate = detour;

View file

@ -1,4 +1,4 @@
using System.Diagnostics;
using System.Diagnostics;
using System.Linq;
using Dalamud.Game;
@ -8,6 +8,7 @@ using Dalamud.Plugin.Internal.Types;
using Dalamud.Plugin.Services;
using Dalamud.Utility;
using Dalamud.Utility.Signatures;
using Serilog;
namespace Dalamud.Hooking.Internal;
@ -25,7 +26,7 @@ internal class GameInteropProviderPluginScoped : IGameInteropProvider, IInternal
private readonly LocalPlugin plugin;
private readonly SigScanner scanner;
private readonly WeakConcurrentCollection<IDalamudHook> trackedHooks = new();
private readonly WeakConcurrentCollection<IDalamudHook> trackedHooks = [];
/// <summary>
/// Initializes a new instance of the <see cref="GameInteropProviderPluginScoped"/> class.

View file

@ -2,6 +2,7 @@ using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using Dalamud.Logging.Internal;
using Dalamud.Memory;
@ -20,7 +21,7 @@ internal class HookManager : IInternalDisposableService
/// <summary>
/// Logger shared with <see cref="Unhooker"/>.
/// </summary>
internal static readonly ModuleLog Log = new("HM");
internal static readonly ModuleLog Log = ModuleLog.Create<HookManager>();
[ServiceManager.ServiceConstructor]
private HookManager()
@ -30,7 +31,7 @@ internal class HookManager : IInternalDisposableService
/// <summary>
/// Gets sync root object for hook enabling/disabling.
/// </summary>
internal static object HookEnableSyncRoot { get; } = new();
internal static Lock HookEnableSyncRoot { get; } = new();
/// <summary>
/// Gets a static list of tracked and registered hooks.

View file

@ -24,7 +24,7 @@ internal class MinHookHook<T> : Hook<T> where T : Delegate
var unhooker = HookManager.RegisterUnhooker(this.Address);
if (!HookManager.MultiHookTracker.TryGetValue(this.Address, out var indexList))
indexList = HookManager.MultiHookTracker[this.Address] = new();
indexList = HookManager.MultiHookTracker[this.Address] = [];
var index = (ulong)indexList.Count;

View file

@ -17,10 +17,10 @@ namespace Dalamud.Hooking.WndProcHook;
[ServiceManager.EarlyLoadedService]
internal sealed class WndProcHookManager : IInternalDisposableService
{
private static readonly ModuleLog Log = new(nameof(WndProcHookManager));
private static readonly ModuleLog Log = ModuleLog.Create<WndProcHookManager>();
private readonly Hook<DispatchMessageWDelegate> dispatchMessageWHook;
private readonly Dictionary<HWND, WndProcEventArgs> wndProcOverrides = new();
private readonly Dictionary<HWND, WndProcEventArgs> wndProcOverrides = [];
private HWND mainWindowHwnd;

View file

@ -56,11 +56,10 @@ public static class ColorHelpers
var min = Math.Min(r, Math.Min(g, b));
var h = max;
var s = max;
var v = max;
var d = max - min;
s = max == 0 ? 0 : d / max;
var s = max == 0 ? 0 : d / max;
if (max == min)
{

View file

@ -1,5 +1,6 @@
using Dalamud.Bindings.ImGui;
using Dalamud.Interface.Utility.Raii;
using FFXIVClientStructs.FFXIV.Common.Math;
namespace Dalamud.Interface.Components;

View file

@ -5,6 +5,7 @@ using Dalamud.Bindings.ImGui;
using Dalamud.Interface.Internal;
using Dalamud.IoC;
using Dalamud.IoC.Internal;
using Serilog;
namespace Dalamud.Interface.DragDrop;

View file

@ -6,6 +6,7 @@ using System.Text;
using Dalamud.Bindings.ImGui;
using Dalamud.Utility;
using Serilog;
namespace Dalamud.Interface.DragDrop;

View file

@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using Dalamud.Utility;
@ -37,7 +37,7 @@ public static class FontAwesomeExtensions
public static IEnumerable<string> GetSearchTerms(this FontAwesomeIcon icon)
{
var searchTermsAttribute = icon.GetAttribute<FontAwesomeSearchTermsAttribute>();
return searchTermsAttribute == null ? new string[] { } : searchTermsAttribute.SearchTerms;
return searchTermsAttribute == null ? [] : searchTermsAttribute.SearchTerms;
}
/// <summary>
@ -48,6 +48,6 @@ public static class FontAwesomeExtensions
public static IEnumerable<string> GetCategories(this FontAwesomeIcon icon)
{
var categoriesAttribute = icon.GetAttribute<FontAwesomeCategoriesAttribute>();
return categoriesAttribute == null ? new string[] { } : categoriesAttribute.Categories;
return categoriesAttribute == null ? [] : categoriesAttribute.Categories;
}
}

View file

@ -16,14 +16,7 @@ public static class FontAwesomeHelpers
/// <returns>list of font awesome icons.</returns>
public static List<FontAwesomeIcon> GetIcons()
{
var icons = new List<FontAwesomeIcon>();
foreach (var icon in Enum.GetValues(typeof(FontAwesomeIcon)).Cast<FontAwesomeIcon>().ToList())
{
if (icon.IsObsolete()) continue;
icons.Add(icon);
}
return icons;
return [.. Enum.GetValues<FontAwesomeIcon>().Where(icon => !icon.IsObsolete())];
}
/// <summary>
@ -75,7 +68,7 @@ public static class FontAwesomeHelpers
{
var name = Enum.GetName(icon)?.ToLowerInvariant();
var searchTerms = icon.GetSearchTerms();
if (name!.Contains(search.ToLowerInvariant()) || searchTerms.Contains(search.ToLowerInvariant()))
if (name!.Contains(search, StringComparison.InvariantCultureIgnoreCase) || searchTerms.Contains(search.ToLowerInvariant()))
{
result.Add(icon);
}
@ -105,7 +98,7 @@ public static class FontAwesomeHelpers
var name = Enum.GetName(icon)?.ToLowerInvariant();
var searchTerms = icon.GetSearchTerms();
var categories = icon.GetCategories();
if ((name!.Contains(search.ToLowerInvariant()) || searchTerms.Contains(search.ToLowerInvariant())) && categories.Contains(category))
if ((name!.Contains(search, StringComparison.InvariantCultureIgnoreCase) || searchTerms.Contains(search.ToLowerInvariant())) && categories.Contains(category))
{
result.Add(icon);
}

View file

@ -3,7 +3,9 @@ using System.Collections.Generic;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface.ManagedFontAtlas;
using Dalamud.Storage.Assets;
using Newtonsoft.Json;
using TerraFX.Interop.DirectX;
namespace Dalamud.Interface.FontIdentifier;

View file

@ -2,7 +2,9 @@ using System.Collections.Generic;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface.ManagedFontAtlas;
using Newtonsoft.Json;
using TerraFX.Interop.DirectX;
namespace Dalamud.Interface.FontIdentifier;

View file

@ -3,7 +3,9 @@ using System.Collections.Generic;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface.GameFonts;
using Dalamud.Interface.ManagedFontAtlas;
using Newtonsoft.Json;
using TerraFX.Interop.DirectX;
namespace Dalamud.Interface.FontIdentifier;

View file

@ -36,26 +36,25 @@ public interface IFontFamilyId : IObjectWithLocalizableName
/// </summary>
/// <returns>The list of fonts.</returns>
public static List<IFontFamilyId> ListDalamudFonts() =>
new()
{
[
new DalamudAssetFontAndFamilyId(DalamudAsset.NotoSansJpMedium),
new DalamudAssetFontAndFamilyId(DalamudAsset.InconsolataRegular),
new DalamudAssetFontAndFamilyId(DalamudAsset.FontAwesomeFreeSolid),
};
];
/// <summary>
/// Gets the list of Game-provided fonts.
/// </summary>
/// <returns>The list of fonts.</returns>
public static List<IFontFamilyId> ListGameFonts() => new()
{
public static List<IFontFamilyId> ListGameFonts() =>
[
new GameFontAndFamilyId(GameFontFamily.Axis),
new GameFontAndFamilyId(GameFontFamily.Jupiter),
new GameFontAndFamilyId(GameFontFamily.JupiterNumeric),
new GameFontAndFamilyId(GameFontFamily.Meidinger),
new GameFontAndFamilyId(GameFontFamily.MiedingerMid),
new GameFontAndFamilyId(GameFontFamily.TrumpGothic),
};
];
/// <summary>
/// Gets the list of System-provided fonts.

View file

@ -6,6 +6,7 @@ using System.Text;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface.ManagedFontAtlas;
using Dalamud.Interface.Utility;
using Newtonsoft.Json;
namespace Dalamud.Interface.FontIdentifier;

View file

@ -83,7 +83,7 @@ public sealed class SystemFontFamilyId : IFontFamilyId
else if (candidates.Any(x => x.Style == (int)DWRITE_FONT_STYLE.DWRITE_FONT_STYLE_NORMAL))
candidates.RemoveAll(x => x.Style != (int)DWRITE_FONT_STYLE.DWRITE_FONT_STYLE_NORMAL);
if (!candidates.Any())
if (candidates.Count == 0)
return 0;
for (var i = 0; i < this.Fonts.Count; i++)
@ -117,7 +117,7 @@ public sealed class SystemFontFamilyId : IFontFamilyId
return new(IObjectWithLocalizableName.GetLocaleNames(fn));
}
private unsafe IReadOnlyList<IFontId> GetFonts()
private unsafe List<IFontId> GetFonts()
{
using var dwf = default(ComPtr<IDWriteFactory>);
fixed (Guid* piid = &IID.IID_IDWriteFactory)

View file

@ -5,7 +5,9 @@ using System.Linq;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface.ManagedFontAtlas;
using Dalamud.Utility;
using Newtonsoft.Json;
using TerraFX.Interop.DirectX;
using TerraFX.Interop.Windows;

View file

@ -43,12 +43,12 @@ public class FdtReader
/// <summary>
/// Gets all the glyphs defined in this file.
/// </summary>
public List<FontTableEntry> Glyphs { get; init; } = new();
public List<FontTableEntry> Glyphs { get; init; } = [];
/// <summary>
/// Gets all the kerning entries defined in this file.
/// </summary>
public List<KerningTableEntry> Distances { get; init; } = new();
public List<KerningTableEntry> Distances { get; init; } = [];
/// <summary>
/// Finds the glyph index for the corresponding codepoint.
@ -269,7 +269,7 @@ public class FdtReader
/// <summary>
/// Mapping of texture channel index to byte index.
/// </summary>
public static readonly int[] TextureChannelOrder = { 2, 1, 0, 3 };
public static readonly int[] TextureChannelOrder = [2, 1, 0, 3];
/// <summary>
/// Integer representation of a Unicode character in UTF-8 in reverse order, read in little endian.

View file

@ -200,30 +200,25 @@ public class GameFontLayoutPlan
return false;
// TODO: Whatever
switch (char.GetUnicodeCategory((char)this.Codepoint))
{
case System.Globalization.UnicodeCategory.SpaceSeparator:
case System.Globalization.UnicodeCategory.LineSeparator:
case System.Globalization.UnicodeCategory.ParagraphSeparator:
case System.Globalization.UnicodeCategory.Control:
case System.Globalization.UnicodeCategory.Format:
case System.Globalization.UnicodeCategory.Surrogate:
case System.Globalization.UnicodeCategory.PrivateUse:
case System.Globalization.UnicodeCategory.ConnectorPunctuation:
case System.Globalization.UnicodeCategory.DashPunctuation:
case System.Globalization.UnicodeCategory.OpenPunctuation:
case System.Globalization.UnicodeCategory.ClosePunctuation:
case System.Globalization.UnicodeCategory.InitialQuotePunctuation:
case System.Globalization.UnicodeCategory.FinalQuotePunctuation:
case System.Globalization.UnicodeCategory.OtherPunctuation:
case System.Globalization.UnicodeCategory.MathSymbol:
case System.Globalization.UnicodeCategory.ModifierSymbol:
case System.Globalization.UnicodeCategory.OtherSymbol:
case System.Globalization.UnicodeCategory.OtherNotAssigned:
return true;
}
return false;
return char.GetUnicodeCategory((char)this.Codepoint)
is System.Globalization.UnicodeCategory.SpaceSeparator
or System.Globalization.UnicodeCategory.LineSeparator
or System.Globalization.UnicodeCategory.ParagraphSeparator
or System.Globalization.UnicodeCategory.Control
or System.Globalization.UnicodeCategory.Format
or System.Globalization.UnicodeCategory.Surrogate
or System.Globalization.UnicodeCategory.PrivateUse
or System.Globalization.UnicodeCategory.ConnectorPunctuation
or System.Globalization.UnicodeCategory.DashPunctuation
or System.Globalization.UnicodeCategory.OpenPunctuation
or System.Globalization.UnicodeCategory.ClosePunctuation
or System.Globalization.UnicodeCategory.InitialQuotePunctuation
or System.Globalization.UnicodeCategory.FinalQuotePunctuation
or System.Globalization.UnicodeCategory.OtherPunctuation
or System.Globalization.UnicodeCategory.MathSymbol
or System.Globalization.UnicodeCategory.ModifierSymbol
or System.Globalization.UnicodeCategory.OtherSymbol
or System.Globalization.UnicodeCategory.OtherNotAssigned;
}
}
}
@ -300,7 +295,7 @@ public class GameFontLayoutPlan
elements.Add(new() { Codepoint = c, Glyph = this.fdt.GetGlyph(c), });
var lastBreakIndex = 0;
List<int> lineBreakIndices = new() { 0 };
List<int> lineBreakIndices = [0];
for (var i = 1; i < elements.Count; i++)
{
var prev = elements[i - 1];

View file

@ -8,8 +8,8 @@ public static class GlyphRangesJapanese
/// <summary>
/// Gets the unicode glyph ranges for the Japanese language.
/// </summary>
public static ushort[] GlyphRanges => new ushort[]
{
public static ushort[] GlyphRanges =>
[
0x0020, 0x00FF, 0x0391, 0x03A1, 0x03A3, 0x03A9, 0x03B1, 0x03C1, 0x03C3, 0x03C9, 0x0401, 0x0401, 0x0410, 0x044F, 0x0451, 0x0451,
0x2000, 0x206F, 0x2103, 0x2103, 0x212B, 0x212B, 0x2190, 0x2193, 0x21D2, 0x21D2, 0x21D4, 0x21D4, 0x2200, 0x2200, 0x2202, 0x2203,
0x2207, 0x2208, 0x220B, 0x220B, 0x2212, 0x2212, 0x221A, 0x221A, 0x221D, 0x221E, 0x2220, 0x2220, 0x2227, 0x222C, 0x2234, 0x2235,
@ -524,5 +524,5 @@ public static class GlyphRangesJapanese
0x9F4E, 0x9F4F, 0x9F52, 0x9F52, 0x9F54, 0x9F54, 0x9F5F, 0x9F63, 0x9F66, 0x9F67, 0x9F6A, 0x9F6A, 0x9F6C, 0x9F6C, 0x9F72, 0x9F72,
0x9F76, 0x9F77, 0x9F8D, 0x9F8D, 0x9F95, 0x9F95, 0x9F9C, 0x9F9D, 0x9FA0, 0x9FA0, 0xFF01, 0xFF01, 0xFF03, 0xFF06, 0xFF08, 0xFF0C,
0xFF0E, 0xFF3B, 0xFF3D, 0xFF5D, 0xFF61, 0xFF9F, 0xFFE3, 0xFFE3, 0xFFE5, 0xFFE5, 0xFFFF, 0xFFFF, 0,
};
];
}

View file

@ -1,9 +1,4 @@
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Dalamud.Bindings.ImGui;
using Dalamud.Bindings.ImGuizmo;
@ -14,8 +9,6 @@ using Dalamud.Interface.ImGuiBackend.InputHandler;
using Dalamud.Interface.ImGuiBackend.Renderers;
using Dalamud.Utility;
using Serilog;
using TerraFX.Interop.DirectX;
using TerraFX.Interop.Windows;

View file

@ -5,6 +5,7 @@ using System.Runtime.InteropServices;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface.ImGuiBackend.Helpers;
using Dalamud.Utility;
using TerraFX.Interop.DirectX;
using TerraFX.Interop.Windows;

View file

@ -15,6 +15,7 @@ using Dalamud.Interface.Textures.TextureWraps;
using Dalamud.Interface.Textures.TextureWraps.Internal;
using Dalamud.Interface.Utility;
using Dalamud.Utility;
using TerraFX.Interop.DirectX;
using TerraFX.Interop.Windows;
@ -30,7 +31,7 @@ namespace Dalamud.Interface.ImGuiBackend.Renderers;
Justification = "Multiple fixed/using scopes")]
internal unsafe partial class Dx11Renderer : IImGuiRenderer
{
private readonly List<IDalamudTextureWrap> fontTextures = new();
private readonly List<IDalamudTextureWrap> fontTextures = [];
private readonly D3D_FEATURE_LEVEL featureLevel;
private readonly ViewportHandler viewportHandler;
private readonly nint renderNamePtr;
@ -398,10 +399,9 @@ internal unsafe partial class Dx11Renderer : IImGuiRenderer
/// </summary>
private void CreateFontsTexture()
{
if (this.device.IsEmpty())
throw new ObjectDisposedException(nameof(Dx11Renderer));
ObjectDisposedException.ThrowIf(this.device.IsEmpty(), this);
if (this.fontTextures.Any())
if (this.fontTextures.Count != 0)
return;
var io = ImGui.GetIO();
@ -479,8 +479,7 @@ internal unsafe partial class Dx11Renderer : IImGuiRenderer
/// </summary>
private void EnsureDeviceObjects()
{
if (this.device.IsEmpty())
throw new ObjectDisposedException(nameof(Dx11Renderer));
ObjectDisposedException.ThrowIf(this.device.IsEmpty(), this);
var assembly = Assembly.GetExecutingAssembly();

View file

@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using Dalamud.Utility;
@ -11,7 +12,7 @@ namespace Dalamud.Interface.ImGuiFileDialog;
/// </summary>
public partial class FileDialog
{
private readonly object filesLock = new();
private readonly Lock filesLock = new();
private readonly DriveListLoader driveListLoader = new();

View file

@ -8,11 +8,12 @@ namespace Dalamud.Interface.ImGuiFileDialog;
/// </summary>
public partial class FileDialog
{
private static Regex filterRegex = new(@"[^,{}]+(\{([^{}]*?)\})?", RegexOptions.Compiled);
private List<FilterStruct> filters = new();
private List<FilterStruct> filters = [];
private FilterStruct selectedFilter;
[GeneratedRegex(@"[^,{}]+(\{([^{}]*?)\})?", RegexOptions.Compiled)]
private static partial Regex FilterRegex();
private void ParseFilters(string filters)
{
// ".*,.cpp,.h,.hpp"
@ -22,13 +23,13 @@ public partial class FileDialog
if (filters.Length == 0) return;
var currentFilterFound = false;
var matches = filterRegex.Matches(filters);
var matches = FilterRegex().Matches(filters);
foreach (Match m in matches)
{
var match = m.Value;
var filter = default(FilterStruct);
if (match.Contains("{"))
if (match.Contains('{'))
{
var exts = m.Groups[2].Value;
filter = new FilterStruct
@ -42,7 +43,7 @@ public partial class FileDialog
filter = new FilterStruct
{
Filter = match,
CollectionFilters = new(),
CollectionFilters = [],
};
}
@ -89,7 +90,7 @@ public partial class FileDialog
foreach (var file in this.files)
{
var show = true;
if (!string.IsNullOrEmpty(this.searchBuffer) && !file.FileName.ToLowerInvariant().Contains(this.searchBuffer.ToLowerInvariant()))
if (!string.IsNullOrEmpty(this.searchBuffer) && !file.FileName.Contains(this.searchBuffer, StringComparison.InvariantCultureIgnoreCase))
{
show = false;
}

View file

@ -12,7 +12,7 @@ public partial class FileDialog
private static string BytesToString(long byteCount)
{
string[] suf = { " B", " KB", " MB", " GB", " TB" };
string[] suf = [" B", " KB", " MB", " GB", " TB"];
if (byteCount == 0)
return "0" + suf[0];
var bytes = Math.Abs(byteCount);

View file

@ -54,7 +54,7 @@ public partial class FileDialog
windowVisible = ImGui.Begin(name, ref this.visible, this.WindowFlags);
}
bool wasClosed = false;
var wasClosed = false;
if (windowVisible)
{
if (!this.visible)
@ -122,15 +122,15 @@ public partial class FileDialog
{
if (iconMap == null)
{
iconMap = new();
AddToIconMap(new[] { "mp4", "gif", "mov", "avi" }, FontAwesomeIcon.FileVideo, miscTextColor);
AddToIconMap(new[] { "pdf" }, FontAwesomeIcon.FilePdf, miscTextColor);
AddToIconMap(new[] { "png", "jpg", "jpeg", "tiff" }, FontAwesomeIcon.FileImage, imageTextColor);
AddToIconMap(new[] { "cs", "json", "cpp", "h", "py", "xml", "yaml", "js", "html", "css", "ts", "java" }, FontAwesomeIcon.FileCode, codeTextColor);
AddToIconMap(new[] { "txt", "md" }, FontAwesomeIcon.FileAlt, standardTextColor);
AddToIconMap(new[] { "zip", "7z", "gz", "tar" }, FontAwesomeIcon.FileArchive, miscTextColor);
AddToIconMap(new[] { "mp3", "m4a", "ogg", "wav" }, FontAwesomeIcon.FileAudio, miscTextColor);
AddToIconMap(new[] { "csv" }, FontAwesomeIcon.FileCsv, miscTextColor);
iconMap = [];
AddToIconMap(["mp4", "gif", "mov", "avi"], FontAwesomeIcon.FileVideo, miscTextColor);
AddToIconMap(["pdf"], FontAwesomeIcon.FilePdf, miscTextColor);
AddToIconMap(["png", "jpg", "jpeg", "tiff"], FontAwesomeIcon.FileImage, imageTextColor);
AddToIconMap(["cs", "json", "cpp", "h", "py", "xml", "yaml", "js", "html", "css", "ts", "java"], FontAwesomeIcon.FileCode, codeTextColor);
AddToIconMap(["txt", "md"], FontAwesomeIcon.FileAlt, standardTextColor);
AddToIconMap(["zip", "7z", "gz", "tar"], FontAwesomeIcon.FileArchive, miscTextColor);
AddToIconMap(["mp3", "m4a", "ogg", "wav"], FontAwesomeIcon.FileAudio, miscTextColor);
AddToIconMap(["csv"], FontAwesomeIcon.FileCsv, miscTextColor);
}
return iconMap.TryGetValue(ext.ToLowerInvariant(), out var icon) ? icon : new IconColorItem

View file

@ -30,7 +30,7 @@ public partial class FileDialog
private string currentPath;
private string fileNameBuffer = string.Empty;
private List<string> pathDecomposition = new();
private List<string> pathDecomposition = [];
private bool pathClicked = true;
private bool pathInputActivated = false;
private string pathInputBuffer = string.Empty;
@ -46,12 +46,12 @@ public partial class FileDialog
private string searchBuffer = string.Empty;
private string lastSelectedFileName = string.Empty;
private List<string> selectedFileNames = new();
private List<string> selectedFileNames = [];
private float footerHeight = 0;
private string selectedSideBar = string.Empty;
private List<SideBarItem> quickAccess = new();
private List<SideBarItem> quickAccess = [];
/// <summary>
/// Initializes a new instance of the <see cref="FileDialog"/> class.
@ -130,12 +130,12 @@ public partial class FileDialog
{
if (!this.flags.HasFlag(ImGuiFileDialogFlags.SelectOnly))
{
return new List<string> { this.GetFilePathName() };
return [this.GetFilePathName()];
}
if (this.IsDirectoryMode() && this.selectedFileNames.Count == 0)
{
return new List<string> { this.GetFilePathName() }; // current directory
return [this.GetFilePathName()]; // current directory
}
var fullPaths = this.selectedFileNames.Where(x => !string.IsNullOrEmpty(x)).Select(x => Path.Combine(this.currentPath, x));

View file

@ -13,6 +13,7 @@ using Dalamud.Interface.ManagedFontAtlas;
using Dalamud.Interface.ManagedFontAtlas.Internals;
using Dalamud.Interface.Utility;
using Dalamud.Utility;
using TerraFX.Interop.DirectX;
using TerraFX.Interop.Windows;
@ -31,10 +32,10 @@ public sealed class SingleFontChooserDialog : IDisposable
private const float MaxFontSizePt = 127;
private static readonly List<IFontId> EmptyIFontList = new();
private static readonly List<IFontId> EmptyIFontList = [];
private static readonly (string Name, float Value)[] FontSizeList =
{
[
("9.6", 9.6f),
("10", 10f),
("12", 12f),
@ -51,7 +52,7 @@ public sealed class SingleFontChooserDialog : IDisposable
("46", 46),
("68", 68),
("90", 90),
};
];
private static int counterStatic;
@ -1235,7 +1236,7 @@ public sealed class SingleFontChooserDialog : IDisposable
}
private void UpdateSelectedFamilyAndFontIndices(
IReadOnlyList<IFontFamilyId> fonts,
List<IFontFamilyId> fonts,
string familyName,
string fontName)
{

View file

@ -26,8 +26,8 @@ internal class NotificationManager : INotificationManager, IInternalDisposableSe
[ServiceManager.ServiceDependency]
private readonly DalamudConfiguration configuration = Service<DalamudConfiguration>.Get();
private readonly List<ActiveNotification> notifications = new();
private readonly ConcurrentBag<ActiveNotification> pendingNotifications = new();
private readonly List<ActiveNotification> notifications = [];
private readonly ConcurrentBag<ActiveNotification> pendingNotifications = [];
private NotificationPositionChooser? positionChooser;

View file

@ -1,9 +1,5 @@
using System.Threading.Tasks;
using Dalamud.Interface.ImGuiNotification.Internal;
using Dalamud.Interface.Textures;
using Dalamud.Interface.Textures.TextureWraps;
using Serilog;
namespace Dalamud.Interface.ImGuiNotification;
/// <summary>Represents a blueprint for a notification.</summary>

View file

@ -1,11 +1,9 @@
using System.IO;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using Dalamud.Bindings.ImGui;
using Dalamud.Game.Text;
using Dalamud.Interface.Internal;
using Dalamud.Interface.Internal.Windows;
using Dalamud.Interface.ManagedFontAtlas;
using Dalamud.Interface.Textures;

Some files were not shown because too many files have changed in this diff Show more