17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-10-17 16:49:21 +02:00
Files
maszyna/input/editormouseinput.cpp
maj00r ce5ee288ff fix the clang CI build
Every module unit now includes the standard headers it uses. Declarations
reaching a unit only through an imported module's global module fragment
are reachable but not visible, so ADL misses the free operators older
libstdc++ declares beside a type - reproduced on ubuntu 24.04 (libstdc++
13), where gl/vao.cpp could not compare vector iterators.

Also drops a stale editor/editorSettings.hpp from the MSVC source list,
which broke the Windows configure step, silences the deliberate
include-in-purview warning in the glm wrapper, and removes GCC support:
clang or MSVC only.
2026-09-09 22:52:28 +02:00

72 lines
2.0 KiB
C++

module;
#include <array>
#include <GLFW/glfw3.h>
module eu07.input.editormouseinput;
import eu07.glm;
/*
This Source Code Form is subject to the
terms of the Mozilla Public License, v.
2.0. If a copy of the MPL was not
distributed with this file, You can
obtain one at
http://mozilla.org/MPL/2.0/.
*/
bool
editormouse_input::init() {
return true;
}
void
editormouse_input::position( double Horizontal, double Vertical ) {
if( false == m_pickmodepanning ) {
// even if the view panning isn't active we capture the cursor position in case it does get activated
m_cursorposition.x = Horizontal;
m_cursorposition.y = Vertical;
return;
}
if( true == m_pickmodepanning_resync ) {
// panning just started (cursor may have been grabbed/hidden); reset the reference so the
// first frame doesn't produce a large, jarring camera jump
m_cursorposition.x = Horizontal;
m_cursorposition.y = Vertical;
m_pickmodepanning_resync = false;
return;
}
glm::dvec2 cursorposition { Horizontal, Vertical };
auto const viewoffset = cursorposition - m_cursorposition;
m_relay.post(
user_command::viewturn,
viewoffset.x,
viewoffset.y,
GLFW_PRESS,
// TODO: pass correct entity id once the missing systems are in place
0 );
m_cursorposition = cursorposition;
}
void
editormouse_input::button( int const Button, int const Action ) {
// store key state
if( Button >= 0 ) {
m_buttons[ Button ] = Action;
}
// right button controls panning
if( Button == GLFW_MOUSE_BUTTON_RIGHT ) {
bool const panning = Action == GLFW_PRESS;
// when panning starts, request a one-frame resync so toggling the cursor grab doesn't jerk the view
if( panning && false == m_pickmodepanning ) {
m_pickmodepanning_resync = true;
}
m_pickmodepanning = panning;
}
}
//---------------------------------------------------------------------------