Files
UnrealEngineUWP/Engine/Source/Editor/ViewportInteraction/ViewportInteractionInputProcessor.cpp
Mike Fricker f177c0a46b ViewportInteraction refactoring; miscellaneous VREditor improvements
- This merge contains various changes to ViewportInteraction and VR Editor to make things more extensible
       - Some changes are from Yannick's recent shelved refactoring work, that I've modified and improved upon
       - EditorWorldManager is gone and replaced by EditorWorldExtensionManager
       - EditorWorldExtensions are sort of like a more modern version of 'FEdMode', but still a work in progress
       - Cleaned up access to VREditorMode from other modules, forcing systems to go through EditorWorldExtensions

- Overhauled how transforming objects works with world interaction
       - Viewport interactors can now be used to move objects other than actors around (by implementing an UViewportTransformer, and a FViewportTransformable)
       - Undo/Redo now works better with inertial transformation!  The transaction only ends when objects finally come to rest.
       - Some initial support for 'grabber sphere' interactor methods has been implemented (not used yet)
       - Viewport interaction input events now receive the viewport being interacted through
       - Viewport interaction hover events no longer get a viewport client (because they must be designed to work any number of viewports.)

NOTE: This introduces UBT warnings about cyclic module dependencies.  We'll have to address this in a different changelist.

Other changes:
- The active Viewport Interaction 'gizmo mode' is now tied directly to the editor's normal gizmo mode.  They share the same state.
- New console variable 'VI.UseTransientActors' can be turned off to force editor actors to be created non-transient to make it easier to debug
- New console variable 'VI.DragTranslationVelocityStopEpsilon' sets the speed at which transformables will stop have inertia applied to them
- Fixed cyclic dependencies with ViewportInteraction and VREditor modules not being tagged properly for UBT
- Fixed some issues with transform gizmos not getting release events
- Various methods that should have been const were made const
- Eliminated duplicate implementation of SpawnTransientSceneActor and DestroyTransientActor; made it static
- UnrealEd no longer directly depends on VREditor and ViewportInteraction modules
- Engine: AActor::SetIsTemporarilyHiddenInEditor no longer does any work if the object's hidden state didn't change
- Slate: Input preprocessor (if bound) now also gets a chance at mouse button down and up events

#codereview yannick.lange,lauren.ridge
#rb various

[CL 3245240 by Mike Fricker in Dev-VREditor branch]
2017-01-03 14:38:17 -05:00

42 lines
1.5 KiB
C++

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#include "ViewportInteractionInputProcessor.h"
#include "Input/Events.h"
#include "Misc/App.h"
#include "ViewportWorldInteractionManager.h"
FViewportInteractionInputProcessor::FViewportInteractionInputProcessor( FViewportWorldInteractionManager* InWorldInteractionManager )
: WorldInteractionManager( InWorldInteractionManager )
{
}
FViewportInteractionInputProcessor::~FViewportInteractionInputProcessor()
{
WorldInteractionManager = nullptr;
}
void FViewportInteractionInputProcessor::Tick( const float DeltaTime, FSlateApplication& SlateApp, TSharedRef<ICursor> Cursor )
{
}
bool FViewportInteractionInputProcessor::HandleKeyDownEvent( FSlateApplication& SlateApp, const FKeyEvent& InKeyEvent )
{
return WorldInteractionManager->PreprocessedInputKey( InKeyEvent.GetKey(), InKeyEvent.IsRepeat() ? IE_Repeat : IE_Pressed );
}
bool FViewportInteractionInputProcessor::HandleKeyUpEvent( FSlateApplication& SlateApp, const FKeyEvent& InKeyEvent )
{
return WorldInteractionManager->PreprocessedInputKey( InKeyEvent.GetKey(), IE_Released );
}
bool FViewportInteractionInputProcessor::HandleAnalogInputEvent( FSlateApplication& SlateApp, const FAnalogInputEvent& InAnalogInputEvent )
{
return WorldInteractionManager->PreprocessedInputAxis( InAnalogInputEvent.GetUserIndex(), InAnalogInputEvent.GetKey(), InAnalogInputEvent.GetAnalogValue(), FApp::GetDeltaTime() );
}
bool FViewportInteractionInputProcessor::HandleMouseMoveEvent( FSlateApplication& SlateApp, const FPointerEvent& MouseEvent )
{
return false;
}