approximative cam movement
This commit is contained in:
@@ -26,7 +26,7 @@ struct Camera {
|
|||||||
class Renderer {
|
class Renderer {
|
||||||
public:
|
public:
|
||||||
static constexpr float m_AnimationSpeed = 2.0f;
|
static constexpr float m_AnimationSpeed = 2.0f;
|
||||||
static constexpr float m_MouseSensitivity = 100.0f;
|
static constexpr float m_MouseSensitivity = 200.0f;
|
||||||
|
|
||||||
struct Model {
|
struct Model {
|
||||||
GL::VertexArray* vao;
|
GL::VertexArray* vao;
|
||||||
@@ -55,6 +55,7 @@ public:
|
|||||||
void RenderModel(const Model& model);
|
void RenderModel(const Model& model);
|
||||||
|
|
||||||
void SetZoom(float zoom);
|
void SetZoom(float zoom);
|
||||||
|
void SetCamAngularMovement(const Vec2f& mov);
|
||||||
void SetCamMovement(const Vec2f& mov);
|
void SetCamMovement(const Vec2f& mov);
|
||||||
void SetCamLook(const Vec2f& worldPos);
|
void SetCamLook(const Vec2f& worldPos);
|
||||||
|
|
||||||
|
|||||||
@@ -92,12 +92,18 @@ void Renderer::SetZoom(float zoom) {
|
|||||||
SetCamLook(m_Camera.CamLook);
|
SetCamLook(m_Camera.CamLook);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::SetCamMovement(const Vec2f& mov) {
|
void Renderer::SetCamAngularMovement(const Vec2f& mov) {
|
||||||
m_Camera.m_Pitch = std::clamp(m_Camera.m_Pitch - mov.y / m_MouseSensitivity, -PI / 2.0f + 0.0000001f, -PI / 12.0f );
|
m_Camera.m_Pitch = std::clamp(m_Camera.m_Pitch - mov.y / m_MouseSensitivity, -PI / 2.0f + 0.0000001f, -PI / 12.0f );
|
||||||
m_Camera.m_Yaw += mov.x / m_MouseSensitivity;
|
m_Camera.m_Yaw += mov.x / m_MouseSensitivity;
|
||||||
SetCamLook(m_Camera.CamLook);
|
SetCamLook(m_Camera.CamLook);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Renderer::SetCamMovement(const Vec2f& mov) {
|
||||||
|
Vec2f cursor = {static_cast<float>(m_WindowSize.x) / 2.0f - mov.x, static_cast<float>(m_WindowSize.y) / 2.0f - mov.y};
|
||||||
|
Vec2f worldMovement = GetCursorWorldPos(cursor, m_WindowSize.x, m_WindowSize.y);
|
||||||
|
SetCamLook(worldMovement);
|
||||||
|
}
|
||||||
|
|
||||||
void Renderer::SetCamPos(const Vec3f& newPos) {
|
void Renderer::SetCamPos(const Vec3f& newPos) {
|
||||||
|
|
||||||
Vec3f front = {
|
Vec3f front = {
|
||||||
|
|||||||
@@ -48,15 +48,25 @@ void WorldRenderer::UpdateCursorPos() {
|
|||||||
void WorldRenderer::Update() {
|
void WorldRenderer::Update() {
|
||||||
if (m_WorldVao == nullptr)
|
if (m_WorldVao == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
|
|
||||||
if (io.MouseDown[0] && !ImGui::IsAnyItemActive() && !ImGui::IsAnyItemHovered()) {
|
if (io.MouseDown[0] && !ImGui::IsAnyItemActive() && !ImGui::IsAnyItemHovered()) {
|
||||||
ImVec2 mouseDelta = ImGui::GetIO().MouseDelta;
|
ImVec2 mouseDelta = ImGui::GetIO().MouseDelta;
|
||||||
MoveCam(mouseDelta.x, mouseDelta.y);
|
m_Renderer->SetCamMovement({ mouseDelta.x, mouseDelta.y });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (io.MouseDown[1] && !ImGui::IsAnyItemActive() && !ImGui::IsAnyItemHovered()) {
|
||||||
|
ImVec2 mouseDelta = ImGui::GetIO().MouseDelta;
|
||||||
|
m_Renderer->SetCamAngularMovement({ mouseDelta.x, mouseDelta.y });
|
||||||
|
}
|
||||||
|
|
||||||
if (io.MouseWheel != 0) {
|
if (io.MouseWheel != 0) {
|
||||||
ChangeZoom(io.MouseWheel);
|
ChangeZoom(io.MouseWheel);
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateCursorPos();
|
UpdateCursorPos();
|
||||||
|
|
||||||
if (ImGui::IsMouseClicked(0)) {
|
if (ImGui::IsMouseClicked(0)) {
|
||||||
if (!m_TowerUpgradePopup->IsPopupOpened()) {
|
if (!m_TowerUpgradePopup->IsPopupOpened()) {
|
||||||
m_HoldCursorPos = { io.MousePos.x, io.MousePos.y };
|
m_HoldCursorPos = { io.MousePos.x, io.MousePos.y };
|
||||||
@@ -136,7 +146,7 @@ void WorldRenderer::RenderTooltips() const {
|
|||||||
void WorldRenderer::MoveCam(float relativeX, float relativeY) {
|
void WorldRenderer::MoveCam(float relativeX, float relativeY) {
|
||||||
if (m_WorldVao == nullptr)
|
if (m_WorldVao == nullptr)
|
||||||
return;
|
return;
|
||||||
m_Renderer->SetCamMovement({ relativeX, relativeY });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldRenderer::ChangeZoom(float zoomStep) {
|
void WorldRenderer::ChangeZoom(float zoomStep) {
|
||||||
@@ -144,7 +154,6 @@ void WorldRenderer::ChangeZoom(float zoomStep) {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
m_Renderer->SetZoom(zoomStep);
|
m_Renderer->SetZoom(zoomStep);
|
||||||
m_Renderer->SetCamMovement({});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldRenderer::Click() {
|
void WorldRenderer::Click() {
|
||||||
|
|||||||
Reference in New Issue
Block a user