Commit Graph

28 Commits

Author SHA1 Message Date
Marc Audy
494f22bb33 Add the ability to link to object class documentation throughout the UI
[CL 2226010 by Marc Audy in Main branch]
2014-07-21 17:31:27 -04:00
Andrew Rodham
8c7093330b Added abililty to snap actors to surfaces in the world whilst dragging in the viewport.
#ttp 323078 - Actor drag preview does not respect actor factory spawn position offset
#ttp 309631 - TOOLS FEATURE: Asset placement: Align placed assets with surface placed on
#ttp 335001 - UE4: EDITOR:"Paste here" works inconsistently
#ttp 334066 - EDITOR: PAPER2D: Dragging a mesh into an ortho viewport does not provide a preview

There is a lot of work here:
    * I have moved and unified all the prop preview and drag alignment code that attempted to align objects to surfaces in the world to a new class, FActorPositioning. This fixes inconsistent behaviour between the drop previews, actual placement, and drag alignment.
    * I have tidied up the methods by which surface alignment is performed in UActorFactory. There is now a virtual method for factories to define *how* an actor should be aligned to the surface. This allows us to specify different alignment routines for things like static meshes, decals and lights.
    * Actor factories now create actors with an FTransform rather than specifying pointers to location and rotation vectors. This makes creation simpler and parameter passing less error prone. As far as I can see, the rotation was only used for surface snapping which is now handled by the factory anyway.
    * Surface snapping can be controlled by the editor viewport toggle button, or via a keyboard command set in the editor preferences
    * It is possible to override the default placement offset when aligning actors to surfaces. SnapOffsetExtent can be found in the editor viewport preferences.
    * Finding a valid snap position no longer uses a hitproxy as this was prone to error and does not work correctly when dragging actors that render their own hit proxies.
    * ClickLocation and ClickPlane are now more consistently set and managed. I have tried to remove excess assignment to these variables to clarify their use and purpose.

[CL 2223237 by Andrew Rodham in Main branch]
2014-07-18 10:09:21 -04:00
Graeme Thornton
747d2a9b9d Mobile Preview In Editor
- Material editor preview nodes now work when the editor is in es2 mode
 - Make editor primitives work in ES2 mode
 - Fix slate font rendering in ES2 mode
 - Remove ES2 shader de-gamma when in the editor
 - Add a new linear sampler type for linear textures
 - Various fixes for dynamic feature level switching
 - When in an emulated feature level mode, display some text in the level editor viewport saying what feature level we're running
 - Removed feature level parameter from USkeletalMesh::GetResourceForRendering. Not used for anything
 - ParticleVertexFactoryPool is now creates feature level specific vertex factories.

[CL 2187558 by Graeme Thornton in Main branch]
2014-07-10 10:39:54 -04:00
Bob Tellez
48e2c32a7c UE4: When running with WorldAssets, the open level dialog has been changed back to a popup. The inline menus don't work as envisioned and it causes problems on other platforms with native menus (Mac)
[CL 2122618 by Bob Tellez in Main branch]
2014-06-30 19:03:07 -04:00
Michael Noland
00c4a007ac Editor: Created a base class with common Options, View, Show, TransformBar, etc... sections for other in-viewport editor toolbars to extend from (WIP, especially Show)
[CL 2120930 by Michael Noland in Main branch]
2014-06-29 00:09:05 -04:00
Laurent Delayen
a377ef0cf4 Dev to Main from cl #2110143
[CL 2118596 by Laurent Delayen in Main branch]
2014-06-26 17:26:58 -04:00
Nick Darnell
32fe5f15c8 Extensibility - Adding an event plugin authors can hook in the level editor module to capture when the tab manager is changed (OnTabManagerChanged). After that event it's safe to call GetLevelEditorTabManager and register your tab spawner from a plugin.
[CL 2116828 by Nick Darnell in Main branch]
2014-06-25 12:49:26 -04:00
Andrew Rodham
7055102044 Locking a viewport to a camera actor now correctly uses the camera's properties
I've made a few changes here to make the code more consistent for the various ways of using a viewport to view an actor's position:
    * Camera properties are now taken off any UCameraComponent, not specifically limited to ACameraActors.
    * Calling FLevelEditorViewportClient::SetActorLock will now lock the viewport to the specified actor. If the actor has a camera component the viewport will inherit this camera's properties. The locked actor will also move with the viewport position if in perspective mode (as before).
    * ControllingActor and PostProcessingActor have been removed from FLevelEditorViewportClient. Both were used for PIP camera previews which now work by locking a viewport to their desired camera.
    * The inheriting of camera properties is controlled by the viewport "Camera View" setting shown on the quick settings viewport toolbar under the "Lock Viewport to Actor sub-menu.

