documentation pass for modular viewport camera controller
Signed-off-by: hultonha <hultonha@amazon.co.uk>
This commit is contained in:
+41
-25
@@ -16,18 +16,21 @@
|
||||
|
||||
namespace AtomToolsFramework
|
||||
{
|
||||
class ModernViewportCameraControllerInstance;
|
||||
class ModularViewportCameraControllerInstance;
|
||||
|
||||
//! Builder class to create and configure a ModularViewportCameraControllerInstance.
|
||||
class ModularViewportCameraController
|
||||
: public AzFramework::MultiViewportController<
|
||||
ModernViewportCameraControllerInstance, AzFramework::ViewportControllerPriority::DispatchToAllPriorities>
|
||||
ModularViewportCameraControllerInstance,
|
||||
AzFramework::ViewportControllerPriority::DispatchToAllPriorities>
|
||||
{
|
||||
public:
|
||||
using CameraListBuilder = AZStd::function<void(AzFramework::Cameras&)>;
|
||||
using CameraPropsBuilder = AZStd::function<void(AzFramework::CameraProps&)>;
|
||||
|
||||
//! Sets the camera list builder callback used to populate new ModernViewportCameraControllerInstances
|
||||
//! Sets the camera list builder callback used to populate new ModularViewportCameraControllerInstances
|
||||
void SetCameraListBuilderCallback(const CameraListBuilder& builder);
|
||||
//! Sets the camera props builder callback used to populate new ModernViewportCameraControllerInstances
|
||||
//! Sets the camera props builder callback used to populate new ModularViewportCameraControllerInstances
|
||||
void SetCameraPropsBuilderCallback(const CameraPropsBuilder& builder);
|
||||
//! Sets up a camera list based on this controller's CameraListBuilderCallback
|
||||
void SetupCameras(AzFramework::Cameras& cameras);
|
||||
@@ -35,18 +38,22 @@ namespace AtomToolsFramework
|
||||
void SetupCameraProperies(AzFramework::CameraProps& cameraProps);
|
||||
|
||||
private:
|
||||
CameraListBuilder m_cameraListBuilder;
|
||||
CameraPropsBuilder m_cameraPropsBuilder;
|
||||
CameraListBuilder
|
||||
m_cameraListBuilder; //!< Builder to generate a list of CameraInputs to run in the ModularViewportCameraControllerInstance.
|
||||
CameraPropsBuilder m_cameraPropsBuilder; //!< Builder to define custom camera properties to use for things such as rotate and
|
||||
//!< translate interpolation.
|
||||
};
|
||||
|
||||
class ModernViewportCameraControllerInstance final
|
||||
: public AzFramework::MultiViewportControllerInstanceInterface<ModularViewportCameraController>,
|
||||
public ModularViewportCameraControllerRequestBus::Handler,
|
||||
private AzFramework::ViewportDebugDisplayEventBus::Handler
|
||||
//! A customizable camera controller than can be configured to a run varying set of CameraInput instances.
|
||||
//! The controller can also be animated from its current transform to a new translation and orientation.
|
||||
class ModularViewportCameraControllerInstance final
|
||||
: public AzFramework::MultiViewportControllerInstanceInterface<ModularViewportCameraController>
|
||||
, public ModularViewportCameraControllerRequestBus::Handler
|
||||
, private AzFramework::ViewportDebugDisplayEventBus::Handler
|
||||
{
|
||||
public:
|
||||
explicit ModernViewportCameraControllerInstance(AzFramework::ViewportId viewportId, ModularViewportCameraController* controller);
|
||||
~ModernViewportCameraControllerInstance() override;
|
||||
explicit ModularViewportCameraControllerInstance(AzFramework::ViewportId viewportId, ModularViewportCameraController* controller);
|
||||
~ModularViewportCameraControllerInstance() override;
|
||||
|
||||
// MultiViewportControllerInstanceInterface overrides ...
|
||||
bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override;
|
||||
@@ -60,25 +67,34 @@ namespace AtomToolsFramework
|
||||
// AzFramework::ViewportDebugDisplayEventBus overrides ...
|
||||
void DisplayViewport(const AzFramework::ViewportInfo& viewportInfo, AzFramework::DebugDisplayRequests& debugDisplay) override;
|
||||
|
||||
//! The current mode the camera controller is in.
|
||||
enum class CameraMode
|
||||
{
|
||||
Control,
|
||||
Animation
|
||||
Control, //!< The camera is being driven by user input.
|
||||
Animation //!< The camera is being animated (interpolated) from one transform to another.
|
||||
};
|
||||
|
||||
AzFramework::Camera m_camera;
|
||||
AzFramework::Camera m_targetCamera;
|
||||
AzFramework::CameraSystem m_cameraSystem;
|
||||
AzFramework::CameraProps m_cameraProps;
|
||||
//! Encapsulates an animation (interpolation) between two transforms.
|
||||
struct CameraAnimation
|
||||
{
|
||||
AZ::Transform m_transformStart =
|
||||
AZ::Transform::CreateIdentity(); //!< The transform of the camera at the start of the animation.
|
||||
AZ::Transform m_transformEnd = AZ::Transform::CreateIdentity(); //!< The transform of the camera at the end of the animation.
|
||||
float m_animationT = 0.0f; //!< The interpolation amount between the start and end transforms (in the range 0.0-1.0).
|
||||
};
|
||||
|
||||
AZ::Transform m_transformStart = AZ::Transform::CreateIdentity();
|
||||
AZ::Transform m_transformEnd = AZ::Transform::CreateIdentity();
|
||||
float m_animationT = 0.0f;
|
||||
CameraMode m_cameraMode = CameraMode::Control;
|
||||
AzFramework::Camera m_camera; //!< The current camera state (pitch/yaw/position/look-distance).
|
||||
AzFramework::Camera m_targetCamera; //!< The target (next) camera state that m_camera is catching up to.
|
||||
AzFramework::CameraSystem m_cameraSystem; //!< The camera system responsible for managing all CameraInputs.
|
||||
AzFramework::CameraProps m_cameraProps; //!< Camera properties to control rotate and translate smoothness.
|
||||
|
||||
CameraAnimation m_cameraAnimation; //!< Camera animation state (used during CameraMode::Animation).
|
||||
CameraMode m_cameraMode = CameraMode::Control; //!< The current mode the camera is operating in.
|
||||
AZStd::optional<AZ::Vector3> m_lookAtAfterInterpolation; //!< The look at point after an interpolation has finished.
|
||||
//!< Will be cleared when the view changes (camera looks away).
|
||||
bool m_updatingTransform = false;
|
||||
|
||||
AZ::RPI::ViewportContext::MatrixChangedEvent::Handler m_cameraViewMatrixChangeHandler;
|
||||
bool m_updatingTransformInternally =
|
||||
false; //!< Flag to prevent circular updates of the camera transform (while the viewport transform is being updated internally).
|
||||
AZ::RPI::ViewportContext::MatrixChangedEvent::Handler
|
||||
m_cameraViewMatrixChangeHandler; //!< Listen for camera view changes outside of the camera controller.
|
||||
};
|
||||
} // namespace AtomToolsFramework
|
||||
|
||||
Reference in New Issue
Block a user