//@TODO: Should create a menu for each component that contains sockets, or have some form of disambiguation within the menu (like a fully qualified path)
// Instead, we currently only display the sockets on the root component
NotificationInfo.Text=FText::Format(NSLOCTEXT("LevelEditorCommands","KeepSimulationChanges_MultipleActorsUpdatedNotification","Saved state for {UpdatedActorCount} actors ({TotalCopiedPropertyCount} properties)"),Args);
NotificationInfo.Text=FText::Format(NSLOCTEXT("LevelEditorCommands","KeepSimulationChanges_ActorUpdatedNotification","Saved state for {FirstUpdatedActorLabel} ({TotalCopiedPropertyCount} properties)"),Args);
}
CompletionState=SNotificationItem::CS_Success;
}
else
{
NotificationInfo.Text=NSLOCTEXT("LevelEditorCommands","KeepSimulationChanges_NoActorsUpdated","No properties were copied");
if(EAppReturnType::Yes==FMessageDialog::Open(EAppMsgType::YesNo,LOCTEXT("InstallMarketplacePrompt","The Marketplace requires the Unreal Engine Launcher, which does not seem to be installed on your computer. Would you like to install it now?")))
FMessageDialog::Open(EAppMsgType::Ok,FText::FromString(TEXT("Sorry, there was a problem installing the Launcher.\nPlease try to install it manually!")));
// Now help the user pick a path and name for the new Blueprint
UBlueprint*Blueprint=FKismetEditorUtilities::CreateBlueprintFromClass(NSLOCTEXT("LevelEditorCommands","CreateClassBlueprint_Title","Create Class Blueprint"),SelectedClass);
// If no static-mesh-toting actor found, warn and do nothing.
if(!StaticMesh)
{
FMessageDialog::Open(EAppMsgType::Ok,NSLOCTEXT("UnrealEd","Error_NoActorWithStaticMesh","No Actor found with a StaticMesh."));
return;
}
// If we already have a collision model for this staticmesh, ask if we want to replace it.
if(StaticMesh->BodySetup)
{
constboolbDoReplace=EAppReturnType::Yes==FMessageDialog::Open(EAppMsgType::YesNo,NSLOCTEXT("UnrealEd","Prompt_24","Static Mesh already has a collision model. \nDo you want to replace it with Builder Brush?"));
/** UI_COMMAND takes long for the compile to optimize */
PRAGMA_DISABLE_OPTIMIZATION
voidFLevelEditorCommands::RegisterCommands()
{
UI_COMMAND(BrowseDocumentation,"Documentation...","Opens the main documentation page",EUserInterfaceActionType::Button,FInputGesture(EKeys::F1));
UI_COMMAND(BrowseAPIReference,"API Reference...","Opens the API reference documentation",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(BrowseViewportControls,"Viewport Controls...","Opens the viewport controls cheat sheet",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(NewLevel,"New Level...","Create a new level, or choose a level template to start from.",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Control,EKeys::N));
UI_COMMAND(Save,"Save","Saves the current level to disk",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SaveAs,"Save As...","Save the current level as...",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift|EModifierKey::Control,EKeys::S));
UI_COMMAND(SaveAllLevels,"Save All Levels","Saves all unsaved levels to disk",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ToggleFavorite,"Toggle Favorite","Sets whether the currently loaded level will appear in the list of favorite levels",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(Import,"Import...","Imports objects and actors from a T3D format into the current level",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ExportAll,"Export All...","Exports the entire level to a file on disk (multiple formats are supported.)",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ExportSelected,"Export Selected...","Exports currently-selected objects to a file on disk (multiple formats are supported.)",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(Build,"Build All Levels","Builds all levels (precomputes lighting data and visibility data, generates navigation networks and updates brush models.)",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(BuildAndSubmitToSourceControl,"Build and Submit...","Displays a window that allows you to build all levels and submit them to source control",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(BuildLightingOnly_VisibilityOnly,"Precompute Static Visibility","Only precomputes static visibility data (all levels.)",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(LightingBuildOptions_UseErrorColoring,"Use Error Coloring","When enabled, errors during lighting precomputation will be baked as colors into light map data",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(LightingBuildOptions_ShowLightingStats,"Show Lighting Stats","When enabled, a window containing metrics about lighting performance and memory will be displayed after a successful build.",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(BuildGeometryOnly_OnlyCurrentLevel,"Build Geometry (Current Level)","Builds geometry, only for the current level",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(LightingQuality_Production,"Production","Sets precomputed lighting quality to highest possible quality (slowest computation time.)",EUserInterfaceActionType::RadioButton,FInputGesture());
UI_COMMAND(LightingQuality_High,"High","Sets precomputed lighting quality to high quality",EUserInterfaceActionType::RadioButton,FInputGesture());
UI_COMMAND(LightingQuality_Medium,"Medium","Sets precomputed lighting quality to medium quality",EUserInterfaceActionType::RadioButton,FInputGesture());
UI_COMMAND(LightingQuality_Preview,"Preview","Sets precomputed lighting quality to preview quality (fastest computation time.)",EUserInterfaceActionType::RadioButton,FInputGesture());
UI_COMMAND(LightingTools_ShowBounds,"Show Lighting Bounds","Draws a wireframe sphere for the lighting bounds of the Light Environment, and a point for the center, or multiple points if NumVolumeVisibilitySamples is greater than zero.",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(LightingTools_ShowTraces,"Show Shadow Traces","Draws lines for any shadow rays that the Light Environment traced. The lines will be white if the light is not shadowed, and red otherwise.",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(LightingTools_ShowDirectOnly,"Show Direct Lighting","Renders only the influence of direct lighting on the Light Environments.",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(LightingTools_ShowIndirectOnly,"Show Indirect Lighting","Renders only the influence of indirect lighting on the Light Environments.",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(LightingTools_ShowIndirectSamples,"Show Indirect Lighting Samples","Draws the indirect lighting samples that contributed to the indirect lighting for the Light Environments.",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(LightingDensity_RenderGrayscale,"Render Grayscale","Renders the lightmap density.",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(LightingResolution_CurrentLevel,"Current Level","Adjust only primitives in the current level.",EUserInterfaceActionType::RadioButton,FInputGesture());
UI_COMMAND(LightingResolution_SelectedLevels,"Selected Levels","Adjust only primitives in the selected levels.",EUserInterfaceActionType::RadioButton,FInputGesture());
UI_COMMAND(LightingResolution_AllLoadedLevels,"All Loaded Levels","Adjust primitives in all loaded levels.",EUserInterfaceActionType::RadioButton,FInputGesture());
UI_COMMAND(LightingResolution_SelectedObjectsOnly,"Selected Objects Only","Adjust only selected objects in the levels.",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(LightingStaticMeshInfo,"Lighting StaticMesh Info...","Shows the lighting information for the StaticMeshes.",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SceneStats,"Open Scene Stats","Opens the Scene Stats viewer",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(TextureStats,"Open Texture Stats","Opens the Texture Stats viewer",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MapCheck,"Open Map Check","Checks map for errors",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(RecompileLevelEditor,"Recompile Level Editor","Recompiles and reloads C++ code for the Level Editor on the fly",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ReloadLevelEditor,"Reload Level Editor","Reloads C++ code for the Level Editor on the fly",EUserInterfaceActionType::Button,FInputGesture());
}
UI_COMMAND(RecompileGameCode,"Recompile Game Code","Recompiles and reloads C++ code for game systems on the fly",EUserInterfaceActionType::Button,FInputGesture(EKeys::P,EModifierKey::Alt|EModifierKey::Control|EModifierKey::Shift));
UI_COMMAND(EditAsset,"Edit Asset","Edits the asset associated with the selected actor",EUserInterfaceActionType::Button,FInputGesture(EKeys::E,EModifierKey::Control));
UI_COMMAND(EditAssetNoConfirmMultiple,"Edit Asset","Edits the asset associated with the selected actor",EUserInterfaceActionType::Button,FInputGesture(EKeys::E,EModifierKey::Control|EModifierKey::Shift));
UI_COMMAND(SnapCameraToActor,"Snap View to Actor","Snaps the view to the selected actors",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(GoToCodeForActor,"Go to C++ Code for Actor","Opens a code editing IDE and navigates to the source file associated with the seleced actor",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(GoToDocsForActor,"Go to Documentation for Actor","Opens documentation for the Actor in the default web browser",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(PasteHere,"Paste Here","Pastes the actor at the click location",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SnapOriginToGrid,"Snap Origin to Grid","Snaps the actor to the nearest grid location at its origin",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Control,EKeys::End));
UI_COMMAND(SnapOriginToGridPerActor,"Snap Origin to Grid Per Actor","Snaps each selected actor separately to the nearest grid location at its origin",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(AlignOriginToGrid,"Align Origin to Grid","Aligns the actor to the nearest grid location at its origin",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SnapToFloor,"Snap to Floor","Snaps the actor to the floor below it",EUserInterfaceActionType::Button,FInputGesture(EKeys::End));
UI_COMMAND(AlignToFloor,"Align to Floor","Aligns the actor with the floor",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SnapPivotToFloor,"Snap Pivot to Floor","Snaps the actor to the floor at its pivot point",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Alt,EKeys::End));
UI_COMMAND(AlignPivotToFloor,"Align Pivot to Floor","Aligns the actor with the floor at its pivot point",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SnapBottomCenterBoundsToFloor,"Snap Bottom Center Bounds to Floor","Snaps the actor to the floor at its bottom center bounds",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::End));
UI_COMMAND(AlignBottomCenterBoundsToFloor,"Align Bottom Center Bounds to Floor","Aligns the actor with the floor at its bottom center bounds",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SnapOriginToActor,"Snap Origin to Actor","SNaps the actor to another actor at its origin",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(AlignOriginToActor,"Align Origin to Actor","Aligns the actor to another actor at its origin",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SnapToActor,"Snap to Actor","Snaps the actor to another actor",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(AlignToActor,"Align to Actor","Aligns the actor with another actor",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SnapPivotToActor,"Snap Pivot to Actor","Snaps the actor to another actor at its pivot point",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(AlignPivotToActor,"Align Pivot to Actor","Aligns the actor with another actor at its pivot point",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SnapBottomCenterBoundsToActor,"Snap Bottom Center Bounds to Actor","Snaps the actor to another actor at its bottom center bounds",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(AlignBottomCenterBoundsToActor,"Align Bottom Center Bounds to Actor","Aligns the actor with another actor at its bottom center bounds",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(DeltaTransformToActors,"Delta Transform","Apply Delta Transform to selected actors",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MirrorActorX,"Mirror X","Mirrors the actor along the X axis",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MirrorActorY,"Mirror Y","Mirrors the actor along the Y axis",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MirrorActorZ,"Mirror Z","Mirrors the actor along the Z axis",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(LockActorMovement,"Lock Actor Movement","Locks the actor so it cannot be moved",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(DetachFromParent,"Detach","Detach the actor from its parent",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(AttachSelectedActors,"Attach Selected Actors","Attach the selected actors to the last selected actor",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Alt,EKeys::B));
UI_COMMAND(AttachActorIteractive,"Attach Actor Interactive","Start an interactive actor picker to let you choose a parent for the currently selected actor",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Alt,EKeys::A));
UI_COMMAND(HoldToEnableVertexSnapping,"Hold to Enable Vertex Snapping","When the key binding is pressed and held vertex snapping will be enabled",EUserInterfaceActionType::ToggleButton,FInputGesture(EKeys::V));
//@ todo Slate better tooltips for pivot options
UI_COMMAND(SavePivotToPrePivot,"Save Pivot to Pre-Pivot","Saves the pivot to the pre-pivot",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ResetPivot,"Reset Pivot","Resets the pivot",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ResetPrePivot,"Reset Pre-Pivot","Resets the pre-pivot",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MovePivotHere,"Move Here","Moves the pivot to the clicked location",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MovePivotHereSnapped,"Move Here (Snapped)","Moves the pivot to the nearest grid point to the clicked location",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MovePivotToCenter,"Center on Selection","Centers the pivot to the middle of the selection",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ConvertToAdditive,"Additive","Converts the selected brushes to additive brushes",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ConvertToSubtractive,"Subtractive","Converts the selected brushes to subtractive brushes",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(OrderFirst,"To First","Changes the drawing order of the selected brushes so they are the first to draw",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(OrderLast,"To Last","Changes the drawing order of the selected brushes so they are the last to draw",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MakeSolid,"Solid","Makes the selected brushes solid",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MakeSemiSolid,"Semi-Solid","Makes the selected brushes semi-solid",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MakeNonSolid,"Non-Solid","Makes the selected brushes non-solid",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MergePolys,"Merge","Merges multiple polygons on a brush face into as few as possible",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SeparatePolys,"Separate","Reverses the effect of a previous merge",EUserInterfaceActionType::Button,FInputGesture());
// RegroupActors uses GroupActors for it's label and tooltip when simply grouping a selection of actors using overrides. This is to provide display of the gesture which is the same for both.
UI_COMMAND(GroupActors,"Group","Groups the selected actors",EUserInterfaceActionType::Button,FInputGesture(/*EKeys::G, EModifierKey::Control*/));
UI_COMMAND(RegroupActors,"Regroup","Regroups the selected actors into a new group, removing any current groups in the selection",EUserInterfaceActionType::Button,FInputGesture(EKeys::G,EModifierKey::Control));
UI_COMMAND(UngroupActors,"Ungroup","Ungroups the selected actors",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::G));
UI_COMMAND(AddActorsToGroup,"Add to Group","Adds the selected actors to the selected group",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(RemoveActorsFromGroup,"Remove from Group","Removes the selected actors from the selected groups",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(LockGroup,"Lock","Locks the selected groups",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(UnlockGroup,"Unlock","Unlocks the selected groups",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MergeActors,"Create Mesh Proxy...","Harvest geometry from selected actors and merge them into single mesh",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(MergeActorsByMaterials,"Merge Actors...","Harvest geometry from selected actors and merge grouping them by materials",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ShowSelectedOnly,"Show Only Selected","Shows only the selected actors",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ShowSelected,"Show Selected","Shows the selected actors",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::H));
UI_COMMAND(HideSelected,"Hide Selected","Hides the selected actors",EUserInterfaceActionType::Button,FInputGesture(EKeys::H));
UI_COMMAND(ShowAllStartup,"Show All At Startup","Shows all actors at startup",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ShowSelectedStartup,"Show Selected At Startup","Shows selected actors at startup",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(HideSelectedStartup,"Hide Selected At Startup","Hide selected actors at startup",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(CycleNavigationDataDrawn,"Cycle Navigation Data Drawn","Cycles through navigation data (navmeshes for example) to draw one at a time",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Alt,EKeys::N));
UI_COMMAND(SelectNone,"Unselect All","Unselects all actors",EUserInterfaceActionType::Button,FInputGesture(EKeys::Escape));
UI_COMMAND(InvertSelection,"Invert Selection","Inverts the current selection",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectAllActorsOfSameClass,"Select All Actors of Same Class","Selects all the actors that have the same class",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift|EModifierKey::Control,EKeys::A));
UI_COMMAND(SelectAllActorsOfSameClassWithArchetype,"Select All Actors with Same Archetype","Selects all the actors of the same class that have the same archetype",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectRelevantLights,"Select Relevant Lights","Select all lights relevant to the current selection",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectStaticMeshesOfSameClass,"Select All Using Selected Static Meshes (Selected Actor Types)","Selects all actors with the same static mesh and actor class as the selection",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectStaticMeshesAllClasses,"Select All Using Selected Static Meshes (All Actor Types)","Selects all actors with the same static mesh as the selection",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::E));
UI_COMMAND(SelectSkeletalMeshesOfSameClass,"Select All Using Selected Skeletal Meshes (Selected Actor Types)","Selects all actors with the same skeletal mesh and actor class as the selection",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectSkeletalMeshesAllClasses,"Select All Using Selected Skeletal Meshes (All Actor Types)","Selects all actors with the same skeletal mesh as the selection",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectAllWithSameMaterial,"Select All With Same Material","Selects all actors with the same material as the selection",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectMatchingEmitter,"Select All Matching Emitters","Selects all emitters with the same particle system as the selection",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectAllLights,"Select All Lights","Selects all lights",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectStationaryLightsExceedingOverlap,"Select Stationary Lights exceeding overlap","Selects all stationary lights exceeding the overlap limit",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectAllAddditiveBrushes,"Select All Additive Brushes","Selects all additive brushes",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectAllSubtractiveBrushes,"Select All Subtractive Brushes","Selects all subtractive brushes",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectAllSemiSolidBrushes,"Select All Semi-Solid Brushes","Selects all semi-solid brushes",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectAllNonSolidBrushes,"Select All Non-Solid Brushes","Selects all non-solid brushes",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectAllActorsControlledByMatinee,"Select Actors Used by This Matinee","Selects all actors controlled by this Matinee",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SelectAllSurfaces,"Select All Surfaces","Selects all bsp surfaces",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::S));
UI_COMMAND(SurfSelectAllMatchingBrush,"Select Matching Brush","Selects the surfaces belonging to the same brush as the selected surfaces",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::B));
UI_COMMAND(SurfSelectAllMatchingTexture,"Select Matching Material","Selects all surfaces with the same material as the selected surfaces",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::T));
UI_COMMAND(SurfSelectAllAdjacents,"Select All Adjacent Surfaces","Selects all surfaces adjacent to the currently selected surfaces",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::J));
UI_COMMAND(SurfSelectAllAdjacentCoplanars,"Select All Coplanar Surfaces","Selects all surfaces adjacent and coplanar with the selected surfaces",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::C));
UI_COMMAND(SurfSelectAllAdjacentWalls,"Select All Adjacent Wall Surfaces","Selects all adjacent upright surfaces",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::W));
UI_COMMAND(SurfSelectAllAdjacentFloors,"Select All Adjacent Floor Surfaces","Selects all adjacent floor sufaces(ones with normals pointing up)",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::U));
UI_COMMAND(SurfSelectAllAdjacentSlants,"Select All Adjacent Slant Surfaces","Selects all adjacent slant surfaces (surfaces that are not walls, floors, or ceilings according to their normals) to the currently selected surfaces.",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::Y));
UI_COMMAND(SurfSelectReverse,"Invert Surface Selection","Inverts the current surface selection",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::Q));
UI_COMMAND(SurfSelectMemorize,"Memorize Surface Selection","Stores the current surface selection in memory",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::M));
UI_COMMAND(SurfSelectRecall,"Recall Surface Selection","Replace the current selection with the selection saved in memory",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::R));
UI_COMMAND(SurfSelectOr,"Surface Selection OR","Replace the current selection with only the surfaces which are both currently selected and contained within the saved selection in memory",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::O));
UI_COMMAND(SurfSelectAnd,"Surface Selection AND","Add the selection of surfaces saved in memory to the current selection",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::A));
UI_COMMAND(SurfSelectXor,"Surace Selection XOR"," Replace the current selection with only the surfaces that are not in both the current selection and the selection saved in memory",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::X));
UI_COMMAND(SurfAlignFit,"Align Surface Fit","Best fit surface alignment",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ApplyMaterialToSurface,"Apply Material to Surface Selection","Applies the selected material to the selected surfaces",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(CreateBoundingBoxVolume,"Create Bounding Box Blocking Volume From Mesh","Create a bounding box blocking volume from the static mesh",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(CreateHeavyConvexVolume,"Heavy Convex Blocking Volume From Mesh","Creates a heavy convex blocing volume from the static mesh",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(CreateNormalConvexVolume,"Normal Convex Blocking Volume From Mesh","Creates a normal convex blocking volume from the static mesh",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(CreateLightConvexVolume,"Light Convex Blocking Volume From Mesh","Creates a light convex blocking volume from the static mesh",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(CreateRoughConvexVolume,"Rought Convex Blocking Volume From Mesh","Creates a rough convex blocking volume from the static mesh",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(SaveBrushAsCollision,"Save Collision from Builder Brush","Creates a collision primitive on the selected static meshes based on the shape of the builder brush",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(KeepSimulationChanges,"Keep Simulation Changes","Saves the changes made to this actor in Simulate mode to the actor's default state.",EUserInterfaceActionType::Button,FInputGesture(EKeys::K));
UI_COMMAND(MakeActorLevelCurrent,"Make Selected Actor's Level Current","Makes the selected actors level the current level",EUserInterfaceActionType::Button,FInputGesture(EKeys::M));
UI_COMMAND(MoveSelectedToCurrentLevel,"Move Selection to Current Level","Moves the selected actors to the current level",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Command,EKeys::M));
UI_COMMAND(MoveSelectedToCurrentLevel,"Move Selection to Current Level","Moves the selected actors to the current level",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Control,EKeys::M));
UI_COMMAND(FindLevelsInLevelBrowser,"Find Levels in Level Browser","Finds the selected actors level in the level browser",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(AddLevelsToSelection,"Add Levels to Selection","Adds the selected actors levels to the current level browser selection",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(RemoveLevelsFromSelection,"Remove Levels from Selection","Removes the selected actors levels from the current level browser selection",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(FindActorInLevelScript,"Find in Level Blueprint","Finds any references to the selected actor in its level's blueprint",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(OpenContentBrowser,"Open Content Browser","Opens the Content Browser",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Control|EModifierKey::Shift,EKeys::F));
UI_COMMAND(OpenMarketplace,"Open Marketplace","Opens the Marketplace",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(AddMatinee,"Add Matinee","Creates a new matinee actor to edit",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(EditMatinee,"Edit Matinee","Selects a Matinee to edit",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(OpenLevelBlueprint,"Open Level Blueprint","Edit the Level Blueprint for the current level",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(CheckOutProjectSettingsConfig,"Check Out","Checks out the project settings config file so the game mode can be set.",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(CreateClassBlueprint,"New Class Blueprint...","Create a new Class Blueprint",EUserInterfaceActionType::Button,FInputGesture());
UI_COMMAND(ShowTransformWidget,"Show Transform Widget","Toggles the visibility of the transform widgets",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(AllowTranslucentSelection,"Allow Translucent Selection","Allows translucent objects to be selected",EUserInterfaceActionType::ToggleButton,FInputGesture(EKeys::T));
UI_COMMAND(AllowGroupSelection,"Allow Group Selection","Allows actor groups to be selected",EUserInterfaceActionType::ToggleButton,FInputGesture(EModifierKey::Control|EModifierKey::Shift,EKeys::G));
UI_COMMAND(StrictBoxSelect,"Strict Box Selection","When enabled an object must be entirely encompassed by the selection box when marquee box selecting",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(TransparentBoxSelect,"Transparent Box Selection","When enabled, marquee box select operations will also select objects that are occluded by other objects.",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(DrawBrushMarkerPolys,"Draw Brush Polys","Draws semi-transparent polygons around a brush when selected",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(OnlyLoadVisibleInPIE,"Only Load Visible Levels in Game Preview","If enabled, when game preview starts, only visible levels will be loaded",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(ToggleSocketSnapping,"Enable Socket Snapping","Enables or disables snapping to sockets",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(ToggleParticleSystemLOD,"Enable Particle System LOD Switching","If enabled particle systems will use distance LOD switching in perspective viewports",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(ToggleFreezeParticleSimulation,"Freeze Particle Simulation","If enabled particle systems will freeze their simulation state",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(ToggleParticleSystemHelpers,"Toggle Particle System Helpers","Toggles showing particle system helper widgets in viewports",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(ToggleLODViewLocking,"Enable LOD View Locking","If enabled viewports of the same type will use the same LOD",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(LevelStreamingVolumePrevis,"Enable Automatic Level Streaming","If enabled, the viewport will stream in levels automatically when the camera is moved",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(EnableActorSnap,"Enable Actor Snapping","If enabled, actors will snap to the location of other actors when they are within distance",EUserInterfaceActionType::ToggleButton,FInputGesture(EModifierKey::Control|EModifierKey::Shift,EKeys::K));
UI_COMMAND(EnableVertexSnap,"Enable Vertex Snapping","If enabled, actors will snap to the location of the nearest vertex on another actor in the direction of movement",EUserInterfaceActionType::ToggleButton,FInputGesture());
UI_COMMAND(ShowSelectedDetails,"Show Actor Details","Opens a details panel for the selected actors",EUserInterfaceActionType::Button,FInputGesture(EKeys::F4));
UI_COMMAND(RecompileShaders,"Recompile Changed Shaders","Recompiles shaders which are out of date",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift|EModifierKey::Control,EKeys::Period));
UI_COMMAND(ProfileGPU,"Profile GPU","Profiles the GPU for the next frame and opens a window with profiled data",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift|EModifierKey::Control,EKeys::Comma));
UI_COMMAND(ResetAllParticleSystems,"Reset All Particle Systems","Resets all particle system emitters (removes all active particles and restarts them)",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Shift,EKeys::Slash));
UI_COMMAND(ResetSelectedParticleSystem,"Resets Selected Particle Systems","Resets selected particle system emitters (removes all active particles and restarts them)",EUserInterfaceActionType::Button,FInputGesture(EKeys::Slash));
UI_COMMAND(SelectActorsInLayers,"Select all actors in selected actor's layers","Selects all actors belonging to the layers of the currently selected actors",EUserInterfaceActionType::Button,FInputGesture(EModifierKey::Control,EKeys::L));
UI_COMMAND(FocusAllViewportsToSelection,"Focus Selected Actors in All Viewports","Moves the camera in front of the selected actors in all open viewports",EUserInterfaceActionType::Button,FInputGesture(EKeys::F,EModifierKey::Shift));
UI_COMMAND(MaterialQualityLevel_Low,"Low","Sets material quality in the scene to low.",EUserInterfaceActionType::RadioButton,FInputGesture());
UI_COMMAND(MaterialQualityLevel_High,"High","Sets material quality in the scene to high.",EUserInterfaceActionType::RadioButton,FInputGesture());