Some Tutorial updates.

This commit is contained in:
Ottermandias 2022-07-12 16:26:37 +02:00
parent b3ee622396
commit 57b9f60ba3
10 changed files with 101 additions and 53 deletions

@ -1 +1 @@
Subproject commit 70d9f81436c82cc51734f0661d10f461da4f1840 Subproject commit b6c4877cc586f47931e71f284f865833846d9baa

View file

@ -246,22 +246,10 @@ public partial class ModFileSystemSelector
return false; return false;
} }
// Add the state filter combo-button to the right of the filter box. private void DrawFilterCombo( ref bool everything )
protected override float CustomFilters( float width )
{ {
var pos = ImGui.GetCursorPos();
var remainingWidth = width - ImGui.GetFrameHeight();
var comboPos = new Vector2( pos.X + remainingWidth, pos.Y );
var everything = _stateFilter == ModFilterExtensions.UnfilteredStateMods;
ImGui.SetCursorPos( comboPos );
// Draw combo button
using var color = ImRaii.PushColor( ImGuiCol.Button, Colors.FilterActive, !everything );
using var combo = ImRaii.Combo( "##filterCombo", string.Empty, using var combo = ImRaii.Combo( "##filterCombo", string.Empty,
ImGuiComboFlags.NoPreview | ImGuiComboFlags.PopupAlignLeft | ImGuiComboFlags.HeightLargest ); ImGuiComboFlags.NoPreview | ImGuiComboFlags.PopupAlignLeft | ImGuiComboFlags.HeightLargest );
color.Pop();
if( combo ) if( combo )
{ {
using var style = ImRaii.PushStyle( ImGuiStyleVar.ItemSpacing, using var style = ImRaii.PushStyle( ImGuiStyleVar.ItemSpacing,
@ -285,8 +273,22 @@ public partial class ModFileSystemSelector
} }
} }
} }
}
combo.Dispose(); // Add the state filter combo-button to the right of the filter box.
protected override float CustomFilters( float width )
{
var pos = ImGui.GetCursorPos();
var remainingWidth = width - ImGui.GetFrameHeight();
var comboPos = new Vector2( pos.X + remainingWidth, pos.Y );
var everything = _stateFilter == ModFilterExtensions.UnfilteredStateMods;
ImGui.SetCursorPos( comboPos );
// Draw combo button
using var color = ImRaii.PushColor( ImGuiCol.Button, Colors.FilterActive, !everything );
DrawFilterCombo( ref everything );
ConfigWindow.OpenTutorial( ConfigWindow.BasicTutorialSteps.ModFilters );
if( ImGui.IsItemClicked( ImGuiMouseButton.Right ) ) if( ImGui.IsItemClicked( ImGuiMouseButton.Right ) )
{ {
_stateFilter = ModFilterExtensions.UnfilteredStateMods; _stateFilter = ModFilterExtensions.UnfilteredStateMods;

View file

@ -201,7 +201,7 @@ public sealed partial class ModFileSystemSelector : FileSystemSelector< Mod, Mod
{ {
var button = ImGuiUtil.DrawDisabledButton( FontAwesomeIcon.FileImport.ToIconString(), size, var button = ImGuiUtil.DrawDisabledButton( FontAwesomeIcon.FileImport.ToIconString(), size,
"Import one or multiple mods from Tex Tools Mod Pack Files.", !Penumbra.ModManager.Valid, true ); "Import one or multiple mods from Tex Tools Mod Pack Files.", !Penumbra.ModManager.Valid, true );
ConfigWindow.OpenTutorial( 13 ); ConfigWindow.OpenTutorial( ConfigWindow.BasicTutorialSteps.ModImport );
if (!button) if (!button)
{ {
return; return;
@ -312,7 +312,7 @@ public sealed partial class ModFileSystemSelector : FileSystemSelector< Mod, Mod
{ {
ImGui.OpenPopup( "ExtendedHelp" ); ImGui.OpenPopup( "ExtendedHelp" );
} }
ConfigWindow.OpenTutorial( 14 ); ConfigWindow.OpenTutorial( ConfigWindow.BasicTutorialSteps.AdvancedHelp );
} }
// Helpers. // Helpers.

View file

@ -23,7 +23,7 @@ public partial class ConfigWindow
public void Draw() public void Draw()
{ {
using var tab = ImRaii.TabItem( "Collections" ); using var tab = ImRaii.TabItem( "Collections" );
OpenTutorial( 5 ); OpenTutorial( BasicTutorialSteps.Collections );
if( !tab ) if( !tab )
{ {
return; return;
@ -194,7 +194,7 @@ public partial class ConfigWindow
{ {
ImGui.Dummy( _window._defaultSpace ); ImGui.Dummy( _window._defaultSpace );
var open = ImGui.CollapsingHeader( "Active Collections" ); var open = ImGui.CollapsingHeader( "Active Collections" );
OpenTutorial( 9 ); OpenTutorial( BasicTutorialSteps.ActiveCollections );
if( !open ) if( !open )
{ {
return; return;
@ -202,7 +202,7 @@ public partial class ConfigWindow
ImGui.Dummy( _window._defaultSpace ); ImGui.Dummy( _window._defaultSpace );
DrawDefaultCollectionSelector(); DrawDefaultCollectionSelector();
OpenTutorial( 10 ); OpenTutorial( BasicTutorialSteps.DefaultCollection );
ImGui.Dummy( _window._defaultSpace ); ImGui.Dummy( _window._defaultSpace );
foreach( var type in CollectionTypeExtensions.Special ) foreach( var type in CollectionTypeExtensions.Special )
{ {
@ -248,7 +248,7 @@ public partial class ConfigWindow
DrawNewCharacterCollection(); DrawNewCharacterCollection();
} }
OpenTutorial( 11 ); OpenTutorial( BasicTutorialSteps.SpecialCollections );
ImGui.Dummy( _window._defaultSpace ); ImGui.Dummy( _window._defaultSpace );
} }
@ -257,7 +257,7 @@ public partial class ConfigWindow
{ {
ImGui.Dummy( _window._defaultSpace ); ImGui.Dummy( _window._defaultSpace );
var open = ImGui.CollapsingHeader( "Collection Settings", ImGuiTreeNodeFlags.DefaultOpen ); var open = ImGui.CollapsingHeader( "Collection Settings", ImGuiTreeNodeFlags.DefaultOpen );
OpenTutorial( 6 ); OpenTutorial( BasicTutorialSteps.EditingCollections );
if( !open ) if( !open )
{ {
return; return;
@ -265,12 +265,12 @@ public partial class ConfigWindow
ImGui.Dummy( _window._defaultSpace ); ImGui.Dummy( _window._defaultSpace );
DrawCurrentCollectionSelector(); DrawCurrentCollectionSelector();
OpenTutorial( 7 ); OpenTutorial( BasicTutorialSteps.CurrentCollection );
ImGui.Dummy( _window._defaultSpace ); ImGui.Dummy( _window._defaultSpace );
DrawNewCollectionInput(); DrawNewCollectionInput();
ImGui.Dummy( _window._defaultSpace ); ImGui.Dummy( _window._defaultSpace );
DrawInheritanceBlock(); DrawInheritanceBlock();
OpenTutorial( 8 ); OpenTutorial( BasicTutorialSteps.Inheritance );
} }
} }
} }

View file

@ -36,7 +36,7 @@ public partial class ConfigWindow
private void DrawSettingsTab() private void DrawSettingsTab()
{ {
using var tab = DrawTab( SettingsTabHeader, Tabs.Settings ); using var tab = DrawTab( SettingsTabHeader, Tabs.Settings );
OpenTutorial( 17 ); OpenTutorial( BasicTutorialSteps.ModOptions );
if( !tab ) if( !tab )
{ {
return; return;
@ -52,10 +52,10 @@ public partial class ConfigWindow
ImGui.Dummy( _window._defaultSpace ); ImGui.Dummy( _window._defaultSpace );
_window._penumbra.Api.InvokePreSettingsPanel( _mod.ModPath.Name ); _window._penumbra.Api.InvokePreSettingsPanel( _mod.ModPath.Name );
DrawEnabledInput(); DrawEnabledInput();
OpenTutorial( 15 ); OpenTutorial( BasicTutorialSteps.EnablingMods );
ImGui.SameLine(); ImGui.SameLine();
DrawPriorityInput(); DrawPriorityInput();
OpenTutorial( 16 ); OpenTutorial( BasicTutorialSteps.Priority );
DrawRemoveSettings(); DrawRemoveSettings();
ImGui.Dummy( _window._defaultSpace ); ImGui.Dummy( _window._defaultSpace );
for( var idx = 0; idx < _mod.Groups.Count; ++idx ) for( var idx = 0; idx < _mod.Groups.Count; ++idx )

View file

@ -22,7 +22,7 @@ public partial class ConfigWindow
try try
{ {
using var tab = ImRaii.TabItem( "Mods" ); using var tab = ImRaii.TabItem( "Mods" );
OpenTutorial( 12 ); OpenTutorial( BasicTutorialSteps.Mods );
if( !tab ) if( !tab )
{ {
return; return;
@ -59,11 +59,17 @@ public partial class ConfigWindow
using var style = ImRaii.PushStyle( ImGuiStyleVar.FrameRounding, 0 ).Push( ImGuiStyleVar.ItemSpacing, Vector2.Zero ); using var style = ImRaii.PushStyle( ImGuiStyleVar.FrameRounding, 0 ).Push( ImGuiStyleVar.ItemSpacing, Vector2.Zero );
var buttonSize = new Vector2( ImGui.GetContentRegionAvail().X / 8f, 0 ); var buttonSize = new Vector2( ImGui.GetContentRegionAvail().X / 8f, 0 );
DrawDefaultCollectionButton( 3 * buttonSize ); using( var group = ImRaii.Group() )
ImGui.SameLine(); {
DrawInheritedCollectionButton( 3 * buttonSize ); DrawDefaultCollectionButton( 3 * buttonSize );
ImGui.SameLine(); ImGui.SameLine();
DrawCollectionSelector( "##collectionSelector", 2 * buttonSize.X, CollectionType.Current, false, null ); DrawInheritedCollectionButton( 3 * buttonSize );
ImGui.SameLine();
DrawCollectionSelector( "##collectionSelector", 2 * buttonSize.X, CollectionType.Current, false, null );
}
OpenTutorial( BasicTutorialSteps.CollectionSelectors );
if( !Penumbra.CollectionManager.CurrentCollectionInUse ) if( !Penumbra.CollectionManager.CurrentCollectionInUse )
{ {
ImGuiUtil.DrawTextButton( "The currently selected collection is not used in any way.", -Vector2.UnitX, Colors.PressEnterWarningBg ); ImGuiUtil.DrawTextButton( "The currently selected collection is not used in any way.", -Vector2.UnitX, Colors.PressEnterWarningBg );

View file

@ -31,11 +31,11 @@ public partial class ConfigWindow
{ {
if( !ImGui.CollapsingHeader( "General" ) ) if( !ImGui.CollapsingHeader( "General" ) )
{ {
OpenTutorial( 4 ); OpenTutorial( BasicTutorialSteps.GeneralSettings );
return; return;
} }
OpenTutorial( 4 ); OpenTutorial( BasicTutorialSteps.GeneralSettings );
Checkbox( "Hide Config Window when UI is Hidden", Checkbox( "Hide Config Window when UI is Hidden",
"Hide the penumbra main window when you manually hide the in-game user interface.", Penumbra.Config.HideUiWhenUiHidden, "Hide the penumbra main window when you manually hide the in-game user interface.", Penumbra.Config.HideUiWhenUiHidden,

View file

@ -28,6 +28,10 @@ public partial class ConfigWindow
public void Draw() public void Draw()
{ {
using var tab = ImRaii.TabItem( "Settings" ); using var tab = ImRaii.TabItem( "Settings" );
OpenTutorial( BasicTutorialSteps.Fin );
OpenTutorial( BasicTutorialSteps.Faq1 );
OpenTutorial( BasicTutorialSteps.Faq2 );
OpenTutorial( BasicTutorialSteps.Faq3 );
if( !tab ) if( !tab )
{ {
return; return;
@ -154,7 +158,7 @@ public partial class ConfigWindow
+ "It should also be placed near the root of a logical drive - the shorter the total path to this folder, the better.\n" + "It should also be placed near the root of a logical drive - the shorter the total path to this folder, the better.\n"
+ "Definitely do not place it in your Dalamud directory or any sub-directory thereof." ); + "Definitely do not place it in your Dalamud directory or any sub-directory thereof." );
group.Dispose(); group.Dispose();
OpenTutorial( 1 ); OpenTutorial( BasicTutorialSteps.ModDirectory );
ImGui.SameLine(); ImGui.SameLine();
var pos = ImGui.GetCursorPosX(); var pos = ImGui.GetCursorPosX();
ImGui.NewLine(); ImGui.NewLine();
@ -188,7 +192,7 @@ public partial class ConfigWindow
_window._penumbra.SetEnabled( enabled ); _window._penumbra.SetEnabled( enabled );
} }
OpenTutorial( 2 ); OpenTutorial( BasicTutorialSteps.EnableMods );
} }
private static void DrawShowAdvancedBox() private static void DrawShowAdvancedBox()
@ -208,13 +212,13 @@ public partial class ConfigWindow
// Manually split due to tutorial. // Manually split due to tutorial.
ImGuiComponents.HelpMarker( tt ); ImGuiComponents.HelpMarker( tt );
OpenTutorial( 0 ); OpenTutorial( BasicTutorialSteps.GeneralTooltips );
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextUnformatted( "Show Advanced Settings" ); ImGui.TextUnformatted( "Show Advanced Settings" );
ImGuiUtil.HoverTooltip( tt ); ImGuiUtil.HoverTooltip( tt );
} }
OpenTutorial( 3 ); OpenTutorial( BasicTutorialSteps.AdvancedSettings );
} }
private static void DrawColorSettings() private static void DrawColorSettings()

View file

@ -1,3 +1,4 @@
using System;
using OtterGui.Widgets; using OtterGui.Widgets;
using Penumbra.UI.Classes; using Penumbra.UI.Classes;
@ -15,13 +16,41 @@ public partial class ConfigWindow
} }
} }
public static void OpenTutorial( int id ) public static void OpenTutorial( BasicTutorialSteps step )
=> Tutorial.Open( id, Penumbra.Config.TutorialStep, v => => Tutorial.Open( ( int )step, Penumbra.Config.TutorialStep, v =>
{ {
Penumbra.Config.TutorialStep = v; Penumbra.Config.TutorialStep = v;
Penumbra.Config.Save(); Penumbra.Config.Save();
} ); } );
public enum BasicTutorialSteps
{
GeneralTooltips,
ModDirectory,
EnableMods,
AdvancedSettings,
GeneralSettings,
Collections,
EditingCollections,
CurrentCollection,
Inheritance,
ActiveCollections,
DefaultCollection,
SpecialCollections,
Mods,
ModImport,
AdvancedHelp,
ModFilters,
CollectionSelectors,
EnablingMods,
Priority,
ModOptions,
Fin,
Faq1,
Faq2,
Faq3,
}
public static readonly Tutorial Tutorial = new Tutorial() public static readonly Tutorial Tutorial = new Tutorial()
{ {
BorderColor = Colors.TutorialBorder, BorderColor = Colors.TutorialBorder,
@ -32,23 +61,27 @@ public partial class ConfigWindow
+ "Hover over them when you are unsure what something does or how to do something." ) + "Hover over them when you are unsure what something does or how to do something." )
.Register( "Initial Setup, Step 1: Mod Directory", .Register( "Initial Setup, Step 1: Mod Directory",
"The first step is to set up your mod directory, which is where your mods are extracted to.\n\n" "The first step is to set up your mod directory, which is where your mods are extracted to.\n\n"
+ "The mod directory should be a short path - like 'D:\\FFXIVMods', if you want to store your mods on D: - and be on a fast hard drive." ) + "The mod directory should be a short path - like 'C:\\FFXIVMods' - on your fastest available drive. Faster drives improve performance.\n\n"
+ "The folder should be an empty folder no other applications write to." )
.Register( "Initial Setup, Step 2: Enable Mods", "Do not forget to enable your mods in case they are not." ) .Register( "Initial Setup, Step 2: Enable Mods", "Do not forget to enable your mods in case they are not." )
.Register( "Advanced Settings", "When you are just starting, you should leave this off.\n\n" .Register( "Advanced Settings", "When you are just starting, you should leave this off.\n\n"
+ "If you need to do any editing of your mods, you will have to turn it on later." ) + "If you need to do any editing of your mods, you will have to turn it on later." )
.Register( "General Settings", "Look through all of these settings before starting, they might help you a lot!\n\n" .Register( "General Settings", "Look through all of these settings before starting, they might help you a lot!\n\n"
+ "If you do not know what some of these do yet, return to this later!" ) + "If you do not know what some of these do yet, return to this later!" )
.Register( "Initial Setup, Step 3: Collections", "Collections are lists of settings for your installed mods.\n\n" .Register( "Initial Setup, Step 3: Collections", "Collections are lists of settings for your installed mods.\n\n"
+ "This is our next stop!" ) + "This is our next stop!\n\n"
+ "Go here after setting up your root folder to continue the tutorial!" )
.Register( "Initial Setup, Step 4: Editing Collections", "First, we need to open the Collection Settings.\n\n" .Register( "Initial Setup, Step 4: Editing Collections", "First, we need to open the Collection Settings.\n\n"
+ "In here, we can create new collections, delete collections, or make them inherit from each other." ) + "In here, we can create new collections, delete collections, or make them inherit from each other." )
.Register( "Initial Setup, Step 5: Current Collection", .Register( "Initial Setup, Step 5: Current Collection",
"We should already have a Default Collection, and for our simple setup, we do not need to do anything here.\n\n" "We should already have a Default Collection, and for our simple setup, we do not need to do anything here.\n\n"
+ "The current collection is the one we are currently editing. Any changes we make in our mod settings later will edit this collection." ) + "The current collection is the one we are currently editing. Any changes we make in our mod settings later in the next tab will edit this collection." )
.Register( "Inheritance", .Register( "Inheritance",
"This is a more advanced feature. Click the 'What is Inheritance?' button for more information, but we will ignore this for now." ) "This is a more advanced feature. Click the help button for more information, but we will ignore this for now." )
.Register( "Initial Setup, Step 6: Active Collections", "Active Collections are those that are actually in use at the moment.\n\n" .Register( "Initial Setup, Step 6: Active Collections", "Active Collections are those that are actually in use at the moment.\n\n"
+ "Any collection in use will apply to the game under certain conditions." ) + "Any collection in use will apply to the game under certain conditions.\n\n"
+ "The Current Collection is also active for technical reasons.\n\n"
+ "Open this now to continue." )
.Register( "Initial Setup, Step 7: Default Collection", .Register( "Initial Setup, Step 7: Default Collection",
"The Default Collection - which should currently also be set to a collection named Default - is the main one.\n\n" "The Default Collection - which should currently also be set to a collection named Default - is the main one.\n\n"
+ "As long as no more specific collection applies to something, the mods from the Default Collection will be used.\n\n" + "As long as no more specific collection applies to something, the mods from the Default Collection will be used.\n\n"
@ -56,15 +89,21 @@ public partial class ConfigWindow
.Register( "Special Collections", .Register( "Special Collections",
"Special Collections are those that are used only for special characters in the game, either by specific conditions, or by name.\n\n" "Special Collections are those that are used only for special characters in the game, either by specific conditions, or by name.\n\n"
+ "We will skip this for now, but hovering over the creation buttons should explain how they work." ) + "We will skip this for now, but hovering over the creation buttons should explain how they work." )
.Register( "Initial Setup, Step 8: Mods", "Our last stop is the Mods tab, where you can import and setup your mods." ) .Register( "Initial Setup, Step 8: Mods", "Our last stop is the Mods tab, where you can import and setup your mods.\n\n"
+ "Please go there after verifying that your Current Collection and Default Collection are setup to your liking." )
.Register( "Initial Setup, Step 9: Mod Import", .Register( "Initial Setup, Step 9: Mod Import",
"Click this button to open a file selector with which to select TTMP mod files. You can select multiple at once.\n\n" "Click this button to open a file selector with which to select TTMP mod files. You can select multiple at once.\n\n"
+ "It is not recommended to import huge mod packs of all your TexTools mods, but rather import the mods themselves, otherwise you lose out on a lot of Penumbra features!\n\n" + "It is not recommended to import huge mod packs of all your TexTools mods, but rather import the mods themselves, otherwise you lose out on a lot of Penumbra features!\n\n"
+ "A feature to import raw texture mods for Tattoos etc. is available under Advanced Editing, but is currently a work in progress." ) // TODO + "A feature to import raw texture mods for Tattoos etc. is available under Advanced Editing, but is currently a work in progress." ) // TODO
.Register( "Advanced Help", "Click this button to get detailed information on what you can do in the mod selector.\n\n" .Register( "Advanced Help", "Click this button to get detailed information on what you can do in the mod selector.\n\n"
+ "Import and select a mod now to continue." ) + "Import and select a mod now to continue." )
.Register( "Mod Filters", "You can filter the available mods by name, author, changed items or various attributes here." )
.Register( "Collection Selectors", "This row provides shortcuts to set your Current Collection.\n\n"
+ "The first button sets it to your Default Collection (if any).\n\n"
+ "The second button sets it to the collection the settings of the currently selected mod are inherited from (if any).\n\n"
+ "The third is a regular collection selector to let you choose among all your collections." )
.Register( "Initial Setup, Step 11: Enabling Mods", .Register( "Initial Setup, Step 11: Enabling Mods",
"Enable a mod here. Disabled mods will not apply to anything in the current collection (which can be seen and changed in the top-right corner).\n\n" "Enable a mod here. Disabled mods will not apply to anything in the current collection.\n\n"
+ "Mods can be enabled or disabled in a collection, or they can be unconfigured, in which case they will use Inheritance." ) + "Mods can be enabled or disabled in a collection, or they can be unconfigured, in which case they will use Inheritance." )
.Register( "Initial Setup, Step 12: Priority", "If two enabled mods in one collection change the same files, there is a conflict.\n\n" .Register( "Initial Setup, Step 12: Priority", "If two enabled mods in one collection change the same files, there is a conflict.\n\n"
+ "Conflicts can be solved by setting a priority. The mod with the higher number will be used for all the conflicting files.\n\n" + "Conflicts can be solved by setting a priority. The mod with the higher number will be used for all the conflicting files.\n\n"
@ -76,5 +115,6 @@ public partial class ConfigWindow
.Register( "FAQ 1", "Penumbra can not easily change which items a mod applies to." ) .Register( "FAQ 1", "Penumbra can not easily change which items a mod applies to." )
.Register( "FAQ 2", .Register( "FAQ 2",
"It is advised to not use TexTools and Penumbra at the same time. Penumbra may refuse to work if TexTools broke your game indices." ) "It is advised to not use TexTools and Penumbra at the same time. Penumbra may refuse to work if TexTools broke your game indices." )
.Register( "FAQ 3", "Penumbra can change the skin material a mod uses. This is under advanced editing." ); .Register( "FAQ 3", "Penumbra can change the skin material a mod uses. This is under advanced editing." )
.EnsureSize( Enum.GetValues< BasicTutorialSteps >().Length );
} }

View file

@ -79,10 +79,6 @@ public sealed partial class ConfigWindow : Window, IDisposable
} }
else else
{ {
OpenTutorial( 18 );
OpenTutorial( 19 );
OpenTutorial( 20 );
OpenTutorial( 21 );
using var bar = ImRaii.TabBar( string.Empty, ImGuiTabBarFlags.NoTooltip ); using var bar = ImRaii.TabBar( string.Empty, ImGuiTabBarFlags.NoTooltip );
SetupSizes(); SetupSizes();
_settingsTab.Draw(); _settingsTab.Draw();