diff --git a/.editorconfig b/.editorconfig index bc29f5d7..e283b2a2 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,67 +1,85 @@ - -[*] -charset=utf-8 -end_of_line=lf -trim_trailing_whitespace=false -insert_final_newline=false -indent_style=space -indent_size=4 - -# Microsoft .NET properties -csharp_new_line_before_members_in_object_initializers=false -csharp_preferred_modifier_order=public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion -csharp_space_after_cast=false -csharp_space_after_keywords_in_control_flow_statements=false -csharp_space_between_method_call_parameter_list_parentheses=true -csharp_space_between_method_declaration_parameter_list_parentheses=true -csharp_space_between_parentheses=control_flow_statements,expressions,type_casts -csharp_style_var_elsewhere=true:suggestion -csharp_style_var_for_built_in_types=true:suggestion -csharp_style_var_when_type_is_apparent=true:suggestion -dotnet_style_parentheses_in_arithmetic_binary_operators=never_if_unnecessary:none -dotnet_style_parentheses_in_other_binary_operators=never_if_unnecessary:none -dotnet_style_parentheses_in_relational_binary_operators=never_if_unnecessary:none -dotnet_style_predefined_type_for_locals_parameters_members=true:suggestion -dotnet_style_predefined_type_for_member_access=true:suggestion -dotnet_style_qualification_for_event=false:suggestion -dotnet_style_qualification_for_field=false:suggestion -dotnet_style_qualification_for_method=false:suggestion -dotnet_style_qualification_for_property=false:suggestion -dotnet_style_require_accessibility_modifiers=for_non_interface_members:suggestion - -# ReSharper properties -resharper_autodetect_indent_settings=true -resharper_csharp_space_within_array_access_brackets=true -resharper_enforce_line_ending_style=true -resharper_place_attribute_on_same_line=false -resharper_space_after_cast=false -resharper_space_within_checked_parentheses=true -resharper_space_within_default_parentheses=true -resharper_space_within_nameof_parentheses=true -resharper_space_within_single_line_array_initializer_braces=true -resharper_space_within_sizeof_parentheses=true -resharper_space_within_typeof_parentheses=true -resharper_space_within_type_argument_angles=true -resharper_space_within_type_parameter_angles=true -resharper_use_indent_from_vs=false -resharper_wrap_lines=true - -# ReSharper inspection severities -resharper_arrange_redundant_parentheses_highlighting=hint -resharper_arrange_this_qualifier_highlighting=hint -resharper_arrange_type_member_modifiers_highlighting=hint -resharper_arrange_type_modifiers_highlighting=hint -resharper_built_in_type_reference_style_for_member_access_highlighting=hint -resharper_built_in_type_reference_style_highlighting=hint -resharper_redundant_base_qualifier_highlighting=warning -resharper_suggest_var_or_type_built_in_types_highlighting=hint -resharper_suggest_var_or_type_elsewhere_highlighting=hint -resharper_suggest_var_or_type_simple_types_highlighting=hint -resharper_web_config_module_not_resolved_highlighting=warning -resharper_web_config_type_not_resolved_highlighting=warning -resharper_web_config_wrong_module_highlighting=warning - -[*.{appxmanifest,asax,ascx,aspx,build,cg,cginc,compute,cs,cshtml,dtd,hlsl,hlsli,hlslinc,master,nuspec,razor,resw,resx,shader,skin,usf,ush,vb,xaml,xamlx,xoml,xsd}] -indent_style=space -indent_size=4 -tab_width=4 + +[*] +charset=utf-8 +end_of_line=lf +trim_trailing_whitespace=true +insert_final_newline=false +indent_style=space +indent_size=4 + +# Microsoft .NET properties +csharp_new_line_before_members_in_object_initializers=false +csharp_preferred_modifier_order=public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion +csharp_prefer_braces=true:none +csharp_space_after_cast=false +csharp_space_after_keywords_in_control_flow_statements=false +csharp_space_between_method_call_parameter_list_parentheses=true +csharp_space_between_method_declaration_parameter_list_parentheses=true +csharp_space_between_parentheses=control_flow_statements,expressions,type_casts +csharp_style_var_elsewhere=true:suggestion +csharp_style_var_for_built_in_types=true:suggestion +csharp_style_var_when_type_is_apparent=true:suggestion +dotnet_style_parentheses_in_arithmetic_binary_operators=never_if_unnecessary:none +dotnet_style_parentheses_in_other_binary_operators=never_if_unnecessary:none +dotnet_style_parentheses_in_relational_binary_operators=never_if_unnecessary:none +dotnet_style_predefined_type_for_locals_parameters_members=true:suggestion +dotnet_style_predefined_type_for_member_access=true:suggestion +dotnet_style_qualification_for_event=false:suggestion +dotnet_style_qualification_for_field=false:suggestion +dotnet_style_qualification_for_method=false:suggestion +dotnet_style_qualification_for_property=false:suggestion +dotnet_style_require_accessibility_modifiers=for_non_interface_members:suggestion + +# ReSharper properties +resharper_align_multiline_binary_expressions_chain=false +resharper_align_multiline_calls_chain=false +resharper_autodetect_indent_settings=true +resharper_braces_redundant=true +resharper_constructor_or_destructor_body=expression_body +resharper_csharp_empty_block_style=together +resharper_csharp_max_line_length=144 +resharper_csharp_space_within_array_access_brackets=true +resharper_enforce_line_ending_style=true +resharper_int_align_assignments=true +resharper_int_align_comments=true +resharper_int_align_fields=true +resharper_int_align_invocations=false +resharper_int_align_nested_ternary=true +resharper_int_align_properties=false +resharper_int_align_switch_expressions=true +resharper_int_align_switch_sections=true +resharper_int_align_variables=true +resharper_local_function_body=expression_body +resharper_method_or_operator_body=expression_body +resharper_place_attribute_on_same_line=false +resharper_space_after_cast=false +resharper_space_within_checked_parentheses=true +resharper_space_within_default_parentheses=true +resharper_space_within_nameof_parentheses=true +resharper_space_within_single_line_array_initializer_braces=true +resharper_space_within_sizeof_parentheses=true +resharper_space_within_typeof_parentheses=true +resharper_space_within_type_argument_angles=true +resharper_space_within_type_parameter_angles=true +resharper_use_indent_from_vs=false +resharper_wrap_lines=true + +# ReSharper inspection severities +resharper_arrange_redundant_parentheses_highlighting=hint +resharper_arrange_this_qualifier_highlighting=hint +resharper_arrange_type_member_modifiers_highlighting=hint +resharper_arrange_type_modifiers_highlighting=hint +resharper_built_in_type_reference_style_for_member_access_highlighting=hint +resharper_built_in_type_reference_style_highlighting=hint +resharper_redundant_base_qualifier_highlighting=warning +resharper_suggest_var_or_type_built_in_types_highlighting=hint +resharper_suggest_var_or_type_elsewhere_highlighting=hint +resharper_suggest_var_or_type_simple_types_highlighting=hint +resharper_web_config_module_not_resolved_highlighting=warning +resharper_web_config_type_not_resolved_highlighting=warning +resharper_web_config_wrong_module_highlighting=warning + +[*.{appxmanifest,asax,ascx,aspx,build,cg,cginc,compute,cs,cshtml,dtd,hlsl,hlsli,hlslinc,master,nuspec,razor,resw,resx,shader,skin,usf,ush,vb,xaml,xamlx,xoml,xsd}] +indent_style=space +indent_size=4 +tab_width=4 diff --git a/Penumbra/API/ModsController.cs b/Penumbra/API/ModsController.cs index a48bdd12..93e939e8 100644 --- a/Penumbra/API/ModsController.cs +++ b/Penumbra/API/ModsController.cs @@ -9,10 +9,7 @@ namespace Penumbra.API { private readonly Plugin _plugin; - public ModsController( Plugin plugin ) - { - _plugin = plugin; - } + public ModsController( Plugin plugin ) => _plugin = plugin; [Route( HttpVerbs.Get, "/mods" )] public object GetMods() @@ -24,7 +21,7 @@ namespace Penumbra.API x.FolderName, x.Mod.Meta, BasePath = x.Mod.ModBasePath.FullName, - Files = x.Mod.ModFiles.Select( fi => fi.FullName ) + Files = x.Mod.ModFiles.Select( fi => fi.FullName ) } ); } diff --git a/Penumbra/DialogExtensions.cs b/Penumbra/DialogExtensions.cs index ac48e9f2..31bc3c80 100644 --- a/Penumbra/DialogExtensions.cs +++ b/Penumbra/DialogExtensions.cs @@ -18,7 +18,7 @@ namespace Penumbra public static Task< DialogResult > ShowDialogAsync( this CommonDialog form, IWin32Window owner ) { var taskSource = new TaskCompletionSource< DialogResult >(); - var th = new Thread( () => DialogThread( form, owner, taskSource ) ); + var th = new Thread( () => DialogThread( form, owner, taskSource ) ); th.Start(); return taskSource.Task; } @@ -38,28 +38,25 @@ namespace Penumbra { public IntPtr Handle { get; set; } - public DialogHandle( IntPtr handle ) - { - Handle = handle; - } + public DialogHandle( IntPtr handle ) => Handle = handle; } public class HiddenForm : Form { - private readonly CommonDialog _form; - private readonly IWin32Window _owner; + private readonly CommonDialog _form; + private readonly IWin32Window _owner; private readonly TaskCompletionSource< DialogResult > _taskSource; public HiddenForm( CommonDialog form, IWin32Window owner, TaskCompletionSource< DialogResult > taskSource ) { - this._form = form; - this._owner = owner; - this._taskSource = taskSource; + _form = form; + _owner = owner; + _taskSource = taskSource; - Opacity = 0; + Opacity = 0; FormBorderStyle = FormBorderStyle.None; - ShowInTaskbar = false; - Size = new Size( 0, 0 ); + ShowInTaskbar = false; + Size = new Size( 0, 0 ); Shown += HiddenForm_Shown; } diff --git a/Penumbra/Extensions/FuckedExtensions.cs b/Penumbra/Extensions/FuckedExtensions.cs index 55720713..f9f41413 100644 --- a/Penumbra/Extensions/FuckedExtensions.cs +++ b/Penumbra/Extensions/FuckedExtensions.cs @@ -25,7 +25,8 @@ namespace Penumbra.Extensions /// The type of the underlying field /// A delegate that will return a reference to a particular field - zero copy /// - private static RefGet< TObject, TField > CreateRefGetter< TObject, TField >( string fieldName ) where TField : unmanaged + private static RefGet< TObject, TField > CreateRefGetter< TObject, TField >( string fieldName ) + where TField : unmanaged { const BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance; diff --git a/Penumbra/Game/GameUtils.cs b/Penumbra/Game/GameUtils.cs index 9396fe11..95eb89fc 100644 --- a/Penumbra/Game/GameUtils.cs +++ b/Penumbra/Game/GameUtils.cs @@ -14,8 +14,8 @@ namespace Penumbra.Game public unsafe delegate void* UnloadPlayerResourcesPrototype( IntPtr pResourceManager ); - public LoadPlayerResourcesPrototype LoadPlayerResources { get; private set; } - public UnloadPlayerResourcesPrototype UnloadPlayerResources { get; private set; } + public LoadPlayerResourcesPrototype LoadPlayerResources { get; } + public UnloadPlayerResourcesPrototype UnloadPlayerResources { get; } // Object addresses private readonly IntPtr _playerResourceManagerAddress; @@ -33,7 +33,7 @@ namespace Penumbra.Game _playerResourceManagerAddress = scanner.GetStaticAddressFromSig( "0F 44 FE 48 8B 0D ?? ?? ?? ?? 48 85 C9 74 05" ); - LoadPlayerResources = Marshal.GetDelegateForFunctionPointer< LoadPlayerResourcesPrototype >( loadPlayerResourcesAddress ); + LoadPlayerResources = Marshal.GetDelegateForFunctionPointer< LoadPlayerResourcesPrototype >( loadPlayerResourcesAddress ); UnloadPlayerResources = Marshal.GetDelegateForFunctionPointer< UnloadPlayerResourcesPrototype >( unloadPlayerResourcesAddress ); } diff --git a/Penumbra/Game/RefreshActors.cs b/Penumbra/Game/RefreshActors.cs index 87193bb6..573f26db 100644 --- a/Penumbra/Game/RefreshActors.cs +++ b/Penumbra/Game/RefreshActors.cs @@ -1,9 +1,10 @@ +using System.Linq; using System.Runtime.InteropServices; using System.Threading.Tasks; using Dalamud.Game.ClientState.Actors; using Dalamud.Game.ClientState.Actors.Types; -namespace Penumbra +namespace Penumbra.Game { public static class RefreshActors { @@ -12,43 +13,49 @@ namespace Penumbra private const int RenderTaskOtherDelay = 25; private const int ModelInvisibilityFlag = 0b10; - private static async void Redraw(Actor actor) + private static async void Redraw( Actor actor ) { - var ptr = actor.Address; + var ptr = actor.Address; var renderModePtr = ptr + RenderModeOffset; - var renderStatus = Marshal.ReadInt32(renderModePtr); + var renderStatus = Marshal.ReadInt32( renderModePtr ); - async void DrawObject(int delay) + async void DrawObject( int delay ) { - Marshal.WriteInt32(renderModePtr, renderStatus | ModelInvisibilityFlag); - await Task.Delay(delay); - Marshal.WriteInt32(renderModePtr, renderStatus & ~ModelInvisibilityFlag); + Marshal.WriteInt32( renderModePtr, renderStatus | ModelInvisibilityFlag ); + await Task.Delay( delay ); + Marshal.WriteInt32( renderModePtr, renderStatus & ~ModelInvisibilityFlag ); } - if (actor.ObjectKind == Dalamud.Game.ClientState.Actors.ObjectKind.Player) + if( actor.ObjectKind == ObjectKind.Player ) { - DrawObject(RenderTaskPlayerDelay); - await Task.Delay(RenderTaskPlayerDelay); + DrawObject( RenderTaskPlayerDelay ); + await Task.Delay( RenderTaskPlayerDelay ); } else - DrawObject(RenderTaskOtherDelay); - + { + DrawObject( RenderTaskOtherDelay ); + } } - public static void RedrawSpecific(ActorTable actors, string name) + public static void RedrawSpecific( ActorTable actors, string name ) { - if (name?.Length == 0) - RedrawAll(actors); + if( name?.Length == 0 ) + { + RedrawAll( actors ); + } - foreach (var actor in actors) - if (actor.Name == name) - Redraw(actor); + foreach( var actor in actors.Where( A => A.Name == name ) ) + { + Redraw( actor ); + } } - public static void RedrawAll(ActorTable actors) + public static void RedrawAll( ActorTable actors ) { - foreach (var actor in actors) - Redraw(actor); + foreach( var actor in actors ) + { + Redraw( actor ); + } } } -} +} \ No newline at end of file diff --git a/Penumbra/Importer/MagicTempFileStreamManagerAndDeleterFuckery.cs b/Penumbra/Importer/MagicTempFileStreamManagerAndDeleterFuckery.cs index 68f12965..6667f2e0 100644 --- a/Penumbra/Importer/MagicTempFileStreamManagerAndDeleterFuckery.cs +++ b/Penumbra/Importer/MagicTempFileStreamManagerAndDeleterFuckery.cs @@ -8,10 +8,7 @@ namespace Penumbra.Importer { private readonly FileStream _fileStream; - public MagicTempFileStreamManagerAndDeleterFuckery( FileStream stream ) : base( stream ) - { - _fileStream = stream; - } + public MagicTempFileStreamManagerAndDeleterFuckery( FileStream stream ) : base( stream ) => _fileStream = stream; public new void Dispose() { diff --git a/Penumbra/Importer/TexToolsImport.cs b/Penumbra/Importer/TexToolsImport.cs index c8d85b34..f6b366eb 100644 --- a/Penumbra/Importer/TexToolsImport.cs +++ b/Penumbra/Importer/TexToolsImport.cs @@ -16,7 +16,7 @@ namespace Penumbra.Importer { private readonly DirectoryInfo _outDirectory; - private const string TempFileName = "textools-import"; + private const string TempFileName = "textools-import"; private readonly string _resolvedTempFilePath; public ImporterState State { get; private set; } @@ -42,7 +42,7 @@ namespace Penumbra.Importer public TexToolsImport( DirectoryInfo outDirectory ) { - _outDirectory = outDirectory; + _outDirectory = outDirectory; _resolvedTempFilePath = Path.Combine( _outDirectory.FullName, TempFileName ); } @@ -50,7 +50,7 @@ namespace Penumbra.Importer { CurrentModPack = modPackFile.Name; - VerifyVersionAndImport(modPackFile); + VerifyVersionAndImport( modPackFile ); State = ImporterState.Done; } @@ -67,8 +67,8 @@ namespace Penumbra.Importer State = ImporterState.WritingPackToDisk; // write shitty zip garbage to disk - var entry = file.GetEntry( entryName ); - using var s = file.GetInputStream( entry ); + var entry = file.GetEntry( entryName ); + using var s = file.GetInputStream( entry ); WriteZipEntryToTempFile( s ); @@ -76,25 +76,31 @@ namespace Penumbra.Importer return new MagicTempFileStreamManagerAndDeleterFuckery( fs ); } - private void VerifyVersionAndImport(FileInfo modPackFile) + private void VerifyVersionAndImport( FileInfo modPackFile ) { - using var zfs = modPackFile.OpenRead(); + using var zfs = modPackFile.OpenRead(); using var extractedModPack = new ZipFile( zfs ); - var mpl = extractedModPack.GetEntry( "TTMPL.mpl" ); - var modRaw = GetStringFromZipEntry( extractedModPack, mpl, Encoding.UTF8 ); + var mpl = extractedModPack.GetEntry( "TTMPL.mpl" ); + var modRaw = GetStringFromZipEntry( extractedModPack, mpl, Encoding.UTF8 ); // At least a better validation than going by the extension. - if (modRaw.Contains("\"TTMPVersion\":")) + if( modRaw.Contains( "\"TTMPVersion\":" ) ) { - if (modPackFile.Extension != ".ttmp2") - PluginLog.Warning($"File {modPackFile.FullName} seems to be a V2 TTMP, but has the wrong extension."); - ImportV2ModPack(modPackFile, extractedModPack, modRaw); + if( modPackFile.Extension != ".ttmp2" ) + { + PluginLog.Warning( $"File {modPackFile.FullName} seems to be a V2 TTMP, but has the wrong extension." ); + } + + ImportV2ModPack( modPackFile, extractedModPack, modRaw ); } else { - if (modPackFile.Extension != ".ttmp") - PluginLog.Warning($"File {modPackFile.FullName} seems to be a V1 TTMP, but has the wrong extension."); - ImportV1ModPack(modPackFile, extractedModPack, modRaw); + if( modPackFile.Extension != ".ttmp" ) + { + PluginLog.Warning( $"File {modPackFile.FullName} seems to be a V1 TTMP, but has the wrong extension." ); + } + + ImportV1ModPack( modPackFile, extractedModPack, modRaw ); } } @@ -112,8 +118,8 @@ namespace Penumbra.Importer // Create a new ModMeta from the TTMP modlist info var modMeta = new ModMeta { - Author = "Unknown", - Name = modPackFile.Name, + Author = "Unknown", + Name = modPackFile.Name, Description = "Mod imported from TexTools mod pack" }; @@ -135,7 +141,7 @@ namespace Penumbra.Importer ExtractSimpleModList( newModFolder, modList, modData ); } - private void ImportV2ModPack( FileInfo modPackFile, ZipFile extractedModPack, string modRaw ) + private void ImportV2ModPack( FileInfo modPackFile, ZipFile extractedModPack, string modRaw ) { var modList = JsonConvert.DeserializeObject< SimpleModPack >( modRaw ); @@ -159,7 +165,7 @@ namespace Penumbra.Importer var modMeta = new ModMeta { Author = modList.Author, - Name = modList.Name, + Name = modList.Name, Description = string.IsNullOrEmpty( modList.Description ) ? "Mod imported from TexTools mod pack" : modList.Description @@ -188,7 +194,7 @@ namespace Penumbra.Importer var modMeta = new ModMeta { Author = modList.Author, - Name = modList.Name, + Name = modList.Name, Description = string.IsNullOrEmpty( modList.Description ) ? "Mod imported from TexTools mod pack" : modList.Description, @@ -206,24 +212,26 @@ namespace Penumbra.Importer newModFolder.Create(); if( modList.SimpleModsList != null ) + { ExtractSimpleModList( newModFolder, modList.SimpleModsList, modData ); + } if( modList.ModPackPages == null ) + { return; + } // Iterate through all pages - foreach( var page in modList.ModPackPages) + foreach( var group in modList.ModPackPages.SelectMany( page => page.ModGroups ) ) { - foreach(var group in page.ModGroups) + var groupFolder = new DirectoryInfo( Path.Combine( newModFolder.FullName, group.GroupName.ReplaceInvalidPathSymbols() ) ); + foreach( var option in group.OptionList ) { - var groupFolder = new DirectoryInfo(Path.Combine(newModFolder.FullName, group.GroupName.ReplaceInvalidPathSymbols())); - foreach(var option in group.OptionList) - { - var optionFolder = new DirectoryInfo( Path.Combine( groupFolder.FullName, option.Name.ReplaceInvalidPathSymbols()) ); - ExtractSimpleModList( optionFolder, option.ModsJsons, modData ); - } - AddMeta(newModFolder, groupFolder, group, modMeta); + var optionFolder = new DirectoryInfo( Path.Combine( groupFolder.FullName, option.Name.ReplaceInvalidPathSymbols() ) ); + ExtractSimpleModList( optionFolder, option.ModsJsons, modData ); } + + AddMeta( newModFolder, groupFolder, group, modMeta ); } File.WriteAllText( @@ -232,32 +240,35 @@ namespace Penumbra.Importer ); } - private void AddMeta( DirectoryInfo baseFolder, DirectoryInfo groupFolder,ModGroup group, ModMeta meta) + private void AddMeta( DirectoryInfo baseFolder, DirectoryInfo groupFolder, ModGroup group, ModMeta meta ) { var Inf = new InstallerInfo { SelectionType = group.SelectionType, - GroupName = group.GroupName, - Options = new List