VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtFxParticleSystemManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2022 VT MAK
3 ** All rights reserved.
4 ******************************************************************************/
5 
10 
11 #pragma once
12 
13 #include <vrvFx/vrvFx.h>
15 
17 #include <vrvOsg/DtSceneRoot.h>
18 
20 
21 #include <diguyParticleManager.h>
22 
23 #include <osg/MatrixTransform>
24 #include <osg/Polytope>
25 
26 class bdiParticleDesc;
28 
29 namespace osg
30 {
31  class RenderInfo;
32 }
33 
34 namespace makVrv
35 {
36  class DtFxDebugDrawCallbackInterface;
37 
38  class DtFxOglParticleSystemRenderer;
39 
40  class DtOsgIntersector;
41 
42  class DtCoordinateSystem;
43 
48  {
49 
50  public:
53  virtual ~DtFxParticleSystemManager();
54 
56  virtual bool get_scenario_owns_particle_manager();
57 
59  virtual void initialize_renderer();
60 
62  virtual DtFxOglParticleSystemRenderer* renderer();
63 
65  virtual void draw() { ; }
66 
68  virtual void draw(osg::RenderInfo& renderInfo);
69 
71  virtual void drawDebugVisuals(osg::RenderInfo& renderInfo);
72 
74  virtual void addImguiOverlay();
75 
77  virtual void addImguiStats();
78 
80  virtual diguyParticleSystem* create_particle_system(const char* desc_name);
81 
82 
84  virtual void reinitialize(bool recreate_default_effect = true);
85 
87  virtual void update(float quantum);
88 
90  virtual void vrvUpdate(float quantum);
91 
93  virtual int load_entries(const char* fileName);
94 
96  virtual void add_desc(bdiParticleDesc *desc);
98  virtual void remove_desc(bdiParticleDesc* desc, int delete_desc = 1);
100  virtual void rename_desc(bdiParticleDesc* desc, const char* new_name);
101 
103  virtual DtFxParticleDesc* create_default_description();
104 
106  virtual int in_use(bdiParticleDesc* desc);
107 
109  virtual bdiParticleDescArray* get_descriptions();
111  bdiParticleDesc* get_description(int index);
113  bdiParticleDesc* find_description(const char * name);
114 
116  diguyParticleSystem* create(const char* desc_name);
118  diguyParticleSystem* create_transient_system(const char* desc_name, float life_time_override = -1.0f);
120  diguyParticleSystem* create_preview_system(const char* desc_name);
121 
123  diguyParticleSystem* find_system_with_character_pointer(diguyCharacter* character);
124 
126  virtual void remove_system(diguyParticleSystem* ps);
127 
129  virtual int get_number_of_systems();
131  virtual int get_number_of_transient_systems();
133  virtual diguyParticleSystem* get_system(int i);
134 
136  virtual bdiString get_unique_description_name(const char* prefix);
137 
139  virtual diguyParticleSystem* get_preview_system();
141  virtual void destroy_preview_system();
142 
144  virtual void reset();
145 
147  virtual void process_data_queue();
148 
150  virtual void set_draw_debug_visuals(int val);
152  virtual int get_draw_debug_visuals() const;
153 
155  virtual void set_global_wind(const bdiVec3f& wind);
157  virtual const bdiVec3f& get_global_wind() const;
158 
160  virtual void load_texture_map(bdiParticleDesc* desc);
161 
162 
166  virtual int get_enabled() const { return 1; }
168  virtual void set_enabled(int val);
170  virtual void start_emitting_for(diguyCharacter*, const bdiFarPosition& start_pos, const bdiVec3f& orient);
172  virtual void stop_emitting_for(diguyCharacter*);
174  virtual void stop_all_particles_for(diguyCharacter*);
175 
177  virtual void set_draw_placeholder(int draw) { }
179  virtual int get_draw_placeholder() const { return false; }
181  virtual void set_draw_placeholder_master_switch(int draw) { }
183  virtual int get_draw_placeholder_master_switch() const { return false; }
185  virtual int get_license_status() const { return 1; }
187  virtual int load_descs_library(bdiObjectLibrary* object_library);
189  virtual void unload_descs_library(bdiObjectLibrary* object_library);
191 
193  virtual void clear_derived_update_flag_on_next_update();
194 
196  virtual int get_num_systems_drawn() const;
198  virtual void increment_systems_drawn();
199 
200 
201  //VRV Additions
202  virtual bool isGeocentric();
203 
205  virtual void calcGeocentric(const bdiFarPosition & pos, bdiMat4f& mat, bdiMat4f* inversemat);
207  virtual void setOsgDrawable(osg::ref_ptr<DtFxOsgParticleDrawable>& drawable);
209  virtual osg::ref_ptr<DtFxOsgParticleDrawable>& osgDrawable();
210 
212  virtual void setWindSpeed(float metersPerSecond);
214  virtual void setWindDirection(float radians);
216  virtual void updateWind();
217 
219  virtual void setNumPreviewSystems(int value);
221  virtual void restartPreview();
223  virtual void setPreviewSystemsPosition(const bdiFarPosition& pos);
224 
226  DtDe& de();
227 
230  virtual void set_particle_module_disabled(int dis) { ; }
231  virtual void set_water_height(const float& water_height);
232  virtual float get_water_height() const;
233  virtual void sync_spawn_system_data(bdiParticleDesc* desc);
235 
236 
240  virtual osg::Node* getOrCreateSensorNode(int diguyMat);
241 
243  virtual DtFxCollisionVolumeInterface* addCollisionVolume();
244 
246  virtual void destroyCollisionVolume(DtFxCollisionVolumeInterface* volume);
247 
249  virtual DtFxForceInterface* addGlobalForce();
250 
252  virtual void destroyGlobalForce(DtFxForceInterface* volume);
254 
255 
256  DtFxParticleVertex* get_vertbuffer();
257 
258  virtual bool revertItem(DtFxParticleDesc* item);
259  virtual void saveItem(DtFxParticleDesc* item);
261  virtual std::string saveFiles();
262 
264  virtual void createDescBackups();
265 
267  static DtFxParticleSystemManager* instance(DtDe& de);
268 
270  virtual diguyParticleManager* getDiguyParticleManager();
271 
273  virtual void initSystem();
274 
276  virtual void createParticleDrawable();
277 
279  virtual bool hasDescription(const std::string& name);
281  virtual void slot_reloadShaders();
282 
284  virtual void setWireFrameMode(bool wireframeMode);
285 
287  virtual void setTextureMode(bool textureMode);
288 
290  virtual DtFxParticleSystem* createSystem(const std::string& name);
292  virtual void destroySystem(DtFxParticleSystem* system);
293 
295  virtual void updateParticles(double simTime);
296 
298  bool getTerrainOrPropIntersection(const osg::Vec3d& startPos, const osg::Vec3d& endPos,
299  osg::Vec3d& result) const;
300 
302  virtual void addGlobalForce(DtFxForce* force);
303 
305  virtual void removeGlobalForce(DtFxForce* force);
306 
308  const DtFxForceArray& globalForces() const;
309 
311  DtFxForceArray& globalForces();
312 
314  const DtFxCollisionObjectArray& collisionObjects() const;
315 
317  DtFxCollisionObjectArray* collisionObjectsPtr();
318 
319  virtual void addDescToTextureLoad(bdiParticleDesc* desc);
320 
322  tbb::mutex& systemDataMutex();
323 
325  tbb::mutex& lightMutex();
326 
328  const std::set<std::string>& fileNamesList();
329 
331  DtFxParticleSystemArray& previewArray();
332 
334  DtFxParticleSystemArray& systemArray();
335 
337  DtFxParticleSystemHolderArray& testHolderArray();
338 
340  virtual bool* previewAutoMovePtr();
342  virtual float* previewAutoMoveSpeedPtr();
343  virtual bdiVec3f* previewAutoMoveRadiusPtr();
344 
346  virtual void recompileScripts();
347 
349  virtual void addDebugDrawer(DtFxDebugDrawCallbackInterface* drawer);
350 
354  virtual bool anyToUpdateCullDraw(void);
355 
356  protected:
357 
358  virtual diguyParticleSystem* create_transient_system(DtFxParticleDesc* desc, float life_time_override = -1.0f);
359  virtual diguyParticleSystem* create_preview_system(DtFxParticleDesc* desc);
360  virtual DtFxParticleSystem* shared_creation(DtFxParticleDesc* desc);
361  virtual void create_child_systems(DtFxParticleDesc* desc, DtFxParticleSystem* psystem, bool transient);
362  virtual void update_preview(const float quantum);
363  virtual void cull(DtFxParticleSystemArray& input, osg::Polytope& polytope, bool shadow_pass, std::vector< DtFxParticleSystem*>& results);
364 
366  virtual osg::ref_ptr<osg::Texture2D> loadTexture(const char* txName);
367 
369  virtual bool anyActive(DtFxParticleSystemArray& input);
370 
372  virtual void slot_coordinateSystemChanged();
373 
374 
375  protected:
376  mutable tbb::mutex m_mutex_critical_data;
377 
378  mutable tbb::mutex m_mutex_texture_data;
379 
380  // this seems to be needs to protect the light manager
381  mutable tbb::mutex m_mutex_light_objects;
382 
383  bdiParticleDescArray m_descs;
384  bdiParticleDescArray m_backup_descs;
385 
386  bdiParticleDescArray m_init_texture_queue;
387 
388  DtFxParticleSystemArray m_psystems;
389 
390  DtFxParticleSystemArray m_trans_systems;
391 
392  DtFxParticleSystemArray m_preview_array;
393 
395  DtFxParticleSystemHolderArray m_test_holder_array;
396 
397  DtFxForceArray m_global_forces;
398 
400 
404 
405  // pointer from the gpu
407 
408  float myWindSpeed;
410 
412  bdiFarPosition myPreviewCenter;
413  std::set<std::string> myFileNamesList;
414  std::vector< DtFxParticleSystem*> myViewFrustumSystems;
415 
417 
420  std::map<int, osg::ref_ptr<osg::Node> > mySensorMap;
421  bdiFarPosition myEyePosition;
422 
423  DtFxCollisionObjectArray myCollisionObjects;
424 
425  // stats tracking
432 
435 
441 
442  osg::Polytope myCullPolytop;
443 
444  std::vector<DtFxDebugDrawCallbackInterface*> myExtraDebugDrawObjects;
445 
447 
449 
452  DtCoordinateSystem* myCoordinateSystem = nullptr;
453 
454  };
455 
456 
457 }
double myLastUpdateTime
Definition: DtFxParticleSystemManager.h:434
int myTotalVertCount
Definition: DtFxParticleSystemManager.h:429
class that executes low level OpenGL draw calls from the particle system data.
Definition: DtFxOglParticleSystemRenderer.h:30
class that allows clients to add global forces (no export of virtual base class)
Definition: DtFxForceInterface.h:19
int myTotalPrimCount
Definition: DtFxParticleSystemManager.h:430
bdiFarPosition myPreviewCenter
Definition: DtFxParticleSystemManager.h:412
tbb::mutex m_mutex_critical_data
Definition: DtFxParticleSystemManager.h:376
DtFxParticleSystemManager is the manager for all the particle systems and descriptions diguy sdk comm...
Definition: DtFxParticleSystemManager.h:47
float myStatsUpdateTime
Definition: DtFxParticleSystemManager.h:426
float myWindDirection
Definition: DtFxParticleSystemManager.h:409
std::vector< DtSceneRoot > DtSceneRootList
A list of DtOsgRenderer::SceneRoots.
Definition: DtSceneRoot.h:133
class that allows clients to add collision objects (no export of virtual base class) ...
Definition: DtFxCollisionVolumeInterface.h:18
bdiFarPosition myEyePosition
Definition: DtFxParticleSystemManager.h:421
float myStatsDrawLastTime
Definition: DtFxParticleSystemManager.h:428
DT_DLL_tdbutil void ps(int indent_level)
bdiParticleDescArray m_descs
Definition: DtFxParticleSystemManager.h:383
Definition: featureContext.h:37
int m_draw_debug_visuals
Definition: DtFxParticleSystemManager.h:401
DtOsgIntersector is the OSG-specific implementation of the DtIntersector class. It provides a variety...
Definition: DtOsgIntersector.h:67
tbb::mutex m_mutex_texture_data
Definition: DtFxParticleSystemManager.h:378
std::vector< DtFxParticleSystem * > myViewFrustumSystems
Definition: DtFxParticleSystemManager.h:414
DtFxParticleSystemArray m_preview_array
Definition: DtFxParticleSystemManager.h:392
virtual void set_draw_placeholder_master_switch(int draw)
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:181
#define DT_DLL_VRVFX
Definition: vrvFx.h:20
DtOsgIntersector * myIntersector3dModelSet
Definition: DtFxParticleSystemManager.h:446
Contains DLL export macros.
bdiParticleDescArray m_init_texture_queue
Definition: DtFxParticleSystemManager.h:386
virtual int get_draw_placeholder_master_switch() const
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:183
std::vector< DtFxDebugDrawCallbackInterface * > myExtraDebugDrawObjects
Definition: DtFxParticleSystemManager.h:444
float m_water_height
Definition: DtFxParticleSystemManager.h:402
DtFxParticleSystemArray m_trans_systems
Definition: DtFxParticleSystemManager.h:390
Contains particle system class.
DtSceneRootList myIntersectionRoots
Definition: DtFxParticleSystemManager.h:448
DtFxParticleVertex * m_vertbuffer
Definition: DtFxParticleSystemManager.h:406
virtual void draw()
base class no-ops
Definition: DtFxParticleSystemManager.h:65
a gpu vbo representation of the particle
Definition: DtFxParticleSystem.h:364
virtual int get_enabled() const
Definition: DtFxParticleSystemManager.h:166
DtDe & myDe
Definition: DtFxParticleSystemManager.h:418
DtFxCollisionObjectArray myCollisionObjects
Definition: DtFxParticleSystemManager.h:423
std::set< std::string > myFileNamesList
Definition: DtFxParticleSystemManager.h:413
DtSignalConnectionManager myConnections
Definition: DtFxParticleSystemManager.h:416
bdiVec3f myPreviewAutoMoveRadius
Definition: DtFxParticleSystemManager.h:440
virtual void set_draw_placeholder(int draw)
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:177
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
DtParticleSystem is implementation of the particle system, vrvOsg communicates with it via DtParticle...
Definition: DtFxParticleSystem.h:397
int myNumPreviewSystems
Definition: DtFxParticleSystemManager.h:411
virtual int get_draw_placeholder() const
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:179
tbb::mutex m_mutex_light_objects
Definition: DtFxParticleSystemManager.h:381
DtFxParticleDesc * m_preview_desc
Definition: DtFxParticleSystemManager.h:399
bool myPreviewAutoMove
public to allow the UI to edit
Definition: DtFxParticleSystemManager.h:437
The DtCoordinateSystem is used to manage the current coordinate system of the scene.
Definition: DtCoordinateSystem.h:40
std::map< int, osg::ref_ptr< osg::Node > > mySensorMap
Definition: DtFxParticleSystemManager.h:420
forces to include that influence the particles movement /ingroup vrvFx
Definition: DtFxForce.h:35
virtual void set_particle_module_disabled(int dis)
Definition: DtFxParticleSystemManager.h:230
Contains makVrv::DtSceneRoot class.
Base class to provide boost signal/slot management.
bdiParticleDescArray m_backup_descs
Definition: DtFxParticleSystemManager.h:384
class that wraps the particle manager in vrvFx in a vrv friendly layer
Definition: DtParticleSystemManagerInterface.h:36
float myStatsDrawTime
Definition: DtFxParticleSystemManager.h:427
A simple interface for allowing the qt particle editor to draw lines at the right time...
Definition: DtFxDebugDrawCallbackInterface.h:23
virtual int get_license_status() const
always true
Definition: DtFxParticleSystemManager.h:185
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:70
osg::Polytope myCullPolytop
Definition: DtFxParticleSystemManager.h:442
float myPreviewAutoMoveSpeed
public to allow the UI to edit
Definition: DtFxParticleSystemManager.h:439
osg::ref_ptr< osg::MatrixTransform > myParticleRendererGroup
Definition: DtFxParticleSystemManager.h:433
osg::ref_ptr< DtFxOsgParticleDrawable > myFxOsgParticleDrawable
Definition: DtFxParticleSystemManager.h:419
DtFxParticleSystemHolderArray m_test_holder_array
array for additional test systems
Definition: DtFxParticleSystemManager.h:395
DtFxParticleSystemArray m_psystems
Definition: DtFxParticleSystemManager.h:388
int m_clear_derived_update_flag_on_next_update
Definition: DtFxParticleSystemManager.h:403
int myNumSystemsDrawn
Definition: DtFxParticleSystemManager.h:431
DtFxForceArray m_global_forces
Definition: DtFxParticleSystemManager.h:397
a subclass of bdiParticleDesc, currently reimplements all of configuration file reading and writing...
Definition: DtFxParticleSystem.h:113
float myWindSpeed
Definition: DtFxParticleSystemManager.h:408

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)