This addresses TTP#337559 - feature request - improve viewport functionality for locking to camera

Reviewed by Chris Wood, Matt Kuhlenschmidt

[CL 2113995 by Andrew Rodham in Main branch]
2014-06-23 10:25:08 -04:00
Andrew Rodham
3df2cfad76 Selecting a camera that has a pinned camera preview now highlights its preview
This addresses TTP#322790 - EDITOR: Viewport: Feature Request: When double clicking on a pinned camera actor in viewport, have its preview window flash

Reviewed by Andrew Brown, Matt Kuhlenschmidt

[CL 2110332 by Andrew Rodham in Main branch]
2014-06-19 06:36:23 -04:00
Andrew Rodham
ba3528c9d4 Made it possible for asset editors to maintain their own FEditorModeTools lists
Breaking changes include:
    * Rename of GEditorModeTools -> GLevelEditorModeTools to signify that it applies only to the level editor modes
    * Addition of FEditorModeRegistry, responsible for managing and creating new editor modes. Modes are no longer registered with an instance of the mode, instead with a mode factory that is able to create a new mode of that type.
    * Editor modes now operate on FEditorViewportClients rather than FLevelEditorViewportClients
    * Added ability to specify an FEditorModeTools when creating an FEditorViewport

Moved component vizualiser manager handling outside of individual editor modes, and into FLevelEditorViewportClient. This should make it easier to transplant in future.

This work addresses TTP#334640 - EDITOR: Investigate making editor modes a per-'editor' concept

Reviewed by Michael Noland, Matt Kuhlenschmidt

[CL 2109245 by Andrew Rodham in Main branch]
2014-06-18 10:16:16 -04:00
Richard TalbotWatkin
e3adf8fbb5 Prohibited minimizing/maximizing two viewports at the same time.
#ttp 336555 - CRASH: Minimizing/maximizing two viewports at the same time crashes the editor
#branch UE4
#proj Editor.LevelEditor
#add Added a FCanExecuteAction to ToggleMaximize, and hid the toggle maximize icon during a transition, so it's no longer possible to set off a new maximize animation while one is already occurring.
#reviewedby Chris.Wood

[CL 2106630 by Richard TalbotWatkin in Main branch]
2014-06-16 02:23:30 -04:00
Jaroslaw Palczynski
ebce413232 UE4 Refactoring. Changed OVERRIDE and FINAL macros to keywords override and final.
[CL 2104397 by Jaroslaw Palczynski in Main branch]
2014-06-13 06:14:46 -04:00
Jamie Dale
0cfe5f0651 Added PlatformInfo to DesktopPlatform and improved the editors Supported Platform UI
TTP# 337136 - SETTINGS: Target Platform settings polish
TTP# 337652 - EDITOR: Limit Project supported Android icons down to 1
TTP# 337650 - EDITOR: There is only 1 icon for Apple for Project Supported Platforms

DesktopPlatform now contains a static array of FPlatformInfo. This can be used to query UE4 about its available platforms, even when they're not available as a target platform.

FPlatformInfo contains the information required by the editor (such as a localized display name and icon), as well as whether a platform is a variation ("flavor") of another, and if so, whether the flavor affects the build output (eg, Win32 or Win64), or the cook output (eg, Android_XYZ). This lets the editor build up nested menus for the "Package Project" and "Cook Project" options, rather than just showing everything as a flat list.

ReviewedBy Thomas.Sarkanen, Max.Preussner

