refactored from main to canvas.h - basic functionality working

This commit is contained in:
Sebastian
2024-11-15 01:49:10 +01:00
parent ab34081dbb
commit 9cccbab703
6 changed files with 141 additions and 64 deletions
+62
View File
@@ -1,5 +1,6 @@
#pragma once
#include "raylib.h"
#include "vmath.h"
#include <memory>
@@ -18,6 +19,18 @@ namespace VISEQ::APP{
enum InteractionState {HOVER_CANVAS, HOVER_NODE, HOVER_CONNECTOR, ADD_NODES_MENU, DRAG_NODE, CONNECT_NODE, DRAW_SELECTION, SCALE_SELECTION, DELETE_SELECTED_NODES, COPY_SELECTED_NODES, PASTE_SELECTED_NODES};
struct MouseState{
bool down = false;
bool clicked = false;
bool released = false;
};
struct ModifierKeys{
bool ctrl = false;
bool shift = false;
bool alt = false;
};
class State{
public:
State(){}
@@ -33,7 +46,56 @@ namespace VISEQ::APP{
InteractionState istate = HOVER_CANVAS;
int node_mode = 0;
MouseState mouse_left;
MouseState mouse_right;
MouseState mouse_middle;
ModifierKeys keys_down;
ModifierKeys keys_pressed;
ModifierKeys keys_released;
Vec2Df mouse_delta;
void update(Camera2D camera){
mouse_delta = {GetMouseDelta().x, GetMouseDelta().y};
settings.speed = (settings.grid * 16.0f) * (settings.bpm / 120.f);
Vector2 mp = GetScreenToWorld2D(GetMousePosition(), camera);
Vec2Df mouse_pos = {(float)mp.x, (float)mp.y};
mouse_left.down = IsMouseButtonDown(MOUSE_BUTTON_LEFT);
mouse_left.clicked = IsMouseButtonPressed(MOUSE_BUTTON_LEFT);
mouse_left.released = IsMouseButtonReleased(MOUSE_BUTTON_LEFT);
mouse_right.down = IsMouseButtonDown(MOUSE_BUTTON_RIGHT);
mouse_right.clicked = IsMouseButtonPressed(MOUSE_BUTTON_RIGHT);
mouse_right.released = IsMouseButtonReleased(MOUSE_BUTTON_RIGHT);
keys_down.ctrl = IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_RIGHT_CONTROL);
keys_down.shift = IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT);
keys_down.alt = IsKeyDown(KEY_LEFT_ALT) || IsKeyDown(KEY_RIGHT_ALT);
keys_pressed.ctrl = IsKeyPressed(KEY_LEFT_CONTROL) || IsKeyPressed(KEY_RIGHT_CONTROL);
keys_pressed.shift = IsKeyPressed(KEY_LEFT_SHIFT) || IsKeyPressed(KEY_RIGHT_SHIFT);
keys_pressed.alt = IsKeyPressed(KEY_LEFT_ALT) || IsKeyPressed(KEY_RIGHT_ALT);
keys_released.ctrl = IsKeyReleased(KEY_LEFT_CONTROL) || IsKeyReleased(KEY_RIGHT_CONTROL);
keys_released.shift = IsKeyReleased(KEY_LEFT_SHIFT) || IsKeyReleased(KEY_RIGHT_SHIFT);
keys_released.alt = IsKeyReleased(KEY_LEFT_ALT) || IsKeyReleased(KEY_RIGHT_ALT);
screen_mouse = mouse_pos;
raw_mouse = {GetMousePosition().x, GetMousePosition().y};
mod_mouse = mouse_pos;
if(keys_down.ctrl) {
mod_mouse.x = round(mouse_pos.x / settings.grid) * settings.grid;
mod_mouse.y = round(mouse_pos.y / settings.grid) * settings.grid;
}
}
inline static std::shared_ptr<State> instance;
static std::shared_ptr<State> get() {
if(!instance){