TDME2  1.9.200
ParticleSystemEditorTabController.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <array>
4 #include <memory>
5 #include <string>
6 
7 #include <tdme/tdme.h>
15 #include <tdme/math/Vector3.h>
21 
22 using std::array;
23 using std::string;
24 using std::unique_ptr;
25 
47 
48 /**
49  * Particle system editor tab controller
50  * @author Andreas Drewke
51  */
53  : public TabController
54 {
55 
56 private:
57  unique_ptr<BasePropertiesSubController> basePropertiesSubController;
58  unique_ptr<PrototypeDisplaySubController> prototypeDisplaySubController;
59  unique_ptr<PrototypePhysicsSubController> prototypePhysicsSubController;
60  unique_ptr<PrototypeSoundsSubController> prototypeSoundsSubController;
61  unique_ptr<PrototypeScriptSubController> prototypeScriptSubController;
63  GUIScreenNode* screenNode { nullptr };
64  PopUps* popUps { nullptr };
65 
66  array<string, 3> applyBaseNodes {
67  "particletype_type",
68  "particleemitter_type",
69  "particleemitter_type_details"
70  };
71 
72  array<string, 6> applyOPSNodes {
73  "particletype_object_scale",
74  "particletype_object_maxcount",
75  "particletype_object_autoemit"
76  };
77 
78  array<string, 6> applyPPSNodes {
79  "particletype_point_size",
80  "particletype_point_maxcount",
81  "particletype_point_horizontal_sprites",
82  "particletype_point_vertical_sprites",
83  "particletype_point_fps",
84  "particletype_point_autoemit"
85  };
86 
87  array<string, 5> applyFPSNodes {
88  "particletype_fog_size",
89  "particletype_fog_maxcount",
90  "particletype_fog_horizontal_sprites",
91  "particletype_fog_vertical_sprites",
92  "particletype_fog_fps",
93  };
94 
95  array<string, 24> applyBBPENodes {
96  "particleemitter_box_location_x",
97  "particleemitter_box_location_y",
98  "particleemitter_box_location_z",
99  "particleemitter_box_rotation_x",
100  "particleemitter_box_rotation_y",
101  "particleemitter_box_rotation_z",
102  "particleemitter_box_halfsize_x",
103  "particleemitter_box_halfsize_y",
104  "particleemitter_box_halfsize_z",
105  "particleemitter_box_colorstart",
106  "particleemitter_box_colorend",
107  "particleemitter_box_count",
108  "particleemitter_box_lifetime_min",
109  "particleemitter_box_lifetime_max",
110  "particleemitter_box_velocity_min_x",
111  "particleemitter_box_velocity_min_y",
112  "particleemitter_box_velocity_min_z",
113  "particleemitter_box_velocity_max_x",
114  "particleemitter_box_velocity_max_y",
115  "particleemitter_box_velocity_max_z",
116  "particleemitter_box_mass_min",
117  "particleemitter_box_mass_max"
118  };
119 
120  array<string, 14> applyPPENodes {
121  "particleemitter_point_location_x",
122  "particleemitter_point_location_y",
123  "particleemitter_point_location_z",
124  "particleemitter_point_count",
125  "particleemitter_point_lifetime_min",
126  "particleemitter_point_lifetime_max",
127  "particleemitter_point_velocity_min_x",
128  "particleemitter_point_velocity_min_y",
129  "particleemitter_point_velocity_min_z",
130  "particleemitter_point_velocity_max_x",
131  "particleemitter_point_velocity_max_y",
132  "particleemitter_point_velocity_max_z",
133  "particleemitter_point_mass_min",
134  "particleemitter_point_mass_max"
135  };
136 
137  array<string, 15> applySPENodes {
138  "particleemitter_sphere_location_x",
139  "particleemitter_sphere_location_y",
140  "particleemitter_sphere_location_z",
141  "particleemitter_sphere_radius",
142  "particleemitter_sphere_count",
143  "particleemitter_sphere_lifetime_min",
144  "particleemitter_sphere_lifetime_max",
145  "particleemitter_sphere_velocity_min_x",
146  "particleemitter_sphere_velocity_min_y",
147  "particleemitter_sphere_velocity_min_z",
148  "particleemitter_sphere_velocity_max_x",
149  "particleemitter_sphere_velocity_max_y",
150  "particleemitter_sphere_velocity_max_z",
151  "particleemitter_sphere_mass_min",
152  "particleemitter_sphere_mass_max"
153  };
154 
155  array<string, 18> applyCPENodes {
156  "particleemitter_circle_location_x",
157  "particleemitter_circle_location_y",
158  "particleemitter_circle_location_z",
159  "particleemitter_circle_rotation_x",
160  "particleemitter_circle_rotation_y",
161  "particleemitter_circle_rotation_z",
162  "particleemitter_circle_radius",
163  "particleemitter_circle_count",
164  "particleemitter_circle_lifetime_min",
165  "particleemitter_circle_lifetime_max",
166  "particleemitter_circle_velocity_min_x",
167  "particleemitter_circle_velocity_min_y",
168  "particleemitter_circle_velocity_min_z",
169  "particleemitter_circle_velocity_max_x",
170  "particleemitter_circle_velocity_max_y",
171  "particleemitter_circle_velocity_max_z",
172  "particleemitter_circle_mass_min",
173  "particleemitter_circle_mass_max",
174  };
175 
176  array<string, 16> applyRPENodes {
177  "particleemitter_radial_location_x",
178  "particleemitter_radial_location_y",
179  "particleemitter_radial_location_z",
180  "particleemitter_radial_rotation_x",
181  "particleemitter_radial_rotation_y",
182  "particleemitter_radial_rotation_z",
183  "particleemitter_radial_radius",
184  "particleemitter_radial_colorstart",
185  "particleemitter_radial_colorend",
186  "particleemitter_radial_count",
187  "particleemitter_radial_lifetime_min",
188  "particleemitter_radial_lifetime_max",
189  "particleemitter_radial_velocity_min",
190  "particleemitter_radial_velocity_max",
191  "particleemitter_radial_mass_min",
192  "particleemitter_radial_mass_max"
193  };
194 
195 public:
196  // forbid class copy
198 
199  /**
200  * Public constructor
201  * @param view view
202  */
204 
205  /**
206  * Destructor
207  */
209 
210  /**
211  * @return display sub screen controller
212  */
214  return prototypeDisplaySubController.get();
215  }
216 
217  /**
218  * @return pyhsics sub screen controller
219  */
221  return prototypePhysicsSubController.get();
222  }
223 
224  /**
225  * @return prototype sounds sub screen controller
226  */
228  return prototypeSoundsSubController.get();
229  }
230 
231  /**
232  * Get view
233  * @return view
234  */
236  return view;
237  }
238 
239  // overridden method
240  inline GUIScreenNode* getScreenNode() override {
241  return screenNode;
242  }
243 
244  // overridden methods
245  void initialize(GUIScreenNode* screenNode) override;
246  void dispose() override;
247  void onChange(GUIElementNode* node) override;
248  void onAction(GUIActionListenerType type, GUIElementNode* node) override;
249  void onFocus(GUIElementNode* node) override;
250  void onUnfocus(GUIElementNode* node) override;
251  void onContextMenuRequest(GUIElementNode* node, int mouseX, int mouseY) override;
252  void onTooltipShowRequest(GUINode* node, int mouseX, int mouseY) override;
253  void onTooltipCloseRequest() override;
254  void onCommand(TabControllerCommand command) override;
255  void onDrop(const string& payload, int mouseX, int mouseY) override;
256 
257  /**
258  * Set outliner content
259  */
260  void setOutlinerContent();
261 
262  /**
263  * Set outliner add drop down content
264  */
266 
267  /**
268  * Set particle system details
269  * @param particleSystemIdx particle system index
270  */
271  void setParticleSystemDetails(int particleSystemIdx);
272 
273  /**
274  * Apply particle system details
275  * @param particleSystemIdx particle system index
276  */
277  void applyParticleSystemDetails(int particleSystemIdx);
278 
279  /**
280  * Update details panel
281  * @param outlinerNode outliner node
282  */
283  void updateDetails(const string& outlinerNode);
284 
285  /**
286  * Update point particle system emitter
287  * @param position position
288  */
289  void updatePointParticleSystemEmitter(const Vector3& position);
290 
291  /**
292  * Update bounding box particle system emitter
293  * @param center center
294  * @param axis0 axis 0
295  * @param axis1 axis 1
296  * @param axis2 axis 2
297  * @param halfExtension half extension
298  */
299  void updateBoundingBoxParticleSystemEmitter(const Vector3& center, const Vector3& axis0, const Vector3& axis1, const Vector3& axis2, const Vector3& halfExtension);
300 
301  /**
302  * Update circle particle system emitter
303  * @param center center
304  * @param axis0 axis 0
305  * @param axis1 axis 1
306  * @param axis2 axis 2
307  * @param radius radius
308  */
309  void updateCircleParticleSystemEmitter(const Vector3& center, const Vector3& axis0, const Vector3& axis1, float radius);
310 
311  /**
312  * Update radial particle system emitter
313  * @param center center
314  * @param axis0 axis 0
315  * @param axis1 axis 1
316  * @param axis2 axis 2
317  * @param radius radius
318  */
319  void updateRadialParticleSystemEmitter(const Vector3& center, const Vector3& axis0, const Vector3& axis1, float radius);
320 
321  /**
322  * Update sphere particle system emitter
323  * @param center center
324  * @param radius radius
325  */
326  void updateSphereParticleSystemEmitter(const Vector3& center, float radius);
327 
328  /**
329  * Update info text line
330  * @param text text
331  */
332  void updateInfoText(const MutableString& text);
333 
334  /**
335  * Show the information pop up / modal
336  * @param caption caption
337  * @param message message
338  */
339  void showInfoPopUp(const string& caption, const string& message);
340 
341  /**
342  * Set point particle system texture
343  * @param particleSystemIdx particle system idx
344  * @param fileName file name
345  */
346  void setPointParticleSystemTexture(int particleSystemIdx, const string& fileName);
347 
348  /**
349  * Set point particle system transparency texture
350  * @param particleSystemIdx particle system idx
351  * @param fileName file name
352  */
353  void setPointParticleSystemTransparencyTexture(int particleSystemIdx, const string& fileName);
354 
355  /**
356  * Set fog particle system texture
357  * @param particleSystemIdx particle system idx
358  * @param fileName file name
359  */
360  void setFogParticleSystemTexture(int particleSystemIdx, const string& fileName);
361 
362  /**
363  * Set fog particle system transparency texture
364  * @param particleSystemIdx particle system idx
365  * @param fileName file name
366  */
367  void setFogParticleSystemTransparencyTexture(int particleSystemIdx, const string& fileName);
368 
369  /**
370  * Set object particle system model
371  * @param particleSystemIdx particle system idx
372  * @param fileName file name
373  */
374  void setObjectParticleSystemModel(int particleSystemIdx, const string& fileName);
375 
376 };
GUI node base class.
Definition: GUINode.h:64
GUI parent node base class thats supporting child nodes.
Definition: GUIParentNode.h:42
GUI screen node that represents a screen that can be rendered via GUI system.
Definition: GUIScreenNode.h:72
Vector3 class representing vector3 mathematical structure and operations with x, y,...
Definition: Vector3.h:20
Pop ups controller accessor class.
Definition: PopUps.h:29
void onContextMenuRequest(GUIElementNode *node, int mouseX, int mouseY) override
On context menu request.
void onDrop(const string &payload, int mouseX, int mouseY) override
On drop.
void applyParticleSystemDetails(int particleSystemIdx)
Apply particle system details.
void setObjectParticleSystemModel(int particleSystemIdx, const string &fileName)
Set object particle system model.
void updateSphereParticleSystemEmitter(const Vector3 &center, float radius)
Update sphere particle system emitter.
void setFogParticleSystemTransparencyTexture(int particleSystemIdx, const string &fileName)
Set fog particle system transparency texture.
void setPointParticleSystemTransparencyTexture(int particleSystemIdx, const string &fileName)
Set point particle system transparency texture.
void setFogParticleSystemTexture(int particleSystemIdx, const string &fileName)
Set fog particle system texture.
ParticleSystemEditorTabController(ParticleSystemEditorTabView *view)
Public constructor.
void updateCircleParticleSystemEmitter(const Vector3 &center, const Vector3 &axis0, const Vector3 &axis1, float radius)
Update circle particle system emitter.
void setPointParticleSystemTexture(int particleSystemIdx, const string &fileName)
Set point particle system texture.
void updateRadialParticleSystemEmitter(const Vector3 &center, const Vector3 &axis0, const Vector3 &axis1, float radius)
Update radial particle system emitter.
void setParticleSystemDetails(int particleSystemIdx)
Set particle system details.
void showInfoPopUp(const string &caption, const string &message)
Show the information pop up / modal.
void onAction(GUIActionListenerType type, GUIElementNode *node) override
void updatePointParticleSystemEmitter(const Vector3 &position)
Update point particle system emitter.
void updateBoundingBoxParticleSystemEmitter(const Vector3 &center, const Vector3 &axis0, const Vector3 &axis1, const Vector3 &axis2, const Vector3 &halfExtension)
Update bounding box particle system emitter.
void onTooltipShowRequest(GUINode *node, int mouseX, int mouseY) override
On tooltip show request.
Mutable utf8 aware string class.
Definition: MutableString.h:23
GUI action listener interface.
GUI change listener interface.
GUI focus listener interface.
Tab controller, which connects UI with logic.
Definition: TabController.h:34
#define FORBID_CLASS_COPY(CLASS)
Definition: tdme.h:6