Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
SelectionEffectRenderer.h
Go to the documentation of this file.
1#pragma once
2
3#include "../vector.h"
4#include "../third_party/imgui/imgui.h"
5
6namespace Olympe
7{
8 /**
9 * @brief Encapsule l'effet de sélection des nodes (glow + bordure épaisse)
10 *
11 * Fournit un système standardisé de rendu de sélection réutilisable
12 * dans tous les canvas (VisualScript, EntityPrefab, AIEditor, etc.)
13 *
14 * Usage:
15 * SelectionEffectRenderer renderer;
16 * renderer.SetGlowColor({0.0f, 0.8f, 1.0f});
17 * renderer.SetGlowAlpha(0.3f);
18 *
19 * // During node rendering
20 * if (node.selected) {
21 * renderer.RenderSelectionGlow(minScreen, maxScreen, canvasZoom, nodeScale);
22 * }
23 * renderer.RenderSelectionBorder(minScreen, maxScreen, nodeColor, baseWidth, canvasZoom);
24 */
26 {
27 public:
30
31 // ===== Glow Configuration =====
32
33 /// @brief Définit la couleur du glow de sélection
34 /// @param color Couleur RGB (valeurs 0.0-1.0)
35 /// @default {0.0f, 0.8f, 1.0f} (Cyan)
36 void SetGlowColor(const Vector& color) { m_glowColor = color; }
37 Vector GetGlowColor() const { return m_glowColor; }
38
39 /// @brief Définit l'alpha (transparence) du glow
40 /// @param alpha Valeur 0.0-1.0 (0=invisible, 1=opaque)
41 /// @default 0.3f
42 void SetGlowAlpha(float alpha) { m_glowAlpha = (alpha > 1.0f) ? 1.0f : (alpha < 0.0f) ? 0.0f : alpha; }
43 float GetGlowAlpha() const { return m_glowAlpha; }
44
45 /// @brief Définit la taille de base du glow (avant zoom/scale)
46 /// @param size Pixels non-zoomés
47 /// @default 4.0f
48 void SetBaseGlowSize(float size) { m_baseGlowSize = (size > 0.0f) ? size : 0.1f; }
49 float GetBaseGlowSize() const { return m_baseGlowSize; }
50
51 // ===== Border Configuration =====
52
53 /// @brief Définit le multiplicateur d'épaisseur de bordure
54 /// @param multiplier Épaisseur finale = baseWidth * multiplier
55 /// @default 2.0f (la bordure double quand sélectionné)
58
59 /// @brief Active/désactive l'effet de glow (utile pour performance)
60 /// @default true
61 void SetGlowEnabled(bool enabled) { m_glowEnabled = enabled; }
62 bool IsGlowEnabled() const { return m_glowEnabled; }
63
64 // ===== Rendering =====
65
66 /**
67 * @brief Dessine le glow de sélection (fond lumineux)
68 *
69 * Cette fonction doit être appelée AVANT de dessiner la boîte du node,
70 * pour que le glow apparaisse en arrière-plan.
71 *
72 * @param minScreen Position écran minimale (coin haut-gauche)
73 * @param maxScreen Position écran maximale (coin bas-droit)
74 * @param canvasZoom Niveau de zoom du canvas
75 * @param nodeScale Multiplicateur d'échelle du node (défaut 1.0f)
76 * @param cornerRadius Rayon des coins arrondis
77 */
79 const ImVec2& minScreen,
80 const ImVec2& maxScreen,
81 float canvasZoom = 1.0f,
82 float nodeScale = 1.0f,
83 float cornerRadius = 5.0f
84 ) const;
85
86 /**
87 * @brief Rend la bordure de sélection (épaissie)
88 *
89 * Appeler APRÈS la boîte principale du node.
90 * Automatiquement multiplie l'épaisseur de base par le multiplicateur.
91 *
92 * @param minScreen Position écran minimale
93 * @param maxScreen Position écran maximale
94 * @param borderColor Couleur de la bordure en ImU32
95 * @param baseWidth Épaisseur de base (avant multiplication)
96 * @param canvasZoom Niveau de zoom du canvas
97 * @param cornerRadius Rayon des coins arrondis
98 */
100 const ImVec2& minScreen,
101 const ImVec2& maxScreen,
103 float baseWidth,
104 float canvasZoom = 1.0f,
105 float cornerRadius = 5.0f
106 ) const;
107
108 /**
109 * @brief Rend l'ensemble de l'effet de sélection (glow + bordure)
110 *
111 * Fonction de commodité qui appelle RenderSelectionGlow et RenderSelectionBorder.
112 * À utiliser si vous voulez contrôler totalement le rendu.
113 *
114 * @param minScreen Position écran minimale
115 * @param maxScreen Position écran maximale
116 * @param borderColor Couleur de la bordure
117 * @param baseWidth Épaisseur de bordure de base
118 * @param canvasZoom Niveau de zoom
119 * @param nodeScale Échelle du node
120 * @param cornerRadius Rayon des coins
121 */
123 const ImVec2& minScreen,
124 const ImVec2& maxScreen,
126 float baseWidth,
127 float canvasZoom = 1.0f,
128 float nodeScale = 1.0f,
129 float cornerRadius = 5.0f
130 ) const;
131
132 // ===== Preset Styles =====
133
134 /// @brief Style standard "Olympe Blue" - Cyan vif avec glow modéré
136
137 /// @brief Style "Gold Accent" - Orange/or pour éditeurs de spécialité
139
140 /// @brief Style "Green Energy" - Vert lumineux pour emphasis
142
143 /// @brief Style "Purple Mystery" - Violet/magenta
145
146 /// @brief Style "Red Alert" - Rouge vif pour avertissements/erreurs
147 void ApplyStyle_RedAlert();
148
149 private:
150 Vector m_glowColor = {0.0f, 0.8f, 1.0f}; // Cyan par défaut
151 float m_glowAlpha = 0.3f; // 30% d'opacité
152 float m_baseGlowSize = 4.0f; // 4 pixels de glow
153 float m_borderWidthMultiplier = 2.0f; // Bordure ×2 si sélectionné
154 bool m_glowEnabled = true;
155 };
156
157} // namespace Olympe
ComponentTypeID GetComponentTypeID_Static()
Definition ECS_Entity.h:56
Encapsule l'effet de sélection des nodes (glow + bordure épaisse)
void RenderCompleteSelection(const ImVec2 &minScreen, const ImVec2 &maxScreen, ImU32 borderColor, float baseWidth, float canvasZoom=1.0f, float nodeScale=1.0f, float cornerRadius=5.0f) const
Rend l'ensemble de l'effet de sélection (glow + bordure)
void SetBaseGlowSize(float size)
Définit la taille de base du glow (avant zoom/scale)
void SetGlowEnabled(bool enabled)
Active/désactive l'effet de glow (utile pour performance) @default true.
void RenderSelectionGlow(const ImVec2 &minScreen, const ImVec2 &maxScreen, float canvasZoom=1.0f, float nodeScale=1.0f, float cornerRadius=5.0f) const
Dessine le glow de sélection (fond lumineux)
void ApplyStyle_OlympeBlue()
Style standard "Olympe Blue" - Cyan vif avec glow modéré
void RenderSelectionBorder(const ImVec2 &minScreen, const ImVec2 &maxScreen, ImU32 borderColor, float baseWidth, float canvasZoom=1.0f, float cornerRadius=5.0f) const
Rend la bordure de sélection (épaissie)
void ApplyStyle_GreenEnergy()
Style "Green Energy" - Vert lumineux pour emphasis.
void SetGlowColor(const Vector &color)
Définit la couleur du glow de sélection.
void SetBorderWidthMultiplier(float multiplier)
Définit le multiplicateur d'épaisseur de bordure.
void ApplyStyle_RedAlert()
Style "Red Alert" - Rouge vif pour avertissements/erreurs.
void ApplyStyle_PurpleMystery()
Style "Purple Mystery" - Violet/magenta.
void SetGlowAlpha(float alpha)
Définit l'alpha (transparence) du glow.
void ApplyStyle_GoldAccent()
Style "Gold Accent" - Orange/or pour éditeurs de spécialité
< Provides AssetID and INVALID_ASSET_ID