SpiecsEngine
 
Loading...
Searching...
No Matches

◆ OnTick()

void Spices::CameraController::OnTick ( TimeStep & ts)
overridevirtual

The interface inherited from NativeScriptComponent, which is called every engine loop frame. We implemented mainly camera control here, the reason is query input has better performance than event.

@breif Only update view while viewport is hovered.

@breif Only update view while viewport is hovered.

Reimplemented from Spices::NativeScriptComponent.

Definition at line 27 of file CameraController.cpp.

28 {
30
31 m_Camera->IncreaseStableFrames();
32
36 if (!SlateSystem::GetRegister()->GetViewPort()->IsHovered()) return;
37
39 {
40 const glm::vec2& mouse { Input::GetMouseX(), Input::GetMouseY() };
41 const glm::vec2 delta = (mouse - m_InitialMousePosition) * 0.003f;
43
45 {
46 MousePan(delta);
47 m_Camera->ResetStableFrames();
48 }
50 {
51 MouseRotate(delta);
52 m_Camera->ResetStableFrames();
53 }
55 {
56 MouseZoom(delta.y);
57 m_Camera->ResetStableFrames();
58 }
59
60 UpdateView();
61 }
62 }
#define SPICES_PROFILE_ZONE
std::shared_ptr< Camera > m_Camera
The camera smart pointer get from owner's camera component.
void MousePan(const glm::vec2 &delta)
Calculate Camera Drag.
void MouseZoom(const float &delta)
Calculate Camera Zoom.
void UpdateView() const
Setting camera transform component position. We already set rotation in MouseRotate().
glm::vec2 m_InitialMousePosition
The mouse position. Init with 0.
void MouseRotate(const glm::vec2 &delta) const
Calculate Camera Rotate.
static bool IsKeyPressed(const int &keycode)
Query If given Key is Pressed.
Definition Input.h:34
static float GetMouseY()
Query Mouse Y Position in Windows.
Definition Input.h:59
static float GetMouseX()
Query Mouse X Position in Windows.
Definition Input.h:53
static bool IsMouseButtonPressed(const int &button)
Query If given Mouse Button is Pressed.
Definition Input.h:41
static std::shared_ptr< SlateRegister > GetRegister()
Get slate register.
Definition SlateSystem.h:67

References Spices::Mouse::ButtonLeft, Spices::Mouse::ButtonMiddle, Spices::Mouse::ButtonRight, Spices::Input::IsKeyPressed(), Spices::Input::IsMouseButtonPressed(), Spices::Key::LeftAlt, and UpdateView().