DebugMenu documentation
~~~~~~~~~~~~~~~~~~~~~~~
FWORKS
fairooze@gmail.com

------------------------------------------------------------------------------------------------

How to integrate the plugin with your project
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Set up the debug menu classes in the Project Settings
	- Unreal Editor -> Edit -> Project Settings -> Debug Menu

	For "Debug Menu Manager Ref", choose BP_DebugMenuManager
	For "Debug Menu Input Handler Ref", you have three options

		1) Choose BP_DebugMenu_EnhancedInput if you are using the new enhanced input system (UE5.1)

		2) Choose BP_DebugMenu_LegacyInput if you are using the old input system

		3) Otherwise, if you prefer to manually hook up input:
		Get a reference to the manager object with ADebugMenuManager::GetDebugMenuManager()
		Call ADebugMenuManager::ToggleDebugMenu to toggle the menu on and off
		Call the following functions when the input is triggered while the menu is active:
			ADebugMenuManager::InputDown()
			ADebugMenuManager::InputUp()
			ADebugMenuManager::InputConfirm()
			ADebugMenuManager::InputCancel()
			ADebugMenuManager::InputLeft()
			ADebugMenuManager::InputRight()
			ADebugMenuManager::InputToggleWatch()
			
That is all, the menu is ready to be used during gameplay. If you have used one of the sample input blueprints:
- use the Slash key (/) to toggle the menu on/off. Or press both thumbsticks on the gamepad for a keyboard-less experience!
- use the Up/Down arrow keys to scroll through the entries
- use the Enter key to enter a category or toggle an entry. For numeric entries, pressing Enter will also let you type in a value
- use the Left/Right arrow keys to tweak an entry (if the entry supports it)
- use the Backspace key to leave the current category and go back to the previous one.

------------------------------------------------------------------------------------------------
			
How to customize the menu display options
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BP_DebugMenuManager has exposed options for various colors, fonts, etc to customize the look and feel of the menu
		
------------------------------------------------------------------------------------------------
		
How to add new categories to the menu
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Create a new blueprint of type ADebugMenuLibrary (or duplicate one of the sample libraries)
- Set the category name in the "CategoryHierarchy" property. You can nest categories by adding more entries to the array.
- Setup the entries for the category in the "MenuEntries" property (refer to below section)
- Add the library in the menu manager blueprint under "Default Libraries" so that the category is always available. Otherwise simply spawn the library blueprint at any time during gameplay and it will automatically register itself to the manager.

------------------------------------------------------------------------------------------------

How to add new entries to the category
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In the library blueprint, add a new entry with the desired type. Refer to the sample libraries/entries to see how they are set up.

	Blueprint Function - Calls a specified blueprint function when triggered
	Bool Blueprint - Modifies a boolean value whose getter/setter are defined in the library blueprint
	Bool CVar - Manipulates a console variable of Boolean type
	Bool EngineStat - Toggles an engine stat, eg "stat fps"
	Bool ShowFlag - Toggles an engine showflag, eg "showflag.staticmeshes"
	Float Blueprint - Modifies a float value whose getter/setter are defined in the library blueprint
	Float CVar - Manipulates a console variable of Float type
	Int32 Blueprint - Modifies a integer value whose getter/setter are defined in the library blueprint
	Int32 CVar - Manipulates a console variable of Int32 type
	String CVar - Manipulates a console variable of String type
	Vector Blueprint - Manipulates a vector value whose getter/setter are defined in the library blueprint 


-------------------------------------------------------------------------------------------------

Version History
~~~~~~~~~~~~~~~

1.08
- Fix crash when watching variables nested deeply in structs/arrays
- Add support for watching TMap variables

1.07
- Add UE 5.3 support
- Support for toggling watches on uobject variables via ObjectSearch menu with spacebar

1.06
- Tap PageUp/PageDown on keyboard to jump 10 entries at a time
- Improve formatting of display strings in object editor
- Add new library type ADebugMenuLibraryObjectList to list all objects of a class

1.05
- Add object editor support for editing variables nested in structs
- Try to maintain previous selection when going one level backwards in the menu

1.04
- User can hold the up/down/left/right buttons to continously scroll the menu
- Display object references in object editor library
- Add support for enum types in object editor library

1.03
- Add new library type ADebugMenuLibraryObjectEditor which shows all bool/int32/float/string/vector properties
- Add new library type ADebugMenuLibraryObjectSearch which lets you search for an object and modify its properties
- Automatically spawn MenuManager and InputHandler via a WorldSubsystem instead of having to add it to the map yourself

1.02
- Add UE 5.0 support

1.01
- Fix possible compilation errors in non-unity builds
- Remove disableoptimization pragma


-------------------------------------------------------------------------------------------------

Todo
~~~~~~~~~~~~~~~
- Add support for String Blueprint entry type