Give MultiViewportControllerInstances a pointer to their parent controller, to allow state management
This commit is contained in:
@@ -48,21 +48,28 @@ namespace AzFramework
|
||||
};
|
||||
|
||||
//! The interface used by MultiViewportController to manage individual instances.
|
||||
template <class TController>
|
||||
class MultiViewportControllerInstanceInterface
|
||||
{
|
||||
public:
|
||||
explicit MultiViewportControllerInstanceInterface(ViewportId viewport)
|
||||
using ControllerType = TController;
|
||||
|
||||
explicit MultiViewportControllerInstanceInterface(ViewportId viewport, TController* controller)
|
||||
: m_viewportId(viewport)
|
||||
, m_controller(controller)
|
||||
{
|
||||
}
|
||||
|
||||
ViewportId GetViewportId() const { return m_viewportId; }
|
||||
TController* GetController() { return m_controller; }
|
||||
const TController* GetController() const { return m_controller; }
|
||||
|
||||
virtual bool HandleInputChannelEvent([[maybe_unused]]const ViewportControllerInputEvent& event) { return false; }
|
||||
virtual void ResetInputChannels() {}
|
||||
virtual void UpdateViewport([[maybe_unused]]const ViewportControllerUpdateEvent& event) {}
|
||||
|
||||
private:
|
||||
TController* m_controller;
|
||||
ViewportId m_viewportId;
|
||||
};
|
||||
} //namespace AzFramework
|
||||
|
||||
@@ -17,8 +17,8 @@ namespace AzFramework
|
||||
MultiViewportController<TViewportControllerInstance, Priority>::~MultiViewportController()
|
||||
{
|
||||
static_assert(
|
||||
AZStd::is_constructible<TViewportControllerInstance, ViewportId>::value,
|
||||
"TViewportControllerInstance must implement a TViewportControllerInstance(ViewportId) constructor"
|
||||
AZStd::is_same<TViewportControllerInstance, decltype(TViewportControllerInstance(0, nullptr))>::value,
|
||||
"TViewportControllerInstance must implement a TViewportControllerInstance(ViewportId, ViewportController) constructor"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace AzFramework
|
||||
template <class TViewportControllerInstance, ViewportControllerPriority Priority>
|
||||
void MultiViewportController<TViewportControllerInstance, Priority>::RegisterViewportContext(ViewportId viewport)
|
||||
{
|
||||
m_instances[viewport] = AZStd::make_unique<TViewportControllerInstance>(viewport);
|
||||
m_instances[viewport] = AZStd::make_unique<TViewportControllerInstance>(viewport, static_cast<TViewportControllerInstance::ControllerType*>(this));
|
||||
}
|
||||
|
||||
template <class TViewportControllerInstance, ViewportControllerPriority Priority>
|
||||
|
||||
Reference in New Issue
Block a user