[CL 2095796 by Jamie Dale in Main branch]
2014-06-05 12:13:44 -04:00
Barnabas McManners
abc3cde3c4 Alt + Shift + R now brings up the reference viewer for the currently selected asset in the level editor and asset editor
#TTP 331416 - UE4: Would like to be able to set a hotkey to open the Reference viewer similar to "find in content browser"

#branch UE4

#proj Editor.UnrealEd
#proj Editor.LevelEditor

#add Added new global UICommand ViewReferences, bound to Alt + Shift + R.

#add Implemented the new UICommand in the AssetEditorToolkit and the LevelEditorr. This means that most of the editor is covered by this hotkey. Hitting it in an asset editor brings it up for the current asset, hitting it in the level editor brings it up for the selected asset.

#Further work: Further work is required to modify the content browsers uses of view references, for now it is deemed to be too much work for this task.

#reviewedby Chris.Wood

[CL 2088247 by Barnabas McManners in Main branch]
2014-05-29 17:40:21 -04:00
Jamie Dale
c730fdef83 Added support for choosing which platforms your project will target
TTP# 332489 - TOOLS FEATURE: Editor: Allow user to designate which platforms a project is designed for; warn user when deploying to platforms that will result in a bad time

There is now a "Target Platforms" tab in the project settings which allows you to choose which platforms your project will target. This information is stored inside the .uproject file.

If you try and launch, cook, or package for a project that isn't on the supported list, then you'll see a suppressible warning notifying you that the project may not run as expected. This is also conveyed to you via a warning icon next to platforms which aren't set as a target.

Additionally the target platform icons are shown in the tooltip on the "Open Project" dialog, as well as in the tab area of the level editor.

ReviewedBy Thomas.Sarkanen, Max.Preussner

[CL 2088161 by Jamie Dale in Main branch]
2014-05-29 17:37:19 -04:00
Bob Tellez
d21e695542 UE4: Added open level asset pickers to replace the existing open level dialog. The existing dialog is still accessible via File->Open Level->Open Other Level...
[CL 2083284 by Bob Tellez in Main branch]
2014-05-29 16:50:13 -04:00
Matt Kuhlenschmidt
9fbcefd1df Fixed sequencer not opening once it has been closed (world centric bug)
Removed ISequencerInternals interface as it was not necessary and confusing.

[CL 2082317 by Matt Kuhlenschmidt in Main branch]
2014-05-22 16:10:01 -04:00
Max Preussner
c9d85971be Editor: refactored FLayoutService to be INI file agnostic; moved Editor layout from EditorUserSettings.ini to EditorLayout.ini
I also added code to retain backwards compatibility. Existing settings from EditorUserSettings.ini will be migrated to EditorLayout.ini

#CodeReview: nick.atamas, matt.kuhlenschmidt

[CL 2074798 by Max Preussner in Main branch]
2014-05-15 17:34:02 -04:00
Dmitriy Dyomin
c6d6f9446d World Browser UX improvements
Splitted World Browser views into three independent windows, each window can be summoned from a hierarchy view or details view toolbar
World composition can now be toggled through WorldSettings - bEnableWorldComposition. Once enabled persistent level will be treated as a world root. No more '?worldcompistion' parameter workarounds. 'Open World' command was removed, as levels saved with world composition enabled can be open through 'Open Level' command.
Added bEnableWorldOriginRebasing parameter to WorldSettings, which contols whether world origin shifting should be used

[CL 2072584 by Dmitriy Dyomin in Main branch]
2014-05-14 02:16:14 -04:00
Graeme Thornton
e1700afed8 First pass of changes to remove GRHIFeatureLevel, allowing for multiple scenes with different feature levels to exist. First step towards dynamic mobile preview in the editor.
#ttp 331829 - Mobile Preview in Editor
#proj Engine
#branch UE4

#summary First pass of changes to remove GRHIFeatureLevel, allowing for multiple scenes with different feature levels to exist. First step towards dynamic mobile preview in the editor.

#change Added GMaxRHIFeature level which contains the highest supported feature level on this machine
#change Added a cvar "r.FeatureLevelPreview" which, when set to 1, enables a feature level selection in the quick settings menu. Not wired up to anything at the minute
#change Added a feature level variable to FScene, which is currently initialized to whatever GRHIFeatureLevel is. Accessed with GetFeatureLevel()
#change Added a helper accessor GetFeatureLevel() to FSceneView which gets the feature level from the relevant scene. Purely to reduce the amount of typing needed to get to a feature level
#change Many changes across the renderer to try and read the current feature level from the view or scene. Not everything is done yet, but this is almost all of the "easy" stuff. As there is still just a global feature level in the engine, nothing should change.

