2016-12-08 08:52:44 -05:00
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
2014-03-14 14:13:41 -04:00
# include "LevelViewportActions.h"
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
# include "ShowFlags.h"
# include "Components/PrimitiveComponent.h"
# include "Engine/Engine.h"
# include "Editor/UnrealEdEngine.h"
2014-11-12 04:43:54 -05:00
# include "GameFramework/WorldSettings.h"
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
# include "EditorShowFlags.h"
# include "Stats/StatsData.h"
# include "BufferVisualizationData.h"
2014-03-14 14:13:41 -04:00
# define LOCTEXT_NAMESPACE "LevelViewportActions"
Simple and Group Stat Exec commands can now be triggered from the level viewport Show menu directly.
#ttp 306334 - ROCKET: TASK: PUNTABLE: Stats: FN: Make diagnostic stats discoverable and available in the UI (don't require console to toggle)
#branch UE4
#change
DECLARE_STATS_GROUP û Added additional param GroupCategory, for subfolder use in the UI. Fixedup all Stats Group usage so the category is now propagated through where it needs to be.
Currently all Group stats have the Category æAdvancedÆ, and all engine stats have the Category æSimpleÆ û this is just to differentiate them for now, better categories will come along in future.
Modified FindOrAddMetaData as it now broadcasts a delegate (via a TaskGraph) whenever a new stat meta data is added û this was needed as not all the stat groups are æregisteredÆ when the level viewports are created (they are drip loaded), so the viewports need to listen for any additions thereafter...
GroupDescription is displayed as a tooltip in the UI for the stat entry and we may want to localize these.
RenderStats & RenderGroupedWithHierarchy: Modified so that it now takes the viewport that it should render to as a param (which is also used to determine if each stat should be visible).
Removed StatsEnabled delegate in favour of StatCheckEnabled, StatEnabled, StatDisabled, StatDisableAll for more finite usage and feedback when toggling them.
Modified FHUDGroupManager HandleCommand It now uses the new delegates to work out whether it needs to enable or disable for the current viewport, so itÆs more involved than a simple toggle, itÆs more ôis the stat enabled for the current viewport, and is it enabled for any viewportö delegate querying so it can react accordingly.
Added struct FSimpleStatFuncs: Which contains info on each æSimple StatÆ such as; name, category, description, renderfunc, togglefunc and the side of the viewport it should be rendered to
ExecSimpleStat û Calls Exec for a registered Simple Stat, ensuring the correct viewport is set
IsSimpleStat û Checks to see if a stat is a registered Simple Stat or not
SetSimpleStat û Sets the state of a specified Simple Stats
SetSimpleStats - Sets the state of the specified Simple Stats
RenderSimpleStats û Renders the Simple Stats if they are enabled, and have Render functions assigned.
Each Exec function had the code it executes which itÆs toggled and rendered into functions
Added FStatUnitData & FStatHitchesData: Moved all the globals/static variables used when enabling Stat Unit/Hitches into a struct as itÆs now used by multiple viewports and they needed their own copies. Also moved their draw functions here too.
FSceneViewport:
SwapStatCommands û Exchanges the enabled stats between two viewports, this is so when PIEing the stats which were enabled on the Level Viewport (if playing in active viewport only) get transposed to the Game Viewport, and then restored when PIE ends.
SEditorViewport:
ToggleStatCommand û Called when a stat is enabled/disabled from the UI
IsStatCommandVisible û Checks to see if a stat command should appear as visible in the UI
SEditorViewportViewMenu:
GenerateViewMenuContent û Made protected and virtual so it could be called externally.
FLevelViewportCommands: Added the code needed to generate commands for each of the Stat menu entries, however because not all stats are registered when this happens, it also creates some delegates to listen out for others that are registered later
Destructor û Needed to reset delegates
HandleNewGroupStat û Creates the new group stat commands
HandleNewStat û Creates the new stat command
FindStatIndex û Looks for where a stat should be inserted in the menu in order to maintain alphabetical order
SLevelViewport:
Modified the code so that the states of all the SimpleStats are saved so they can be restored next time the editor is ran (previously just handled FPS).
OnFloatingButtonClicked û Called whenever any of the level viewports floating buttons are clicked in order to correctly set the ælastÆ viewport global
OnToggleAllStatCommands û Called when the user selects æHide AllÆ from the viewport.
ToggleStatCommand û Called when the user selects any other stat option from the viewport.
BindStatCommand û Used to bind the menu action to the command name (used by delegate)
Added SLevelEditorViewportViewMenu (extends SEditorViewportViewMenu), and overrode GenerateViewMenuContent so that OnFloatingButtonClicked can be called whenever the menu is clicked on. This is also called during GenerateOptionsMenu, GenerateCameraMenu, GenerateShowMenu & OnToggleMaximize
Added global ptr GStatProcessingViewportClient (sim to Current, Last) used to keep track of which viewport the stat should be applied too (only valid within the scope of the Exec call).
FViewportClient:
Moved global ESoundShowFlags enum list into this class.
FCommonViewportClient:
Destructor û Needed to reset GStatProcessingViewportClient
FLevelEditorViewportClient
SetCurrentViewport û moved code responsible for setting the global æcurrentÆ viewport ptr into a func
SetLastKeyViewport û moved the code responsible for settings the global ælastÆ viewport ptr into a func
UGameViewportClient:
Destructor û Needed to cleanup delegate usage.
FViewportClient & FLevelEditorViewportClient & UGameViewportClient*
GetStatUnitData û The viewports copy of the variables needed when running the Stat Unit Exec
GetStatHitchesData û The viewports copy of the variables needed when running the Stat Hitches Exec
GetEnabledStats û Gets a list of all the stats which are enabled for the viewport
SetEnabledStats û Sets a list of all the stats which should be enabled for the viewport
IsStatEnabled û Checks to see if a specific stat is enabled for the viewport
SetStatEnabled û Sets a specifics stats state to enabled or disabled
GetSoundShowFlags û Gets which flags are enabled for the Stat Sounds Exec
SetSoundShowFlags û Sets which flags are enabled for the Stat Sounds Exec
HandleViewportStatCheckEnabled (delegate) û checks to see if a specific stat is enabled on this viewport
HandleViewportStatEnabled (delegate) û enables a specific stat for the viewport
HandleViewportStatDisabled (delegate) û disables a specific stat for the viewport
HandleViewportStatDisableAll (delegate) û disables all stats for the viewport
*FViewportClient has dummy virtual funcs and LevelEditor/Game both have the same implementations, the only differences is the GameViewports member variables are static so that the stat info persists between runs.
FLevelEditorViewportInstanceSettings deprecated bShowFPS in favour of an EnabledStats array (so we can track the state of all stats, not just FPS).
Added new config var bSaveSimpleStats: if enabled, restores previously enabled level viewport simple stats the next time the editor runs (defaults to false).
Modified FillShowFlagMenu so that thereÆs just one func and you specify where (if any) youÆd like a separator to occur.
Added FillShowStatsSubMenus so that menus can be generated which have submenus
Added the Stats sub menu to the View menu
Modified Execs so that the GStatProcessingViewportClient is set to the correct default viewport (if it wasnÆt specified), and clears again after itÆs been processed
HandleStatCommand now takes World and ViewportClient as params too û needed when Execs enabled other Execs so the world/viewport persists.
SetAverageUnitTimes û Added as a Setter func for GetAverageUnitTimes (moved code out of Stat Unit renderer and modified so that it only updates once per frame).
Stripped out all unneeded globals
[CL 2058522 by Andrew Brown in Main branch]
2014-04-29 04:04:27 -04:00
FLevelViewportCommands : : FOnNewStatCommandAdded FLevelViewportCommands : : NewStatCommandDelegate ;
FLevelViewportCommands : : ~ FLevelViewportCommands ( )
{
UEngine : : NewStatDelegate . RemoveAll ( this ) ;
# if STATS
FStatGroupGameThreadNotifier : : Get ( ) . NewStatGroupDelegate . Unbind ( ) ;
# endif
}
2014-03-14 14:13:41 -04:00
/** UI_COMMAND takes long for the compile to optimize */
PRAGMA_DISABLE_OPTIMIZATION
void FLevelViewportCommands : : RegisterCommands ( )
{
2015-03-17 11:36:28 -04:00
UI_COMMAND ( ToggleMaximize , " Maximize Viewport " , " Toggles the Maximize state of the current viewport " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ToggleGameView , " Game View " , " Toggles game view. Game view shows the scene as it appears in game " , EUserInterfaceActionType : : ToggleButton , FInputChord ( EKeys : : G ) ) ;
UI_COMMAND ( ToggleImmersive , " Immersive Mode " , " Switches this viewport between immersive mode and regular mode " , EUserInterfaceActionType : : ToggleButton , FInputChord ( EKeys : : F11 ) ) ;
2014-06-23 10:25:08 -04:00
2015-03-17 11:36:28 -04:00
UI_COMMAND ( CreateCamera , " Create Camera Here " , " Creates a new camera actor at the current location of this viewport's camera " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
UI_COMMAND ( HighResScreenshot , " High Resolution Screenshot... " , " Opens the control panel for high resolution screenshots " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
2015-03-17 11:36:28 -04:00
UI_COMMAND ( UseDefaultShowFlags , " Use Defaults " , " Resets all show flags to default " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
2015-03-17 11:36:28 -04:00
UI_COMMAND ( PilotSelectedActor , " Pilot Selected Actor " , " Move the selected actor around using the viewport controls, and bind the viewport to the actor's location and orientation. " , EUserInterfaceActionType : : Button , FInputChord ( EModifierKey : : Control | EModifierKey : : Shift , EKeys : : P ) ) ;
UI_COMMAND ( EjectActorPilot , " Eject from Actor Pilot " , " Stop piloting an actor with the current viewport. Unlocks the viewport's position and orientation from the actor the viewport is currently piloting. " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
UI_COMMAND ( ToggleActorPilotCameraView , " Actor Pilot Camera View " , " Toggles showing the exact camera view when using the viewport to pilot a camera " , EUserInterfaceActionType : : ToggleButton , FInputChord ( EModifierKey : : Control | EModifierKey : : Shift , EKeys : : C ) ) ;
2014-03-14 14:13:41 -04:00
2015-03-17 11:36:28 -04:00
UI_COMMAND ( ViewportConfig_OnePane , " Layout One Pane " , " Changes the viewport arrangement to one pane " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ViewportConfig_TwoPanesH , " Layout Two Panes (horizontal) " , " Changes the viewport arrangement to two panes, side-by-side " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ViewportConfig_TwoPanesV , " Layout Two Panes (vertical) " , " Changes the viewport arrangement to two panes, one above the other " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ViewportConfig_ThreePanesLeft , " Layout Three Panes (one left, two right) " , " Changes the viewport arrangement to three panes, one on the left, two on the right " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ViewportConfig_ThreePanesRight , " Layout Three Panes (one right, two left) " , " Changes the viewport arrangement to three panes, one on the right, two on the left " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ViewportConfig_ThreePanesTop , " Layout Three Panes (one top, two bottom) " , " Changes the viewport arrangement to three panes, one on the top, two on the bottom " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ViewportConfig_ThreePanesBottom , " Layout Three Panes (one bottom, two top) " , " Changes the viewport arrangement to three panes, one on the bottom, two on the top " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ViewportConfig_FourPanesLeft , " Layout Four Panes (one left, three right) " , " Changes the viewport arrangement to four panes, one on the left, three on the right " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ViewportConfig_FourPanesRight , " Layout Four Panes (one right, three left) " , " Changes the viewport arrangement to four panes, one on the right, three on the left " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ViewportConfig_FourPanesTop , " Layout Four Panes (one top, three bottom) " , " Changes the viewport arrangement to four panes, one on the top, three on the bottom " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ViewportConfig_FourPanesBottom , " Layout Four Panes (one bottom, three top) " , " Changes the viewport arrangement to four panes, one on the bottom, three on the top " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
UI_COMMAND ( ViewportConfig_FourPanes2x2 , " Layout Four Panes (2x2) " , " Changes the viewport arrangement to four panes, in a 2x2 grid " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
Copying //UE4/Dev-Sequencer to //UE4/Main (Source: //UE4/Dev-Sequencer @ 2945541)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2837601 on 2016/01/20 by Thomas.Sarkanen
Sequencer: Exposed bool, byte, event, fade, float, slomo, and visibility section keys in context menu
Change 2840895 on 2016/01/23 by Thomas.Sarkanen
Sequencer: Moved key proxy handling from section into key area; added support for grouped keys; exposed color properties in context menu.
Change 2901092 on 2016/03/09 by Thomas.Sarkanen
Sequencer: Fixed ensure() and crash when exiting PIE & then playing back in editor
Made sure that instances that are playing that have active montages can re-connect to a playing montage if it is already active. We dont stop/start preview/non-
preview playback when switching modes right now so I've just made the system robust to the switch when playing back animation.
Ensured that instances are kept up to date by hooking into EndPlayMapDelegate. This fires slightly later than OnEndPIE, so it allows us to pick up when instances
have been deleted from the world. OnEndPIE is fired before the worlds are shutdown so instances can still be bound to valid (but nearly dead) actors at this point.
#jira UE-27898
#jira UE-27899
Change 2901159 on 2016/03/09 by Chris.Bunner
Allow EXR frames from SaveHighResScreenshot to be uncompressed (r.SaveUncompressedEXRFrames).
Change 2903123 on 2016/03/10 by Max.Chen
Sequencer: Add snapping for the in/out range.
Change 2903126 on 2016/03/10 by Max.Chen
Sequencer: Fix split and trim for cinematic shot sections so that the start offset value is set.
Change 2903132 on 2016/03/10 by Max.Chen
Sequencer: Create camera here and set it as the current camera cut.
Change 2903138 on 2016/03/10 by Max.Chen
Sequencer: Improve mechanism for adding objects to Sequencer. Hold down shift while dragging from content browser to add as a spawnable. Hold down ctrl while
dragging from content browser to add as a possessable.
Change 2903143 on 2016/03/10 by Max.Chen
Sequencer: Add 4k to movie capture dialog.
#jira UE-28147
Change 2903157 on 2016/03/10 by Max.Chen
Sequencer: Pop out of locked camera when popping out of the sequence.
#jira UE-27662
Change 2908097 on 2016/03/14 by Andrew.Rodham
Sequencer: Added default viewport type onto the viewport types menu
- The activation command for a given viewport type no longer toggles it if it's already active, it will just do nothing.
- Switching back to the default viewport type can be achieved with SHIFT+D
Change 2911869 on 2016/03/16 by Max.Preussner
Editor: Caching device proxy manager, so the UI doesn't constantly poll for the TargetDeviceServices module
Change 2917943 on 2016/03/22 by Thomas.Sarkanen
Sequence Recording: Added "Record New Sequence From Current Player" to sub-sequence track menu
This option is only available in PIE. When selected it primes a new seciton for recording against the pawn that is currently being controlled by the player.
Change 2917946 on 2016/03/22 by Max.Chen
Sequencer: Automatically add and attach a cine camera when dropping a crane or rail.
Change 2917954 on 2016/03/22 by Thomas.Sarkanen
Fix anim dynamics going crazy on time skips
Added new API to FAnimNode_Base: NeedsDynamicReset and ResetDynamics.
This allows nodes that subscribe to this interface to be reset on teleport/time skips.
Call through to ResetDynamics on zero timestep (ie. skips) in the preview path in Sequencer.
Change 2917961 on 2016/03/22 by Frank.Fella
Sequencer - Sequencer - Update the color track code to match the behavior in matinee, also remove empty light color tracks from the sequence, and add a missing
particle parameter track.
Change 2917984 on 2016/03/22 by Max.Chen
Sequencer: Fix crash on deleting object binding nodes multiple times.
Change 2917986 on 2016/03/22 by Max.Chen
Sequencer: Fix if adding multiple camera cuts at the same time with the same duration as an existing camera cut. The camera is replaced in this case.
Change 2917994 on 2016/03/22 by Jeff.Farris
Support for scene depth picker. Used for focus depth sampling in cine cams.
Change 2918003 on 2016/03/22 by Max.Chen
Sequencer - Fix selection issues related to keying an undo by moving the selection clear on rebuild to after the tree selection state has been cached by path.
Change 2920371 on 2016/03/23 by Max.Preussner
UnrealEd: Added a file import path that doesn't load the entire file into memory prior to importing
UFactory::StaticImport will now call FactoryCreateFile for both text and binary files. The default implementation will load the file into a buffer/string and call
FactoryCreateBinary/FactoryCreateText to preserve legacy behavior. New factories may override FactoryCreateFile to perform their own file processing instead.
Change 2923359 on 2016/03/25 by Max.Preussner
UnrealEd: Refactored out StaticImportObject code into ImportObject
Change 2924887 on 2016/03/28 by Jeff.Farris
Sequencer: Camera Anim and Camera Shake tracks now support PostProcess changes in the CameraAnim
Change 2927283 on 2016/03/30 by Max.Chen
Sequencer: Fix crash resetting default in audio track in sequencer. Fix audio track rename when adding another audio.
#jira UE-28836, UE-28859
Change 2928290 on 2016/03/30 by Max.Preussner
ContentBrowser: Disabling 'Show in Explorer' context menu option for newly created/unsaved asset(s)
Change 2928480 on 2016/03/30 by Max.Preussner
AssetTools: Added built-in type category for Media assets
Change 2928498 on 2016/03/30 by Max.Preussner
AssetTools: Sorting asset type categories alphabetically
Change 2932326 on 2016/04/04 by Frank.Fella
Sequencer - Add "paste from matinee" support for audio tracks, and add volume support to audio sections in sequencer.
Change 2933917 on 2016/04/05 by Max.Preussner
Core: Added microseconds support to FTimespan
Change 2933920 on 2016/04/05 by Max.Preussner
Sockets: Simplified socket timeout assignments
Change 2935434 on 2016/04/06 by Max.Chen
Sequencer: Deselect possessable before converting it to a spawnable and deleting it. Also, make sure the newly converted spawnables are selected. This fixes a bug
where the transform gizmo remains after adding a spawnable.
Also, consolidate code for adding possessables to sequencer so that the newly added possessable node will be selected in the widget tree.
#jira UE-28215
Change 2935590 on 2016/04/06 by Jeff.Farris
Made crane rig preview mesh at the tip move as expected and appear in a reasonable place.
Change 2936082 on 2016/04/07 by Max.Chen
Sequencer: Attach should use default attach component of the actor if it exists. This fixes a bug where trying to attach to a camera crane rig attaches to the
proper component.
Change 2936118 on 2016/04/07 by Max.Chen
Sequencer: Adding crane/rail with shift now adds the crane/rig as a spawnable and the attached cine camera as a spawnable. An attach track is created for the cine
camera spawnable.
#jira UE-28308
Change 2937226 on 2016/04/07 by Max.Chen
Sequencer: Add invalidation when levels are added or removed.This fixes a bug were if you have a level sequence open and then add a sublevel that the level
sequence operates on, it correctly updates the actors from the new sub level.
#jira UE-27595
Change 2937263 on 2016/04/07 by Frank.Fella
Sequencer - Changed the matinee to sequencer conversion tools so that curve keys set to "clamped auto" import as user tangents since we don't support clamped auto
in sequencer.
Change 2937273 on 2016/04/07 by Max.Chen
Sequencer: No longer experimental/betal and now enabled by default.
#jira UETOOl-625
Change 2937694 on 2016/04/08 by Max.Chen
Curve Editor: Separate out input and output snapping.
#jira UE-27209
Change 2937852 on 2016/04/08 by Andrew.Rodham
Sequencer: Spawnables no longer use generated classes
- Spawnables now store a template actor instance, rather than a generated class
- All relevant code has been converted to use this new approach
- Spawnable defaults are now harvested directly from any spawned instances when the movie scene is saved, or when the object is de-spawned. We only do this for
spawnables *in the currently active sequence instance*. This approach ensures that instance components and other properties persist.
- Currently we don't mark the package as dirty when the defaults are changed. This needs to be addressed.
- Some fixes have been made to AActor and Actor Iterators to ensure that actors not contained within a level do not crash.
- Spawning optimisations to follow
Change 2937956 on 2016/04/08 by Max.Preussner
Sequencer: Added selection range commands to general toolbar menu
Change 2937981 on 2016/04/08 by Max.Preussner
Sequencer: Refactored GetKeyHandles to take a time range for filtering keys
Change 2938007 on 2016/04/08 by Max.Preussner
Sequencer: Implemented selection range key selection
Change 2938184 on 2016/04/08 by Max.Chen
Sequencer: Find in Content Browser is now in the top level menubar.
#jira UE-21598
Change 2938665 on 2016/04/08 by Frank.Fella
UMG - Add support for material animation.
Change 2939048 on 2016/04/10 by Max.Chen
CineCamera: Change current position on rail to normalize position.
Change 2939067 on 2016/04/10 by Max.Chen
Sequencer: Add paste color from matinee
Change 2939587 on 2016/04/11 by Andrew.Rodham
Sequencer: Fixes to spawnable rework
- Removed commented out code.
- Fixed particle system components not disabling auto activate.
- Instance Components are now correctly registered on spawn.
- Removed ability to set the editable flag on actors in favor of a delegate assigned to SActorDetails to disable property editing on actors spawned from outside
of the currently focused sequence.
Change 2939666 on 2016/04/11 by Andrew.Rodham
Sequencer: Fixed active sequence ID not being set on creation
Change 2940663 on 2016/04/12 by Andrew.Rodham
Sequencer: Spawnable object templates now always have the RF_ArchetypeObject flag
#jira UE-29337, UE-29339
Change 2940742 on 2016/04/12 by Thomas.Sarkanen
Improvements to sequence recording API
Sequence recording is now more extensible.
Moved the majority of recorders into a seperate module.
Cleaned up recorder API, removed bRecord that was only really used once.
Added factory class as a modular feature that allows users to register and implement their own recorders.
Recorders can supply their own settings classes. These are incorporated into the UI via a details customization so they appear to be seamlessly integrated.
Exposed components to record as an advanced setting. Users can use this to gate the components and actors that are recorded.
#jira UE-28850 - Update sequence recording API for better extensibility
Change 2940828 on 2016/04/12 by Max.Chen
Level Editor: Clear the camera preview if the level viewport is locked to the same camera.
#jira UE-27489
Change 2941090 on 2016/04/12 by Frank.Fella
Sequencer - Fix inconsistencies with the level visibility track.
+ Add an option to update a track instance when it stops playing due to it's parent movie scene being deactivated as a sub-scene.
+ Reset level visibility state when the section ends, or when it's parent subsection ends.
Change 2941427 on 2016/04/12 by Andrew.Rodham
Sequencer: Fixes for recorded dynamic components
- Dynamic components are now named uniquely within their owner actor, and are no longer re-bound to new object tracks when detached/re-attached
- New dynamic components are created every time a new component is detected on an actor, regardless of whether it was once attached before. This affords
recording externally managed components from a component pool.
- Section recorders for components that are no longer attached to the actor are now disabled correctly.
Change 2941760 on 2016/04/12 by Max.Preussner
Editor: Setting up correct material expresions when creating material from normal map texture
Change 2941819 on 2016/04/13 by Max.Chen
Sequencer: Fire named events in all sublevels.
#jira UE-28843
Change 2942052 on 2016/04/13 by Andrew.Rodham
Sequencer: Fixed not being able to add dynamic material parameter tracks to spawnables when the object is not spawned
#jira UE-24287
Change 2942223 on 2016/04/13 by Max.Preussner
Editor: Using built-in function to assign sampler format
Change 2942833 on 2016/04/13 by Max.Chen
Sequencer: More copy matinee helpers.
- Make some sections infinite.
- Fix FindPossessableObjectId
- Expose FindGroupByName
Change 2942944 on 2016/04/13 by Max.Chen
Sequencer: Fix anim copy so that it doesn't create an animation clip longer than the next clip's start position.
Change 2943313 on 2016/04/14 by Max.Chen
Sequencer: Initial matinee to level sequence asset converter. Right click on a matinee actor in the level and choose "Convert to Level Sequence"
Current supports:
- movement tracks
- generic property tracks
- particle tracks
- anim control tracks
- event tracks
- audio tracks
- visibility track
- director track (fade, slomo, camera cuts)
Possible todos:
- Relative scale3D
- Option to create spawnables instead of possessables
- Create shots per director track camera cut instead of a direct translation to the camera cut track
#jira UETOOL-467
Change 2943596 on 2016/04/14 by Andrew.Rodham
Editor: Fixed placement mode scrollbar visibility not working for custom content
#jira UE-27191
Change 2943651 on 2016/04/14 by Max.Chen
Sequencer: Invalidate the audio waveform when the source changes.
#jira UE-29394
Change 2943674 on 2016/04/14 by Max.Chen
Sequencer: Store/restore playback state when rebuilding.
#jira UE-29452
Change 2943993 on 2016/04/14 by Max.Chen
Sequencer: Convert slot name from matinee to level sequence.
Change 2944156 on 2016/04/14 by Frank.Fella
Sequencer - Fix undo when moving items into folders, and when deleting folder.
#jira UE-27368
Change 2944227 on 2016/04/14 by Max.Chen
Sequencer: Show curves in the curve editor if one of the parent nodes is selected. For example, if Location is selected, show Location.X, Location.Y, and
Location.Z
Change 2945057 on 2016/04/15 by Andrew.Rodham
Editor: Fixed placement mode scrollbar visibility not working for custom content
#jira UE-27191
#lockdown nick.penwarden
[CL 2945551 by Max Chen in Main branch]
2016-04-15 14:50:58 -04:00
UI_COMMAND ( SetDefaultViewportType , " Default Viewport " , " Reconfigures this viewport to the default arrangement " , EUserInterfaceActionType : : RadioButton , FInputChord ( EModifierKey : : Shift , EKeys : : D ) ) ;
2016-03-08 16:55:04 -05:00
UI_COMMAND ( ToggleViewportToolbar , " Show Toolbar " , " Defines whether a toolbar should be displayed on this viewport " , EUserInterfaceActionType : : ToggleButton , FInputChord ( EModifierKey : : Control | EModifierKey : : Shift , EKeys : : T ) ) ;
2015-03-17 11:36:28 -04:00
UI_COMMAND ( ApplyMaterialToActor , " Apply Material " , " Attempts to apply a dropped material to this object " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
2016-02-08 13:35:28 -05:00
UI_COMMAND ( ToggleCinematicPreview , " Cinematic Preview " , " If enabled, allows Matinee or Sequencer previews to play in this viewport " , EUserInterfaceActionType : : ToggleButton , FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
2015-03-17 11:36:28 -04:00
UI_COMMAND ( FindInLevelScriptBlueprint , " Find In Level Script " , " Finds references of a selected actor in the level script blueprint " , EUserInterfaceActionType : : Button , FInputChord ( EModifierKey : : Control , EKeys : : K ) ) ;
UI_COMMAND ( AdvancedSettings , " Advanced Settings... " , " Opens the advanced viewport settings " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
// Generate a command for each buffer visualization mode
{
struct FMaterialIterator
{
const TSharedRef < class FBindingContext > Parent ;
FLevelViewportCommands : : TBufferVisualizationModeCommandMap & CommandMap ;
FMaterialIterator ( const TSharedRef < class FBindingContext > InParent , FLevelViewportCommands : : TBufferVisualizationModeCommandMap & InCommandMap )
: Parent ( InParent )
, CommandMap ( InCommandMap )
{
}
void ProcessValue ( const FString & InMaterialName , const UMaterial * InMaterial , const FText & InDisplayName )
{
FName ViewportCommandName = * ( FString ( TEXT ( " BufferVisualizationMenu " ) ) + InMaterialName ) ;
FBufferVisualizationRecord & Record = CommandMap . Add ( ViewportCommandName , FBufferVisualizationRecord ( ) ) ;
Record . Name = * InMaterialName ;
const FText MaterialNameText = FText : : FromString ( InMaterialName ) ;
Record . Command = FUICommandInfoDecl ( Parent , ViewportCommandName , MaterialNameText , MaterialNameText )
. UserInterfaceType ( EUserInterfaceActionType : : RadioButton )
2015-03-17 11:36:28 -04:00
. DefaultChord ( FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
}
} ;
BufferVisualizationModeCommands . Empty ( ) ;
FName ViewportCommandName = * ( FString ( TEXT ( " BufferVisualizationOverview " ) ) ) ;
FBufferVisualizationRecord & OverviewRecord = BufferVisualizationModeCommands . Add ( ViewportCommandName , FBufferVisualizationRecord ( ) ) ;
OverviewRecord . Name = NAME_None ;
OverviewRecord . Command = FUICommandInfoDecl ( this - > AsShared ( ) , ViewportCommandName , LOCTEXT ( " BufferVisualization " , " Overview " ) , LOCTEXT ( " BufferVisualization " , " Overview " ) )
. UserInterfaceType ( EUserInterfaceActionType : : RadioButton )
2015-03-17 11:36:28 -04:00
. DefaultChord ( FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
FMaterialIterator It ( this - > AsShared ( ) , BufferVisualizationModeCommands ) ;
GetBufferVisualizationData ( ) . IterateOverAvailableMaterials ( It ) ;
}
const TArray < FShowFlagData > & ShowFlagData = GetShowFlagMenuItems ( ) ;
// Generate a command for each show flag
for ( int32 ShowFlag = 0 ; ShowFlag < ShowFlagData . Num ( ) ; + + ShowFlag )
{
const FShowFlagData & SFData = ShowFlagData [ ShowFlag ] ;
FFormatNamedArguments Args ;
Args . Add ( TEXT ( " ShowFlagName " ) , SFData . DisplayName ) ;
FText LocalizedName ;
switch ( SFData . Group )
{
case SFG_Visualize :
LocalizedName = FText : : Format ( LOCTEXT ( " VisualizeFlagLabel " , " Visualize {ShowFlagName} " ) , Args ) ;
break ;
default :
LocalizedName = FText : : Format ( LOCTEXT ( " ShowFlagLabel " , " Show {ShowFlagName} " ) , Args ) ;
break ;
}
//@todo Slate: The show flags system does not support descriptions currently
const FText ShowFlagDesc ;
TSharedPtr < FUICommandInfo > ShowFlagCommand
= FUICommandInfoDecl ( this - > AsShared ( ) , SFData . ShowFlagName , LocalizedName , ShowFlagDesc )
. UserInterfaceType ( EUserInterfaceActionType : : ToggleButton )
2015-03-17 11:36:28 -04:00
. DefaultChord ( SFData . InputChord )
2014-03-14 14:13:41 -04:00
. Icon ( SFData . Group = = EShowFlagGroup : : SFG_Normal ?
FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , FEditorStyle : : Join ( GetContextName ( ) , TCHAR_TO_ANSI ( * FString : : Printf ( TEXT ( " .%s " ) , * SFData . ShowFlagName . ToString ( ) ) ) ) ) :
FSlateIcon ( ) ) ;
ShowFlagCommands . Add ( FLevelViewportCommands : : FShowMenuCommand ( ShowFlagCommand , SFData . DisplayName ) ) ;
}
// Generate a command for each volume class
{
2015-03-17 11:36:28 -04:00
UI_COMMAND ( ShowAllVolumes , " Show All Volumes " , " Shows all volumes " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
UI_COMMAND ( HideAllVolumes , " Hide All Volumes " , " Hides all volumes " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
TArray < UClass * > VolumeClasses ;
2014-11-11 19:58:48 -05:00
UUnrealEdEngine : : GetSortedVolumeClasses ( & VolumeClasses ) ;
2014-03-14 14:13:41 -04:00
for ( int32 VolumeClassIndex = 0 ; VolumeClassIndex < VolumeClasses . Num ( ) ; + + VolumeClassIndex )
{
//@todo Slate: The show flags system does not support descriptions currently
const FText VolumeDesc ;
const FName VolumeName = VolumeClasses [ VolumeClassIndex ] - > GetFName ( ) ;
FText DisplayName ;
FEngineShowFlags : : FindShowFlagDisplayName ( VolumeName . ToString ( ) , DisplayName ) ;
FFormatNamedArguments Args ;
Args . Add ( TEXT ( " ShowFlagName " ) , DisplayName ) ;
const FText LocalizedName = FText : : Format ( LOCTEXT ( " ShowFlagLabel_Visualize " , " Visualize {ShowFlagName} " ) , Args ) ;
TSharedPtr < FUICommandInfo > ShowVolumeCommand
= FUICommandInfoDecl ( this - > AsShared ( ) , VolumeName , LocalizedName , VolumeDesc )
. UserInterfaceType ( EUserInterfaceActionType : : ToggleButton ) ;
ShowVolumeCommands . Add ( FLevelViewportCommands : : FShowMenuCommand ( ShowVolumeCommand , DisplayName ) ) ;
}
}
// Generate a command for show/hide all layers
{
2015-03-17 11:36:28 -04:00
UI_COMMAND ( ShowAllLayers , " Show All Layers " , " Shows all layers " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
UI_COMMAND ( HideAllLayers , " Hide All Layers " , " Hides all layers " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
}
// Generate a command for each sprite category
{
2015-03-17 11:36:28 -04:00
UI_COMMAND ( ShowAllSprites , " Show All Sprites " , " Shows all sprites " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
UI_COMMAND ( HideAllSprites , " Hide All Sprites " , " Hides all sprites " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
// get all the known layers
// Get a fresh list as GUnrealEd->SortedSpriteInfo may not yet be built.
TArray < FSpriteCategoryInfo > SortedSpriteInfo ;
2014-11-11 19:58:48 -05:00
UUnrealEdEngine : : MakeSortedSpriteInfo ( SortedSpriteInfo ) ;
2014-03-14 14:13:41 -04:00
FString SpritePrefix = TEXT ( " ShowSprite_ " ) ;
for ( int32 InfoIndex = 0 ; InfoIndex < SortedSpriteInfo . Num ( ) ; + + InfoIndex )
{
const FSpriteCategoryInfo & SpriteInfo = SortedSpriteInfo [ InfoIndex ] ;
const FName CommandName = FName ( * ( SpritePrefix + SpriteInfo . Category . ToString ( ) ) ) ;
FFormatNamedArguments Args ;
Args . Add ( TEXT ( " SpriteName " ) , SpriteInfo . DisplayName ) ;
const FText LocalizedName = FText : : Format ( NSLOCTEXT ( " UICommands " , " SpriteShowFlagName " , " Show {SpriteName} Sprites " ) , Args ) ;
TSharedPtr < FUICommandInfo > ShowSpriteCommand
= FUICommandInfoDecl ( this - > AsShared ( ) , CommandName , LocalizedName , SpriteInfo . Description )
. UserInterfaceType ( EUserInterfaceActionType : : ToggleButton ) ;
ShowSpriteCommands . Add ( FLevelViewportCommands : : FShowMenuCommand ( ShowSpriteCommand , SpriteInfo . DisplayName ) ) ;
}
}
Simple and Group Stat Exec commands can now be triggered from the level viewport Show menu directly.
#ttp 306334 - ROCKET: TASK: PUNTABLE: Stats: FN: Make diagnostic stats discoverable and available in the UI (don't require console to toggle)
#branch UE4
#change
DECLARE_STATS_GROUP û Added additional param GroupCategory, for subfolder use in the UI. Fixedup all Stats Group usage so the category is now propagated through where it needs to be.
Currently all Group stats have the Category æAdvancedÆ, and all engine stats have the Category æSimpleÆ û this is just to differentiate them for now, better categories will come along in future.
Modified FindOrAddMetaData as it now broadcasts a delegate (via a TaskGraph) whenever a new stat meta data is added û this was needed as not all the stat groups are æregisteredÆ when the level viewports are created (they are drip loaded), so the viewports need to listen for any additions thereafter...
GroupDescription is displayed as a tooltip in the UI for the stat entry and we may want to localize these.
RenderStats & RenderGroupedWithHierarchy: Modified so that it now takes the viewport that it should render to as a param (which is also used to determine if each stat should be visible).
Removed StatsEnabled delegate in favour of StatCheckEnabled, StatEnabled, StatDisabled, StatDisableAll for more finite usage and feedback when toggling them.
Modified FHUDGroupManager HandleCommand It now uses the new delegates to work out whether it needs to enable or disable for the current viewport, so itÆs more involved than a simple toggle, itÆs more ôis the stat enabled for the current viewport, and is it enabled for any viewportö delegate querying so it can react accordingly.
Added struct FSimpleStatFuncs: Which contains info on each æSimple StatÆ such as; name, category, description, renderfunc, togglefunc and the side of the viewport it should be rendered to
ExecSimpleStat û Calls Exec for a registered Simple Stat, ensuring the correct viewport is set
IsSimpleStat û Checks to see if a stat is a registered Simple Stat or not
SetSimpleStat û Sets the state of a specified Simple Stats
SetSimpleStats - Sets the state of the specified Simple Stats
RenderSimpleStats û Renders the Simple Stats if they are enabled, and have Render functions assigned.
Each Exec function had the code it executes which itÆs toggled and rendered into functions
Added FStatUnitData & FStatHitchesData: Moved all the globals/static variables used when enabling Stat Unit/Hitches into a struct as itÆs now used by multiple viewports and they needed their own copies. Also moved their draw functions here too.
FSceneViewport:
SwapStatCommands û Exchanges the enabled stats between two viewports, this is so when PIEing the stats which were enabled on the Level Viewport (if playing in active viewport only) get transposed to the Game Viewport, and then restored when PIE ends.
SEditorViewport:
ToggleStatCommand û Called when a stat is enabled/disabled from the UI
IsStatCommandVisible û Checks to see if a stat command should appear as visible in the UI
SEditorViewportViewMenu:
GenerateViewMenuContent û Made protected and virtual so it could be called externally.
FLevelViewportCommands: Added the code needed to generate commands for each of the Stat menu entries, however because not all stats are registered when this happens, it also creates some delegates to listen out for others that are registered later
Destructor û Needed to reset delegates
HandleNewGroupStat û Creates the new group stat commands
HandleNewStat û Creates the new stat command
FindStatIndex û Looks for where a stat should be inserted in the menu in order to maintain alphabetical order
SLevelViewport:
Modified the code so that the states of all the SimpleStats are saved so they can be restored next time the editor is ran (previously just handled FPS).
OnFloatingButtonClicked û Called whenever any of the level viewports floating buttons are clicked in order to correctly set the ælastÆ viewport global
OnToggleAllStatCommands û Called when the user selects æHide AllÆ from the viewport.
ToggleStatCommand û Called when the user selects any other stat option from the viewport.
BindStatCommand û Used to bind the menu action to the command name (used by delegate)
Added SLevelEditorViewportViewMenu (extends SEditorViewportViewMenu), and overrode GenerateViewMenuContent so that OnFloatingButtonClicked can be called whenever the menu is clicked on. This is also called during GenerateOptionsMenu, GenerateCameraMenu, GenerateShowMenu & OnToggleMaximize
Added global ptr GStatProcessingViewportClient (sim to Current, Last) used to keep track of which viewport the stat should be applied too (only valid within the scope of the Exec call).
FViewportClient:
Moved global ESoundShowFlags enum list into this class.
FCommonViewportClient:
Destructor û Needed to reset GStatProcessingViewportClient
FLevelEditorViewportClient
SetCurrentViewport û moved code responsible for setting the global æcurrentÆ viewport ptr into a func
SetLastKeyViewport û moved the code responsible for settings the global ælastÆ viewport ptr into a func
UGameViewportClient:
Destructor û Needed to cleanup delegate usage.
FViewportClient & FLevelEditorViewportClient & UGameViewportClient*
GetStatUnitData û The viewports copy of the variables needed when running the Stat Unit Exec
GetStatHitchesData û The viewports copy of the variables needed when running the Stat Hitches Exec
GetEnabledStats û Gets a list of all the stats which are enabled for the viewport
SetEnabledStats û Sets a list of all the stats which should be enabled for the viewport
IsStatEnabled û Checks to see if a specific stat is enabled for the viewport
SetStatEnabled û Sets a specifics stats state to enabled or disabled
GetSoundShowFlags û Gets which flags are enabled for the Stat Sounds Exec
SetSoundShowFlags û Sets which flags are enabled for the Stat Sounds Exec
HandleViewportStatCheckEnabled (delegate) û checks to see if a specific stat is enabled on this viewport
HandleViewportStatEnabled (delegate) û enables a specific stat for the viewport
HandleViewportStatDisabled (delegate) û disables a specific stat for the viewport
HandleViewportStatDisableAll (delegate) û disables all stats for the viewport
*FViewportClient has dummy virtual funcs and LevelEditor/Game both have the same implementations, the only differences is the GameViewports member variables are static so that the stat info persists between runs.
FLevelEditorViewportInstanceSettings deprecated bShowFPS in favour of an EnabledStats array (so we can track the state of all stats, not just FPS).
Added new config var bSaveSimpleStats: if enabled, restores previously enabled level viewport simple stats the next time the editor runs (defaults to false).
Modified FillShowFlagMenu so that thereÆs just one func and you specify where (if any) youÆd like a separator to occur.
Added FillShowStatsSubMenus so that menus can be generated which have submenus
Added the Stats sub menu to the View menu
Modified Execs so that the GStatProcessingViewportClient is set to the correct default viewport (if it wasnÆt specified), and clears again after itÆs been processed
HandleStatCommand now takes World and ViewportClient as params too û needed when Execs enabled other Execs so the world/viewport persists.
SetAverageUnitTimes û Added as a Setter func for GetAverageUnitTimes (moved code out of Stat Unit renderer and modified so that it only updates once per frame).
Stripped out all unneeded globals
[CL 2058522 by Andrew Brown in Main branch]
2014-04-29 04:04:27 -04:00
// Generate a command for each Stat category
{
2015-03-17 11:36:28 -04:00
UI_COMMAND ( HideAllStats , " Hide All Stats " , " Hides all Stats " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
Simple and Group Stat Exec commands can now be triggered from the level viewport Show menu directly.
#ttp 306334 - ROCKET: TASK: PUNTABLE: Stats: FN: Make diagnostic stats discoverable and available in the UI (don't require console to toggle)
#branch UE4
#change
DECLARE_STATS_GROUP û Added additional param GroupCategory, for subfolder use in the UI. Fixedup all Stats Group usage so the category is now propagated through where it needs to be.
Currently all Group stats have the Category æAdvancedÆ, and all engine stats have the Category æSimpleÆ û this is just to differentiate them for now, better categories will come along in future.
Modified FindOrAddMetaData as it now broadcasts a delegate (via a TaskGraph) whenever a new stat meta data is added û this was needed as not all the stat groups are æregisteredÆ when the level viewports are created (they are drip loaded), so the viewports need to listen for any additions thereafter...
GroupDescription is displayed as a tooltip in the UI for the stat entry and we may want to localize these.
RenderStats & RenderGroupedWithHierarchy: Modified so that it now takes the viewport that it should render to as a param (which is also used to determine if each stat should be visible).
Removed StatsEnabled delegate in favour of StatCheckEnabled, StatEnabled, StatDisabled, StatDisableAll for more finite usage and feedback when toggling them.
Modified FHUDGroupManager HandleCommand It now uses the new delegates to work out whether it needs to enable or disable for the current viewport, so itÆs more involved than a simple toggle, itÆs more ôis the stat enabled for the current viewport, and is it enabled for any viewportö delegate querying so it can react accordingly.
Added struct FSimpleStatFuncs: Which contains info on each æSimple StatÆ such as; name, category, description, renderfunc, togglefunc and the side of the viewport it should be rendered to
ExecSimpleStat û Calls Exec for a registered Simple Stat, ensuring the correct viewport is set
IsSimpleStat û Checks to see if a stat is a registered Simple Stat or not
SetSimpleStat û Sets the state of a specified Simple Stats
SetSimpleStats - Sets the state of the specified Simple Stats
RenderSimpleStats û Renders the Simple Stats if they are enabled, and have Render functions assigned.
Each Exec function had the code it executes which itÆs toggled and rendered into functions
Added FStatUnitData & FStatHitchesData: Moved all the globals/static variables used when enabling Stat Unit/Hitches into a struct as itÆs now used by multiple viewports and they needed their own copies. Also moved their draw functions here too.
FSceneViewport:
SwapStatCommands û Exchanges the enabled stats between two viewports, this is so when PIEing the stats which were enabled on the Level Viewport (if playing in active viewport only) get transposed to the Game Viewport, and then restored when PIE ends.
SEditorViewport:
ToggleStatCommand û Called when a stat is enabled/disabled from the UI
IsStatCommandVisible û Checks to see if a stat command should appear as visible in the UI
SEditorViewportViewMenu:
GenerateViewMenuContent û Made protected and virtual so it could be called externally.
FLevelViewportCommands: Added the code needed to generate commands for each of the Stat menu entries, however because not all stats are registered when this happens, it also creates some delegates to listen out for others that are registered later
Destructor û Needed to reset delegates
HandleNewGroupStat û Creates the new group stat commands
HandleNewStat û Creates the new stat command
FindStatIndex û Looks for where a stat should be inserted in the menu in order to maintain alphabetical order
SLevelViewport:
Modified the code so that the states of all the SimpleStats are saved so they can be restored next time the editor is ran (previously just handled FPS).
OnFloatingButtonClicked û Called whenever any of the level viewports floating buttons are clicked in order to correctly set the ælastÆ viewport global
OnToggleAllStatCommands û Called when the user selects æHide AllÆ from the viewport.
ToggleStatCommand û Called when the user selects any other stat option from the viewport.
BindStatCommand û Used to bind the menu action to the command name (used by delegate)
Added SLevelEditorViewportViewMenu (extends SEditorViewportViewMenu), and overrode GenerateViewMenuContent so that OnFloatingButtonClicked can be called whenever the menu is clicked on. This is also called during GenerateOptionsMenu, GenerateCameraMenu, GenerateShowMenu & OnToggleMaximize
Added global ptr GStatProcessingViewportClient (sim to Current, Last) used to keep track of which viewport the stat should be applied too (only valid within the scope of the Exec call).
FViewportClient:
Moved global ESoundShowFlags enum list into this class.
FCommonViewportClient:
Destructor û Needed to reset GStatProcessingViewportClient
FLevelEditorViewportClient
SetCurrentViewport û moved code responsible for setting the global æcurrentÆ viewport ptr into a func
SetLastKeyViewport û moved the code responsible for settings the global ælastÆ viewport ptr into a func
UGameViewportClient:
Destructor û Needed to cleanup delegate usage.
FViewportClient & FLevelEditorViewportClient & UGameViewportClient*
GetStatUnitData û The viewports copy of the variables needed when running the Stat Unit Exec
GetStatHitchesData û The viewports copy of the variables needed when running the Stat Hitches Exec
GetEnabledStats û Gets a list of all the stats which are enabled for the viewport
SetEnabledStats û Sets a list of all the stats which should be enabled for the viewport
IsStatEnabled û Checks to see if a specific stat is enabled for the viewport
SetStatEnabled û Sets a specifics stats state to enabled or disabled
GetSoundShowFlags û Gets which flags are enabled for the Stat Sounds Exec
SetSoundShowFlags û Sets which flags are enabled for the Stat Sounds Exec
HandleViewportStatCheckEnabled (delegate) û checks to see if a specific stat is enabled on this viewport
HandleViewportStatEnabled (delegate) û enables a specific stat for the viewport
HandleViewportStatDisabled (delegate) û disables a specific stat for the viewport
HandleViewportStatDisableAll (delegate) û disables all stats for the viewport
*FViewportClient has dummy virtual funcs and LevelEditor/Game both have the same implementations, the only differences is the GameViewports member variables are static so that the stat info persists between runs.
FLevelEditorViewportInstanceSettings deprecated bShowFPS in favour of an EnabledStats array (so we can track the state of all stats, not just FPS).
Added new config var bSaveSimpleStats: if enabled, restores previously enabled level viewport simple stats the next time the editor runs (defaults to false).
Modified FillShowFlagMenu so that thereÆs just one func and you specify where (if any) youÆd like a separator to occur.
Added FillShowStatsSubMenus so that menus can be generated which have submenus
Added the Stats sub menu to the View menu
Modified Execs so that the GStatProcessingViewportClient is set to the correct default viewport (if it wasnÆt specified), and clears again after itÆs been processed
HandleStatCommand now takes World and ViewportClient as params too û needed when Execs enabled other Execs so the world/viewport persists.
SetAverageUnitTimes û Added as a Setter func for GetAverageUnitTimes (moved code out of Stat Unit renderer and modified so that it only updates once per frame).
Stripped out all unneeded globals
[CL 2058522 by Andrew Brown in Main branch]
2014-04-29 04:04:27 -04:00
// Bind a listener here for any additional stat commands that get registered later.
UEngine : : NewStatDelegate . AddRaw ( this , & FLevelViewportCommands : : HandleNewStat ) ;
# if STATS
FStatGroupGameThreadNotifier : : Get ( ) . NewStatGroupDelegate . BindRaw ( this , & FLevelViewportCommands : : HandleNewStatGroup ) ;
# endif
}
2014-03-14 14:13:41 -04:00
// Map the bookmark index to default key.
// If the max bookmark number ever increases the new bookmarks will not have default keys
TArray < FKey > NumberKeyNames ;
NumberKeyNames . Add ( EKeys : : Zero ) ;
NumberKeyNames . Add ( EKeys : : One ) ;
NumberKeyNames . Add ( EKeys : : Two ) ;
NumberKeyNames . Add ( EKeys : : Three ) ;
NumberKeyNames . Add ( EKeys : : Four ) ;
NumberKeyNames . Add ( EKeys : : Five ) ;
NumberKeyNames . Add ( EKeys : : Six ) ;
NumberKeyNames . Add ( EKeys : : Seven ) ;
NumberKeyNames . Add ( EKeys : : Eight ) ;
NumberKeyNames . Add ( EKeys : : Nine ) ;
for ( int32 BookmarkIndex = 0 ; BookmarkIndex < AWorldSettings : : MAX_BOOKMARK_NUMBER ; + + BookmarkIndex )
{
TSharedRef < FUICommandInfo > JumpToBookmark =
FUICommandInfoDecl (
this - > AsShared ( ) , //Command class
FName ( * FString : : Printf ( TEXT ( " JumpToBookmark%i " ) , BookmarkIndex ) ) , //CommandName
FText : : Format ( NSLOCTEXT ( " LevelEditorCommands " , " JumpToBookmark " , " Jump to Bookmark {0} " ) , FText : : AsNumber ( BookmarkIndex ) ) , //Localized label
FText : : Format ( NSLOCTEXT ( " LevelEditorCommands " , " JumpToBookmark_ToolTip " , " Moves the viewport to the location and orientation stored at bookmark {0} " ) , FText : : AsNumber ( BookmarkIndex ) ) ) //Localized tooltip
. UserInterfaceType ( EUserInterfaceActionType : : Button ) //interface type
2015-03-17 11:36:28 -04:00
. DefaultChord ( FInputChord ( NumberKeyNames . IsValidIndex ( BookmarkIndex ) ? NumberKeyNames [ BookmarkIndex ] : EKeys : : Invalid ) ) ; //default chord
2014-03-14 14:13:41 -04:00
JumpToBookmarkCommands . Add ( JumpToBookmark ) ;
TSharedRef < FUICommandInfo > SetBookmark =
FUICommandInfoDecl (
this - > AsShared ( ) , //Command class
FName ( * FString : : Printf ( TEXT ( " SetBookmark%i " ) , BookmarkIndex ) ) , //CommandName
FText : : Format ( NSLOCTEXT ( " LevelEditorCommands " , " SetBookmark " , " Set Bookmark {0} " ) , FText : : AsNumber ( BookmarkIndex ) ) , //Localized label
FText : : Format ( NSLOCTEXT ( " LevelEditorCommands " , " SetBookmark_ToolTip " , " Stores the viewports location and orientation in bookmark {0} " ) , FText : : AsNumber ( BookmarkIndex ) ) ) //Localized tooltip
. UserInterfaceType ( EUserInterfaceActionType : : Button ) //interface type
2015-03-17 11:36:28 -04:00
. DefaultChord ( FInputChord ( EModifierKey : : Control , NumberKeyNames . IsValidIndex ( BookmarkIndex ) ? NumberKeyNames [ BookmarkIndex ] : EKeys : : Invalid ) ) ; //default chord
2014-03-14 14:13:41 -04:00
SetBookmarkCommands . Add ( SetBookmark ) ;
TSharedRef < FUICommandInfo > ClearBookMark =
FUICommandInfoDecl (
this - > AsShared ( ) , //Command class
FName ( * FString : : Printf ( TEXT ( " ClearBookmark%i " ) , BookmarkIndex ) ) , //CommandName
FText : : Format ( NSLOCTEXT ( " LevelEditorCommands " , " ClearBookmark " , " Clear Bookmark {0} " ) , FText : : AsNumber ( BookmarkIndex ) ) , //Localized label
FText : : Format ( NSLOCTEXT ( " LevelEditorCommands " , " ClearBookmark_ToolTip " , " Clears the viewports location and orientation in bookmark {0} " ) , FText : : AsNumber ( BookmarkIndex ) ) ) //Localized tooltip
. UserInterfaceType ( EUserInterfaceActionType : : Button ) //interface type
2015-03-17 11:36:28 -04:00
. DefaultChord ( FInputChord ( ) ) ; //default chord
2014-03-14 14:13:41 -04:00
ClearBookmarkCommands . Add ( ClearBookMark ) ;
}
2015-03-17 11:36:28 -04:00
UI_COMMAND ( ClearAllBookMarks , " Clear All Bookmarks " , " Clears all the bookmarks " , EUserInterfaceActionType : : Button , FInputChord ( ) ) ;
2014-03-14 14:13:41 -04:00
2015-03-17 11:36:28 -04:00
UI_COMMAND ( EnablePreviewMesh , " Hold To Enable Preview Mesh " , " When held down a preview mesh appears under the cursor " , EUserInterfaceActionType : : Button , FInputChord ( EKeys : : Backslash ) ) ;
UI_COMMAND ( CyclePreviewMesh , " Cycles Preview Mesh " , " Cycles available preview meshes " , EUserInterfaceActionType : : Button , FInputChord ( EModifierKey : : Shift , EKeys : : Backslash ) ) ;
2014-03-14 14:13:41 -04:00
}
Simple and Group Stat Exec commands can now be triggered from the level viewport Show menu directly.
#ttp 306334 - ROCKET: TASK: PUNTABLE: Stats: FN: Make diagnostic stats discoverable and available in the UI (don't require console to toggle)
#branch UE4
#change
DECLARE_STATS_GROUP û Added additional param GroupCategory, for subfolder use in the UI. Fixedup all Stats Group usage so the category is now propagated through where it needs to be.
Currently all Group stats have the Category æAdvancedÆ, and all engine stats have the Category æSimpleÆ û this is just to differentiate them for now, better categories will come along in future.
Modified FindOrAddMetaData as it now broadcasts a delegate (via a TaskGraph) whenever a new stat meta data is added û this was needed as not all the stat groups are æregisteredÆ when the level viewports are created (they are drip loaded), so the viewports need to listen for any additions thereafter...
GroupDescription is displayed as a tooltip in the UI for the stat entry and we may want to localize these.
RenderStats & RenderGroupedWithHierarchy: Modified so that it now takes the viewport that it should render to as a param (which is also used to determine if each stat should be visible).
Removed StatsEnabled delegate in favour of StatCheckEnabled, StatEnabled, StatDisabled, StatDisableAll for more finite usage and feedback when toggling them.
Modified FHUDGroupManager HandleCommand It now uses the new delegates to work out whether it needs to enable or disable for the current viewport, so itÆs more involved than a simple toggle, itÆs more ôis the stat enabled for the current viewport, and is it enabled for any viewportö delegate querying so it can react accordingly.
Added struct FSimpleStatFuncs: Which contains info on each æSimple StatÆ such as; name, category, description, renderfunc, togglefunc and the side of the viewport it should be rendered to
ExecSimpleStat û Calls Exec for a registered Simple Stat, ensuring the correct viewport is set
IsSimpleStat û Checks to see if a stat is a registered Simple Stat or not
SetSimpleStat û Sets the state of a specified Simple Stats
SetSimpleStats - Sets the state of the specified Simple Stats
RenderSimpleStats û Renders the Simple Stats if they are enabled, and have Render functions assigned.
Each Exec function had the code it executes which itÆs toggled and rendered into functions
Added FStatUnitData & FStatHitchesData: Moved all the globals/static variables used when enabling Stat Unit/Hitches into a struct as itÆs now used by multiple viewports and they needed their own copies. Also moved their draw functions here too.
FSceneViewport:
SwapStatCommands û Exchanges the enabled stats between two viewports, this is so when PIEing the stats which were enabled on the Level Viewport (if playing in active viewport only) get transposed to the Game Viewport, and then restored when PIE ends.
SEditorViewport:
ToggleStatCommand û Called when a stat is enabled/disabled from the UI
IsStatCommandVisible û Checks to see if a stat command should appear as visible in the UI
SEditorViewportViewMenu:
GenerateViewMenuContent û Made protected and virtual so it could be called externally.
FLevelViewportCommands: Added the code needed to generate commands for each of the Stat menu entries, however because not all stats are registered when this happens, it also creates some delegates to listen out for others that are registered later
Destructor û Needed to reset delegates
HandleNewGroupStat û Creates the new group stat commands
HandleNewStat û Creates the new stat command
FindStatIndex û Looks for where a stat should be inserted in the menu in order to maintain alphabetical order
SLevelViewport:
Modified the code so that the states of all the SimpleStats are saved so they can be restored next time the editor is ran (previously just handled FPS).
OnFloatingButtonClicked û Called whenever any of the level viewports floating buttons are clicked in order to correctly set the ælastÆ viewport global
OnToggleAllStatCommands û Called when the user selects æHide AllÆ from the viewport.
ToggleStatCommand û Called when the user selects any other stat option from the viewport.
BindStatCommand û Used to bind the menu action to the command name (used by delegate)
Added SLevelEditorViewportViewMenu (extends SEditorViewportViewMenu), and overrode GenerateViewMenuContent so that OnFloatingButtonClicked can be called whenever the menu is clicked on. This is also called during GenerateOptionsMenu, GenerateCameraMenu, GenerateShowMenu & OnToggleMaximize
Added global ptr GStatProcessingViewportClient (sim to Current, Last) used to keep track of which viewport the stat should be applied too (only valid within the scope of the Exec call).
FViewportClient:
Moved global ESoundShowFlags enum list into this class.
FCommonViewportClient:
Destructor û Needed to reset GStatProcessingViewportClient
FLevelEditorViewportClient
SetCurrentViewport û moved code responsible for setting the global æcurrentÆ viewport ptr into a func
SetLastKeyViewport û moved the code responsible for settings the global ælastÆ viewport ptr into a func
UGameViewportClient:
Destructor û Needed to cleanup delegate usage.
FViewportClient & FLevelEditorViewportClient & UGameViewportClient*
GetStatUnitData û The viewports copy of the variables needed when running the Stat Unit Exec
GetStatHitchesData û The viewports copy of the variables needed when running the Stat Hitches Exec
GetEnabledStats û Gets a list of all the stats which are enabled for the viewport
SetEnabledStats û Sets a list of all the stats which should be enabled for the viewport
IsStatEnabled û Checks to see if a specific stat is enabled for the viewport
SetStatEnabled û Sets a specifics stats state to enabled or disabled
GetSoundShowFlags û Gets which flags are enabled for the Stat Sounds Exec
SetSoundShowFlags û Sets which flags are enabled for the Stat Sounds Exec
HandleViewportStatCheckEnabled (delegate) û checks to see if a specific stat is enabled on this viewport
HandleViewportStatEnabled (delegate) û enables a specific stat for the viewport
HandleViewportStatDisabled (delegate) û disables a specific stat for the viewport
HandleViewportStatDisableAll (delegate) û disables all stats for the viewport
*FViewportClient has dummy virtual funcs and LevelEditor/Game both have the same implementations, the only differences is the GameViewports member variables are static so that the stat info persists between runs.
FLevelEditorViewportInstanceSettings deprecated bShowFPS in favour of an EnabledStats array (so we can track the state of all stats, not just FPS).
Added new config var bSaveSimpleStats: if enabled, restores previously enabled level viewport simple stats the next time the editor runs (defaults to false).
Modified FillShowFlagMenu so that thereÆs just one func and you specify where (if any) youÆd like a separator to occur.
Added FillShowStatsSubMenus so that menus can be generated which have submenus
Added the Stats sub menu to the View menu
Modified Execs so that the GStatProcessingViewportClient is set to the correct default viewport (if it wasnÆt specified), and clears again after itÆs been processed
HandleStatCommand now takes World and ViewportClient as params too û needed when Execs enabled other Execs so the world/viewport persists.
SetAverageUnitTimes û Added as a Setter func for GetAverageUnitTimes (moved code out of Stat Unit renderer and modified so that it only updates once per frame).
Stripped out all unneeded globals
[CL 2058522 by Andrew Brown in Main branch]
2014-04-29 04:04:27 -04:00
void FLevelViewportCommands : : HandleNewStatGroup ( const TArray < FStatNameAndInfo > & NameAndInfos )
{
2016-01-27 12:09:53 -05:00
// #Stats: FStatNameAndInfo should be private and visible only to stats2 system
Simple and Group Stat Exec commands can now be triggered from the level viewport Show menu directly.
#ttp 306334 - ROCKET: TASK: PUNTABLE: Stats: FN: Make diagnostic stats discoverable and available in the UI (don't require console to toggle)
#branch UE4
#change
DECLARE_STATS_GROUP û Added additional param GroupCategory, for subfolder use in the UI. Fixedup all Stats Group usage so the category is now propagated through where it needs to be.
Currently all Group stats have the Category æAdvancedÆ, and all engine stats have the Category æSimpleÆ û this is just to differentiate them for now, better categories will come along in future.
Modified FindOrAddMetaData as it now broadcasts a delegate (via a TaskGraph) whenever a new stat meta data is added û this was needed as not all the stat groups are æregisteredÆ when the level viewports are created (they are drip loaded), so the viewports need to listen for any additions thereafter...
GroupDescription is displayed as a tooltip in the UI for the stat entry and we may want to localize these.
RenderStats & RenderGroupedWithHierarchy: Modified so that it now takes the viewport that it should render to as a param (which is also used to determine if each stat should be visible).
Removed StatsEnabled delegate in favour of StatCheckEnabled, StatEnabled, StatDisabled, StatDisableAll for more finite usage and feedback when toggling them.
Modified FHUDGroupManager HandleCommand It now uses the new delegates to work out whether it needs to enable or disable for the current viewport, so itÆs more involved than a simple toggle, itÆs more ôis the stat enabled for the current viewport, and is it enabled for any viewportö delegate querying so it can react accordingly.
Added struct FSimpleStatFuncs: Which contains info on each æSimple StatÆ such as; name, category, description, renderfunc, togglefunc and the side of the viewport it should be rendered to
ExecSimpleStat û Calls Exec for a registered Simple Stat, ensuring the correct viewport is set
IsSimpleStat û Checks to see if a stat is a registered Simple Stat or not
SetSimpleStat û Sets the state of a specified Simple Stats
SetSimpleStats - Sets the state of the specified Simple Stats
RenderSimpleStats û Renders the Simple Stats if they are enabled, and have Render functions assigned.
Each Exec function had the code it executes which itÆs toggled and rendered into functions
Added FStatUnitData & FStatHitchesData: Moved all the globals/static variables used when enabling Stat Unit/Hitches into a struct as itÆs now used by multiple viewports and they needed their own copies. Also moved their draw functions here too.
FSceneViewport:
SwapStatCommands û Exchanges the enabled stats between two viewports, this is so when PIEing the stats which were enabled on the Level Viewport (if playing in active viewport only) get transposed to the Game Viewport, and then restored when PIE ends.
SEditorViewport:
ToggleStatCommand û Called when a stat is enabled/disabled from the UI
IsStatCommandVisible û Checks to see if a stat command should appear as visible in the UI
SEditorViewportViewMenu:
GenerateViewMenuContent û Made protected and virtual so it could be called externally.
FLevelViewportCommands: Added the code needed to generate commands for each of the Stat menu entries, however because not all stats are registered when this happens, it also creates some delegates to listen out for others that are registered later
Destructor û Needed to reset delegates
HandleNewGroupStat û Creates the new group stat commands
HandleNewStat û Creates the new stat command
FindStatIndex û Looks for where a stat should be inserted in the menu in order to maintain alphabetical order
SLevelViewport:
Modified the code so that the states of all the SimpleStats are saved so they can be restored next time the editor is ran (previously just handled FPS).
OnFloatingButtonClicked û Called whenever any of the level viewports floating buttons are clicked in order to correctly set the ælastÆ viewport global
OnToggleAllStatCommands û Called when the user selects æHide AllÆ from the viewport.
ToggleStatCommand û Called when the user selects any other stat option from the viewport.
BindStatCommand û Used to bind the menu action to the command name (used by delegate)
Added SLevelEditorViewportViewMenu (extends SEditorViewportViewMenu), and overrode GenerateViewMenuContent so that OnFloatingButtonClicked can be called whenever the menu is clicked on. This is also called during GenerateOptionsMenu, GenerateCameraMenu, GenerateShowMenu & OnToggleMaximize
Added global ptr GStatProcessingViewportClient (sim to Current, Last) used to keep track of which viewport the stat should be applied too (only valid within the scope of the Exec call).
FViewportClient:
Moved global ESoundShowFlags enum list into this class.
FCommonViewportClient:
Destructor û Needed to reset GStatProcessingViewportClient
FLevelEditorViewportClient
SetCurrentViewport û moved code responsible for setting the global æcurrentÆ viewport ptr into a func
SetLastKeyViewport û moved the code responsible for settings the global ælastÆ viewport ptr into a func
UGameViewportClient:
Destructor û Needed to cleanup delegate usage.
FViewportClient & FLevelEditorViewportClient & UGameViewportClient*
GetStatUnitData û The viewports copy of the variables needed when running the Stat Unit Exec
GetStatHitchesData û The viewports copy of the variables needed when running the Stat Hitches Exec
GetEnabledStats û Gets a list of all the stats which are enabled for the viewport
SetEnabledStats û Sets a list of all the stats which should be enabled for the viewport
IsStatEnabled û Checks to see if a specific stat is enabled for the viewport
SetStatEnabled û Sets a specifics stats state to enabled or disabled
GetSoundShowFlags û Gets which flags are enabled for the Stat Sounds Exec
SetSoundShowFlags û Sets which flags are enabled for the Stat Sounds Exec
HandleViewportStatCheckEnabled (delegate) û checks to see if a specific stat is enabled on this viewport
HandleViewportStatEnabled (delegate) û enables a specific stat for the viewport
HandleViewportStatDisabled (delegate) û disables a specific stat for the viewport
HandleViewportStatDisableAll (delegate) û disables all stats for the viewport
*FViewportClient has dummy virtual funcs and LevelEditor/Game both have the same implementations, the only differences is the GameViewports member variables are static so that the stat info persists between runs.
FLevelEditorViewportInstanceSettings deprecated bShowFPS in favour of an EnabledStats array (so we can track the state of all stats, not just FPS).
Added new config var bSaveSimpleStats: if enabled, restores previously enabled level viewport simple stats the next time the editor runs (defaults to false).
Modified FillShowFlagMenu so that thereÆs just one func and you specify where (if any) youÆd like a separator to occur.
Added FillShowStatsSubMenus so that menus can be generated which have submenus
Added the Stats sub menu to the View menu
Modified Execs so that the GStatProcessingViewportClient is set to the correct default viewport (if it wasnÆt specified), and clears again after itÆs been processed
HandleStatCommand now takes World and ViewportClient as params too û needed when Execs enabled other Execs so the world/viewport persists.
SetAverageUnitTimes û Added as a Setter func for GetAverageUnitTimes (moved code out of Stat Unit renderer and modified so that it only updates once per frame).
Stripped out all unneeded globals
[CL 2058522 by Andrew Brown in Main branch]
2014-04-29 04:04:27 -04:00
for ( int32 InfoIdx = 0 ; InfoIdx < NameAndInfos . Num ( ) ; InfoIdx + + )
{
const FStatNameAndInfo & NameAndInfo = NameAndInfos [ InfoIdx ] ;
const FName GroupName = NameAndInfo . GetGroupName ( ) ;
const FName GroupCategory = NameAndInfo . GetGroupCategory ( ) ;
const FText GroupDescription = FText : : FromString ( NameAndInfo . GetDescription ( ) ) ; // @todo localize description?
HandleNewStat ( GroupName , GroupCategory , GroupDescription ) ;
}
}
void FLevelViewportCommands : : HandleNewStat ( const FName & InStatName , const FName & InStatCategory , const FText & InStatDescription )
{
FString CommandName = InStatName . ToString ( ) ;
if ( CommandName . RemoveFromStart ( TEXT ( " STATGROUP_ " ) ) | | CommandName . RemoveFromStart ( TEXT ( " STAT_ " ) ) )
{
// Trim the front to get our category name
FString GroupCategory = InStatCategory . ToString ( ) ;
if ( ! GroupCategory . RemoveFromStart ( TEXT ( " STATCAT_ " ) ) )
{
GroupCategory . Empty ( ) ;
}
// If we already have an entry (which can happen if a category has changed [when loading older saved stat data]) or we don't have a valid category then skip adding
if ( ! FInputBindingManager : : Get ( ) . FindCommandInContext ( this - > GetContextName ( ) , InStatName ) . IsValid ( ) & & ! GroupCategory . IsEmpty ( ) )
{
// Find or Add the category
TArray < FShowMenuCommand > * ShowStatCommands = ShowStatCatCommands . Find ( GroupCategory ) ;
if ( ! ShowStatCommands )
{
// New category means we'll need to resort
ShowStatCatCommands . Add ( GroupCategory ) ;
ShowStatCatCommands . KeySort ( TLess < FString > ( ) ) ;
ShowStatCommands = ShowStatCatCommands . Find ( GroupCategory ) ;
}
const int32 NewIndex = FindStatIndex ( ShowStatCommands , CommandName ) ;
if ( NewIndex ! = INDEX_NONE )
{
const FText DisplayName = FText : : FromString ( CommandName ) ;
FText DescriptionName = InStatDescription ;
FFormatNamedArguments Args ;
Args . Add ( TEXT ( " StatName " ) , DisplayName ) ;
if ( DescriptionName . IsEmpty ( ) )
{
DescriptionName = FText : : Format ( NSLOCTEXT ( " UICommands " , " StatShowCommandName " , " Show {StatName} Stat " ) , Args ) ;
}
TSharedPtr < FUICommandInfo > StatCommand
= FUICommandInfoDecl ( this - > AsShared ( ) , InStatName , FText : : GetEmpty ( ) , DescriptionName )
. UserInterfaceType ( EUserInterfaceActionType : : ToggleButton ) ;
FLevelViewportCommands : : FShowMenuCommand ShowStatCommand ( StatCommand , DisplayName ) ;
ShowStatCommands - > Insert ( ShowStatCommand , NewIndex ) ;
NewStatCommandDelegate . Broadcast ( ShowStatCommand . ShowMenuItem , ShowStatCommand . LabelOverride . ToString ( ) ) ;
}
}
}
}
int32 FLevelViewportCommands : : FindStatIndex ( const TArray < FShowMenuCommand > * ShowStatCommands , const FString & InCommandName ) const
{
check ( ShowStatCommands ) ;
for ( int32 StatIndex = 0 ; StatIndex < ShowStatCommands - > Num ( ) ; + + StatIndex )
{
const FString CommandName = ( * ShowStatCommands ) [ StatIndex ] . LabelOverride . ToString ( ) ;
const int32 Compare = InCommandName . Compare ( CommandName ) ;
if ( Compare = = 0 )
{
return INDEX_NONE ;
}
else if ( Compare < 0 )
{
return StatIndex ;
}
}
return ShowStatCommands - > Num ( ) ;
}
2014-03-14 14:13:41 -04:00
PRAGMA_ENABLE_OPTIMIZATION
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
# undef LOCTEXT_NAMESPACE