Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
PrefabCanvas.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <memory>
5#include <map>
6#include "./../../vector.h"
8#include "../../Source/third_party/imgui/imgui.h"
9
10namespace Olympe
11{
12 // Forward declarations
13 class ComponentNodeRenderer;
14 class ICanvasEditor; // NEW: Standardized canvas interface
15
16 // Enum for canvas interaction modes
24
26 {
27 public:
30
32 void SetCanvasEditor(ICanvasEditor* canvasEditor); // NEW: Set the standardized interface
34 void Render();
35 void Update(float deltaTime);
36
37 // Input handling
38 void OnMouseMove(float x, float y);
39 void OnMouseDown(int button, float x, float y);
40 void OnMouseUp(int button, float x, float y);
41 void OnMouseScroll(float delta);
42 void OnKeyDown(int keyCode);
43 void OnKeyUp(int keyCode);
44
45 // Canvas manipulation
46 void PanCanvas(float deltaX, float deltaY);
47 void ZoomCanvas(float zoomDelta, float centerX, float centerY);
48 void ResetView();
49 void FitToContent();
50
51 // Node interaction
52 NodeId GetNodeAtPosition(float x, float y);
53 void SelectNodeAt(float x, float y, bool addToSelection = false);
54 void SelectNodesInRectangle(const Vector& rectStart, const Vector& rectEnd, bool addToSelection = false);
55 void ClearSelection();
56 void SelectAll();
58 void AddComponentNode(const std::string& componentType, const std::string& componentName, float x, float y);
59 void AcceptComponentDropAtScreenPos(const std::string& componentType, const std::string& componentName, float screenX, float screenY);
60
61
62 // Connection interaction
66 bool IsCreatingConnection() const;
68
69 // Display properties
70 void SetGridEnabled(bool enabled);
71 bool IsGridEnabled() const;
72
73 void SetGridSpacing(float spacing);
74 float GetGridSpacing() const;
75
76 void SetShowDebugInfo(bool show);
77 bool GetShowDebugInfo() const;
78
79 void SetSnapToGrid(bool snap);
80 bool IsSnapToGridEnabled() const;
81
82 // Canvas state
83 Vector GetCanvasOffset() const;
84 void SetCanvasOffset(const Vector& offset);
85
86 float GetCanvasZoom() const;
87 void SetCanvasZoom(float zoom);
88
89 Vector ScreenToCanvas(float screenX, float screenY) const;
90 Vector CanvasToScreen(float canvasX, float canvasY) const;
91
92 // Get canvas screen position for coordinate transformations
94
95 // Interaction state
97 bool IsNodeDragging() const;
98 bool IsPanning() const;
99
100 private:
102 std::unique_ptr<ComponentNodeRenderer> m_renderer;
103 ICanvasEditor* m_canvasEditor = nullptr; // NEW: Reference to standardized canvas interface
104
105 // Canvas state - REMOVED: m_canvasZoom, m_canvasOffset (now managed by ICanvasEditor)
106 // Access via m_canvasEditor->GetZoom(), GetPan() instead
107 float m_gridSpacing = 50.0f;
108 bool m_showGrid = true;
109 bool m_showDebugInfo = false;
110 bool m_snapToGrid = true;
111
112 // Canvas screen position (stored for drag-drop context)
114
115 // Interaction state
121 bool m_ctrlPressed = false;
122 bool m_shiftPressed = false;
124
125 // Connection creation state
129
130 // Camera panning state
131 bool m_isPanning = false;
133
134 // Context menu state
137
138 // Connection context menu state
139 int m_hoveredConnectionIndex = -1; // Index in connections array, -1 if none
140 int m_contextMenuConnectionIndex = -1; // Index for connection context menu
143
144 // Rectangle selection state
148
149 // Utility methods
150 void UpdateNodePositions();
151 void HandleNodeDragStart(NodeId nodeId, float x, float y);
152 void HandleNodeDrag(float x, float y);
153 void HandleNodeDragEnd();
154 void HandleConnectionCreation(float x, float y);
155 void HandleConnectionEnd(float x, float y);
156 void HandlePanStart(float x, float y);
157 void HandlePan(float x, float y);
158 void SnapNodePositionToGrid(Vector& position);
159
160 // Rendering helpers
161 void RenderGrid();
162 void RenderNodes();
163 void RenderConnections();
166 void RenderDebugInfo();
167 void RenderSelectionBox();
169 void RenderContextMenu();
170 };
171
172} // namespace Olympe
173
ComponentTypeID GetComponentTypeID_Static()
Definition ECS_Entity.h:56
Abstract interface for canvas editors with unified pan/zoom/grid management.
void CompleteConnection(NodeId targetNodeId)
void Update(float deltaTime)
Vector m_contextMenuConnectionMousePos
void OnKeyUp(int keyCode)
EntityPrefabGraphDocument * GetDocument() const
void HandleNodeDragStart(NodeId nodeId, float x, float y)
ICanvasEditor * m_canvasEditor
void SetSnapToGrid(bool snap)
void HandlePanStart(float x, float y)
void SetShowDebugInfo(bool show)
bool IsCreatingConnection() const
bool GetShowDebugInfo() const
std::unique_ptr< ComponentNodeRenderer > m_renderer
bool IsNodeDragging() const
void AcceptComponentDropAtScreenPos(const std::string &componentType, const std::string &componentName, float screenX, float screenY)
void StartConnectionCreation(NodeId sourceNodeId)
void SelectNodesInRectangle(const Vector &rectStart, const Vector &rectEnd, bool addToSelection=false)
void HandleNodeDrag(float x, float y)
ImVec2 GetCanvasScreenPos() const
void SetCanvasOffset(const Vector &offset)
void SetGridEnabled(bool enabled)
float GetCanvasZoom() const
void HandleConnectionCreation(float x, float y)
void OnMouseUp(int button, float x, float y)
void SelectNodeAt(float x, float y, bool addToSelection=false)
void OnMouseMove(float x, float y)
void SnapNodePositionToGrid(Vector &position)
bool IsGridEnabled() const
void Initialize(EntityPrefabGraphDocument *document)
void SetCanvasZoom(float zoom)
Vector GetCanvasOffset() const
Vector ScreenToCanvas(float screenX, float screenY) const
void HandlePan(float x, float y)
EntityPrefabGraphDocument * m_document
bool IsSnapToGridEnabled() const
CanvasInteractionMode m_interactionMode
void HandleConnectionEnd(float x, float y)
void SetGridSpacing(float spacing)
void OnMouseDown(int button, float x, float y)
Vector CanvasToScreen(float canvasX, float canvasY) const
void AddComponentNode(const std::string &componentType, const std::string &componentName, float x, float y)
CanvasInteractionMode GetInteractionMode() const
void SetCanvasEditor(ICanvasEditor *canvasEditor)
void OnKeyDown(int keyCode)
void ZoomCanvas(float zoomDelta, float centerX, float centerY)
void PanCanvas(float deltaX, float deltaY)
NodeId GetNodeAtPosition(float x, float y)
float GetGridSpacing() const
NodeId GetConnectionSourceNode() const
void OnMouseScroll(float delta)
< Provides AssetID and INVALID_ASSET_ID
uint32_t NodeId
CanvasInteractionMode
const NodeId InvalidNodeId