[CL 2066905 by Graeme Thornton in Main branch]
2014-05-08 09:05:50 -04:00
Jamie Dale
d628c5477e You can now use an actor picker to choose which actor to attach to
TTP# 279062 - ROCKET: TASK: PUNTABLE: Viewports: "Drag to Attach" feature

Moved FEdModePicker out of the Private section of the PropertyEditor module, and into its own module so that it can be shared between the PropertyEditor and LevelEditor modules. Also renamed it to FEdModeActorPicker.

Added a way to filter FEdModeActorPicker by checking the actor directly (this complements the class type check it already had).

Added an actor picker button next to the scene outliner in the "Attach To" menu on actors. This is also mapped to the Alt+A command.

Built and tested in unity and non-unity.

ReviewedBy Thomas.Sarkanen, Max.Preussner

[CL 2060928 by Jamie Dale in Main branch]
2014-05-01 06:52:47 -04:00
Andrew Brown
b145f1d79e 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
Marc Audy
2b32ba4197 Fix issues with using mouse for touch and Simulate mode
TTP #332927

[CL 2054475 by Marc Audy in Main branch]
2014-04-23 20:18:25 -04:00
Chris Wood
59cfc2f249 #ttp 323891 - EDITOR: Viewport Layouts: Please add a 1x1 viewport preset layout option
#branch UE4
#proj Editor.LevelEditor
#summary Added 1x1 viewport layout and tidied the margins in the layout menu

#add Added FLevelViewportLayout::bIsMaximizeSupported and public getter IsMaximizeSupported(). This is set on the new one-pane layout to block the maximize command/button.
#add LevelViewportConfigurationNames::OnePane - new named layout config.
#add FLevelViewportCommands::ViewportConfig_OnePane - new layout command.
#change FLevelViewportLayout::InitCommonLayoutFromString() - will never start a layout maximised if bIsMaximizeSupported is false.
#change FLevelViewportLayout::SaveCommonLayoutString() - will never save a layout maximised if bIsMaximizeSupported is false.
#change FLevelViewportLayout::MaximizeViewport() - checks that bIsMaximizeSupported is true as it should never be called on a layout that doesn't support it.
#add SlateEditorStyle - added brushes for one pane option in the viewport layout menu.
#add SLevelViewportToolBar::GenerateViewportConfigsMenu() - new section for one pane layouts with the one pane button in it.
#change  SLevelViewportToolBar::GenerateViewportConfigsMenu() - fixed the layout margins by setting the label visibility to collapsed instead of passing an empty string as the label.
#add Binding new ViewportConfig_OnePane command SLevelViewport::BindViewCommands to OnSetViewportConfiguration().
#change SLevelViewport::GetMaximizeToggleVisibility() & OnToggleMaximize - check IsMaximizeSupported() on the parent layout and always collapses the maximize button when it isn't supported.
#add FLevelViewportTabContent::ConstructViewportLayoutByTypeName() - added LevelViewportConfigurationNames::OnePane.
#add New icon image for one pane button in the menu - ViewportLayout_OnePane.png
#add New layout class FLevelViewportLayoutOnePane - based on other layouts but simpler because it only contains one pane and therefore no splitters.

reviewedby Thomas.Sarkanen, Max.Preussner

[CL 2048729 by Chris Wood in Main branch]
2014-04-23 19:20:45 -04:00
Andrew Rodham
3f8bb98d1c Added ability to extend the default context menu in the scene outliner
This tidys up some logic and duplication between the level editor viewport context menu and the scene outliner, since the level viewport menu can now extend the scene outliner, rather than having to duplicate its functionality. The ability to completely override the menu still remains by way of an override delegate.
#reviewedby Matt.Kuhlenschmidt

[CL 2038566 by Andrew Rodham in Main branch]
2014-04-23 16:39:22 -04:00