implement ray casting events

This commit is contained in:
ohyzha
2024-11-04 18:22:40 +02:00
parent 4956884d5f
commit 7febb370a8
9 changed files with 176 additions and 5 deletions

View File

@@ -0,0 +1,40 @@
#include "CameraController.hpp"
#include "Scene/Camera.hpp"
#include "Input/InputDeviceMouse.hpp"
#include "Input/InputDeviceController.hpp"
#include "Input/InputManager.hpp"
#include "Input/Touch/InputDeviceTouch.hpp"
namespace OpenVulkano
{
CameraController::CameraController(Scene::Camera* camera)
{
m_inputManager = Input::InputManager::GetInstance();
m_camera = camera;
m_actionCastRay = m_inputManager->GetAction("cast ray");
m_actionCastRay->BindKey(Input::InputKey::Mouse::BUTTON_1);
// BIND FOR TOUCH
m_actionCastRay->BindKey(Input::InputKey::Touch::AXIS_TAP_X);
m_actionCastRay->BindKey(Input::InputKey::Touch::AXIS_TAP_X);
}
void CameraController::Tick()
{
Input::InputDeviceMouse* mouse = static_cast<Input::InputDeviceMouse*>(m_inputManager->GetDevice(Input::InputDeviceType::MOUSE));
Input::InputDeviceTouch* touch = static_cast<Input::InputDeviceTouch*>(m_inputManager->GetDevice(Input::InputDeviceType::TOUCH));
if (m_camera->CanCastRay() && m_inputManager->GetButton(m_actionCastRay))
{
if (mouse && mouse->GetButtonDown(Input::InputKey::Mouse::BUTTON_1))
{
Math::Vector2i pos = mouse->GetMousePosition();
mouse->onLeftButtonClick.NotifyAll(pos);
}
else if (touch)
{
Math::Vector2i pos = touch->GetTapPosition();
touch->OnTap.NotifyAll(pos);
}
}
}
}

View File

@@ -11,6 +11,12 @@
namespace OpenVulkano
{
namespace Input
{
class InputAction;
class InputManager;
}
namespace Scene
{
class Camera;
@@ -18,22 +24,26 @@ namespace OpenVulkano
class CameraController : public ITickable, ICloseable
{
Scene::Camera* m_camera;
protected:
CameraController(Scene::Camera* camera = nullptr)
: m_camera(camera)
{}
Scene::Camera* m_camera;
Input::InputAction* m_actionCastRay;
Input::InputManager* m_inputManager;
CameraController(Scene::Camera* camera = nullptr);
public:
~CameraController() override = default;
void Tick() override;
virtual void Init(Scene::Camera* camera) { m_camera = camera; }
void Close() override { m_camera = nullptr; }
void SetCamera(Scene::Camera* camera) { m_camera = camera; }
Input::InputAction* GetActionCastRay() { return m_actionCastRay; }
Scene::Camera* GetCamera() { return m_camera; }
virtual void SetActive() {}

View File

@@ -8,6 +8,7 @@
#include "Base/FrameMetadata.hpp"
#include "Scene/Camera.hpp"
#include "Input/InputManager.hpp"
#include "Input/InputDeviceMouse.hpp"
#include "Input/InputKey.hpp"
namespace OpenVulkano
@@ -39,6 +40,8 @@ namespace OpenVulkano
vec *= m_boostFactor;
}
CameraController::Tick();
m_yaw -= input->GetAxis(m_actionLookSide) * timeScale / 2.0f;
m_pitch -= input->GetAxis(m_actionLookUp) * timeScale / 2.0f;
m_pitch = std::min(1.4f, std::max(-1.4f, m_pitch));
@@ -48,6 +51,7 @@ namespace OpenVulkano
Math::Matrix4f camTransformation = Math::Utils::toMat4(rot);
camTransformation[3] = Math::Vector4f(m_position, 1);
GetCamera()->SetMatrix(camTransformation);
//CameraController::Tick();
CURRENT_FRAME.needsRedraw = true;
}