VR-Forces 4.10 Class Documentation
 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) 2019 VT MAK
3 ** All rights reserved.
4 ******************************************************************************/
5 
10 
11 #pragma once
12 
13 #include <vrvFx/vrvFx.h>
15 
17 
19 
20 #include <diguyParticleManager.h>
21 
22 #include <osg/MatrixTransform>
23 #include <osg/Polytope>
24 
25 class bdiParticleDesc;
27 
28 namespace osg
29 {
30  class RenderInfo;
31 }
32 
33 namespace makVrv
34 {
35  class DtFxDebugDrawCallbackInterface;
36 
37  class DtFxOglParticleSystemRenderer;
42  {
43 
44  public:
47  virtual ~DtFxParticleSystemManager();
48 
50  virtual bool get_scenario_owns_particle_manager();
51 
53  virtual void initialize_renderer();
54 
56  virtual DtFxOglParticleSystemRenderer* renderer();
57 
59  virtual void draw() { ; }
60 
62  virtual void draw(osg::RenderInfo& renderInfo);
63 
65  virtual void drawDebugVisuals(osg::RenderInfo& renderInfo);
66 
68  virtual void addImguiOverlay();
69 
71  virtual void addImguiStats();
72 
74  virtual diguyParticleSystem* create_particle_system(const char* desc_name);
75 
77  virtual void reinitialize(bool recreate_default_effect = true);
78 
80  virtual void update(float quantum);
81 
83  virtual void vrvUpdate(float quantum);
84 
86  virtual int load_entries(const char* fileName);
87 
89  virtual void add_desc(bdiParticleDesc *desc);
91  virtual void remove_desc(bdiParticleDesc* desc, int delete_desc = 1);
93  virtual void rename_desc(bdiParticleDesc* desc, const char* new_name);
94 
96  virtual DtFxParticleDesc* create_default_description();
97 
99  virtual int in_use(bdiParticleDesc* desc);
100 
102  virtual bdiParticleDescArray* get_descriptions();
104  bdiParticleDesc* get_description(int index);
106  bdiParticleDesc* find_description(const char * name);
107 
109  diguyParticleSystem* create(const char* desc_name);
111  diguyParticleSystem* create_transient_system(const char* desc_name, float life_time_override = -1.0f);
113  diguyParticleSystem* create_preview_system(const char* desc_name);
114 
116  diguyParticleSystem* find_system_with_character_pointer(diguyCharacter* character);
117 
119  virtual void remove_system(diguyParticleSystem* ps);
120 
122  virtual int get_number_of_systems();
124  virtual int get_number_of_transient_systems();
126  virtual diguyParticleSystem* get_system(int i);
127 
129  virtual bdiString get_unique_description_name(const char* prefix);
130 
132  virtual diguyParticleSystem* get_preview_system();
134  virtual void destroy_preview_system();
135 
137  virtual void reset();
138 
140  virtual void process_data_queue();
141 
143  virtual void set_draw_debug_visuals(int val);
145  virtual int get_draw_debug_visuals() const;
146 
148  virtual void set_global_wind(const bdiVec3f& wind);
150  virtual const bdiVec3f& get_global_wind() const;
151 
153  virtual void load_texture_map(bdiParticleDesc* desc);
154 
155 
159  virtual int get_enabled() const { return 1; }
161  virtual void set_enabled(int val);
163  virtual void start_emitting_for(diguyCharacter*, const bdiFarPosition& start_pos, const bdiVec3f& orient);
165  virtual void stop_emitting_for(diguyCharacter*);
167  virtual void stop_all_particles_for(diguyCharacter*);
168 
170  virtual void set_draw_placeholder(int draw) { }
172  virtual int get_draw_placeholder() const { return false; }
174  virtual void set_draw_placeholder_master_switch(int draw) { }
176  virtual int get_draw_placeholder_master_switch() const { return false; }
178  virtual int get_license_status() const { return 1; }
180  virtual int load_descs_library(bdiObjectLibrary* object_library);
182  virtual void unload_descs_library(bdiObjectLibrary* object_library);
184 
186  virtual void clear_derived_update_flag_on_next_update();
187 
189  virtual int get_num_systems_drawn() const;
191  virtual void increment_systems_drawn();
192 
193 
194  //VRV Additions
195  virtual bool isGeocentric();
196 
198  virtual void calcGeocentric(const bdiFarPosition & pos, bdiMat4f& mat, bdiMat4f* inversemat);
200  virtual void setOsgDrawable(osg::ref_ptr<DtFxOsgParticleDrawable>& drawable);
202  virtual osg::ref_ptr<DtFxOsgParticleDrawable>& osgDrawable();
203 
205  virtual void setWindSpeed(float metersPerSecond);
207  virtual void setWindDirection(float radians);
209  virtual void updateWind();
210 
212  virtual void setNumPreviewSystems(int value);
214  virtual void restartPreview();
216  virtual void setPreviewSystemsPosition(const bdiFarPosition& pos);
217 
219  DtDe& de();
220 
223  virtual void set_particle_module_disabled(int dis) { ; }
224  virtual void set_water_height(const float& water_height);
225  virtual float get_water_height() const;
226  virtual void sync_spawn_system_data(bdiParticleDesc* desc);
228 
229 
233  virtual osg::Node* getOrCreateSensorNode(int diguyMat);
234 
236  virtual DtFxCollisionVolumeInterface* addCollisionVolume();
237 
239  virtual void destroyCollisionVolume(DtFxCollisionVolumeInterface* volume);
240 
242  virtual DtFxForceInterface* addGlobalForce();
243 
245  virtual void destroyGlobalForce(DtFxForceInterface* volume);
247 
248 
249  DtFxParticleVertex* get_vertbuffer();
250 
251  virtual bool revertItem(DtFxParticleDesc* item);
252  virtual void saveItem(DtFxParticleDesc* item);
254  virtual std::string saveFiles();
255 
257  virtual void createDescBackups();
258 
260  static DtFxParticleSystemManager* instance(DtDe& de);
261 
263  virtual diguyParticleManager* getDiguyParticleManager();
264 
266  virtual void initSystem();
267 
269  virtual void createParticleDrawable();
270 
272  virtual bool hasDescription(const std::string& name);
274  virtual void slot_reloadShaders();
275 
277  virtual void setWireFrameMode(bool wireframeMode);
278 
280  virtual void setTextureMode(bool textureMode);
281 
283  virtual DtFxParticleSystem* createSystem(const std::string& name);
285  virtual void destroySystem(DtFxParticleSystem* system);
286 
288  virtual void updateParticles(double simTime);
289 
291  bool getTerrainOrPropIntersection(const osg::Vec3d& startPos, const osg::Vec3d& endPos,
292  osg::Vec3d& result) const;
293 
295  virtual void addGlobalForce(DtFxForce* force);
296 
298  virtual void removeGlobalForce(DtFxForce* force);
299 
301  const DtFxForceArray& globalForces() const;
302 
304  DtFxForceArray& globalForces();
305 
307  const DtFxCollisionObjectArray& collisionObjects() const;
308 
310  DtFxCollisionObjectArray* collisionObjectsPtr();
311 
312  virtual void addDescToTextureLoad(bdiParticleDesc* desc);
313 
315  tbb::mutex& systemDataMutex();
316 
318  tbb::mutex& lightMutex();
319 
321  const std::set<std::string>& fileNamesList();
322 
324  DtFxParticleSystemArray& previewArray();
325 
327  DtFxParticleSystemArray& systemArray();
328 
330  DtFxParticleSystemHolderArray& testHolderArray();
331 
333  virtual bool* previewAutoMovePtr();
335  virtual float* previewAutoMoveSpeedPtr();
336  virtual bdiVec3f* previewAutoMoveRadiusPtr();
337 
339  virtual void recompileScripts();
340 
342  virtual void addDebugDrawer(DtFxDebugDrawCallbackInterface* drawer);
343 
344 
345  protected:
346 
347  virtual diguyParticleSystem* create_transient_system(DtFxParticleDesc* desc, float life_time_override = -1.0f);
348  virtual diguyParticleSystem* create_preview_system(DtFxParticleDesc* desc);
349  virtual DtFxParticleSystem* shared_creation(DtFxParticleDesc* desc);
350  virtual void update_preview(const float quantum);
351  virtual void cull(DtFxParticleSystemArray& input, osg::Polytope& polytope, bool shadow_pass, std::vector< DtFxParticleSystem*>& results);
352 
354  virtual osg::ref_ptr<osg::Texture2D> loadTexture(const char* txName);
355 
356 
357  protected:
358  mutable tbb::mutex m_mutex_critical_data;
359 
360  mutable tbb::mutex m_mutex_texture_data;
361 
362  // this seems to be needs to protect the light manager
363  mutable tbb::mutex m_mutex_light_objects;
364 
365  bdiParticleDescArray m_descs;
366  bdiParticleDescArray m_backup_descs;
367 
368  bdiParticleDescArray m_init_texture_queue;
369 
370  DtFxParticleSystemArray m_psystems;
371 
372  DtFxParticleSystemArray m_trans_systems;
373 
374  DtFxParticleSystemArray m_preview_array;
375 
377  DtFxParticleSystemHolderArray m_test_holder_array;
378 
379  DtFxForceArray m_global_forces;
380 
382 
386 
387  // pointer from the gpu
389 
390  float myWindSpeed;
392 
394  bdiFarPosition myPreviewCenter;
395  std::set<std::string> myFileNamesList;
396  std::vector< DtFxParticleSystem*> myAllSystems;
397 
399 
402  std::map<int, osg::ref_ptr<osg::Node> > mySensorMap;
403  bdiFarPosition myEyePosition;
404 
405  DtFxCollisionObjectArray myCollisionObjects;
406 
407  // stats tracking
414 
417 
423 
424  osg::Polytope myCullPolytop;
425 
426  std::vector<DtFxDebugDrawCallbackInterface*> myExtraDebugDrawObjects;
427  };
428 
429 
430 }
double myLastUpdateTime
Definition: DtFxParticleSystemManager.h:416
int myTotalVertCount
Definition: DtFxParticleSystemManager.h:411
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:412
bdiFarPosition myPreviewCenter
Definition: DtFxParticleSystemManager.h:394
tbb::mutex m_mutex_critical_data
Definition: DtFxParticleSystemManager.h:358
DtFxParticleSystemManager is the manager for all the particle systems and descriptions diguy sdk comm...
Definition: DtFxParticleSystemManager.h:41
float myStatsUpdateTime
Definition: DtFxParticleSystemManager.h:408
float myWindDirection
Definition: DtFxParticleSystemManager.h:391
class that allows clients to add collision objects (no export of virtual base class) ...
Definition: DtFxCollisionVolumeInterface.h:18
bdiFarPosition myEyePosition
Definition: DtFxParticleSystemManager.h:403
float myStatsDrawLastTime
Definition: DtFxParticleSystemManager.h:410
DT_DLL_tdbutil void ps(int indent_level)
bdiParticleDescArray m_descs
Definition: DtFxParticleSystemManager.h:365
Definition: featureContext.h:37
int m_draw_debug_visuals
Definition: DtFxParticleSystemManager.h:383
tbb::mutex m_mutex_texture_data
Definition: DtFxParticleSystemManager.h:360
DtFxParticleSystemArray m_preview_array
Definition: DtFxParticleSystemManager.h:374
virtual void set_draw_placeholder_master_switch(int draw)
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:174
#define DT_DLL_VRVFX
Definition: vrvFx.h:20
Contains DLL export macros.
bdiParticleDescArray m_init_texture_queue
Definition: DtFxParticleSystemManager.h:368
virtual int get_draw_placeholder_master_switch() const
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:176
std::vector< DtFxDebugDrawCallbackInterface * > myExtraDebugDrawObjects
Definition: DtFxParticleSystemManager.h:426
float m_water_height
Definition: DtFxParticleSystemManager.h:384
DtFxParticleSystemArray m_trans_systems
Definition: DtFxParticleSystemManager.h:372
Contains particle system class.
DtFxParticleVertex * m_vertbuffer
Definition: DtFxParticleSystemManager.h:388
virtual void draw()
base class no-ops
Definition: DtFxParticleSystemManager.h:59
a gpu vbo representation of the particle
Definition: DtFxParticleSystem.h:356
virtual int get_enabled() const
Definition: DtFxParticleSystemManager.h:159
DtDe & myDe
Definition: DtFxParticleSystemManager.h:400
DtFxCollisionObjectArray myCollisionObjects
Definition: DtFxParticleSystemManager.h:405
std::set< std::string > myFileNamesList
Definition: DtFxParticleSystemManager.h:395
DtSignalConnectionManager myConnections
Definition: DtFxParticleSystemManager.h:398
bdiVec3f myPreviewAutoMoveRadius
Definition: DtFxParticleSystemManager.h:422
virtual void set_draw_placeholder(int draw)
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:170
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:389
int myNumPreviewSystems
Definition: DtFxParticleSystemManager.h:393
virtual int get_draw_placeholder() const
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:172
tbb::mutex m_mutex_light_objects
Definition: DtFxParticleSystemManager.h:363
DtFxParticleDesc * m_preview_desc
Definition: DtFxParticleSystemManager.h:381
bool myPreviewAutoMove
public to allow the UI to edit
Definition: DtFxParticleSystemManager.h:419
std::map< int, osg::ref_ptr< osg::Node > > mySensorMap
Definition: DtFxParticleSystemManager.h:402
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:223
Base class to provide boost signal/slot management.
bdiParticleDescArray m_backup_descs
Definition: DtFxParticleSystemManager.h:366
class that wraps the particle manager in vrvFx in a vrv friendly layer
Definition: DtParticleSystemManagerInterface.h:36
float myStatsDrawTime
Definition: DtFxParticleSystemManager.h:409
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:178
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
osg::Polytope myCullPolytop
Definition: DtFxParticleSystemManager.h:424
float myPreviewAutoMoveSpeed
public to allow the UI to edit
Definition: DtFxParticleSystemManager.h:421
osg::ref_ptr< osg::MatrixTransform > myParticleRendererGroup
Definition: DtFxParticleSystemManager.h:415
std::vector< DtFxParticleSystem * > myAllSystems
Definition: DtFxParticleSystemManager.h:396
osg::ref_ptr< DtFxOsgParticleDrawable > myFxOsgParticleDrawable
Definition: DtFxParticleSystemManager.h:401
DtFxParticleSystemHolderArray m_test_holder_array
array for additional test systems
Definition: DtFxParticleSystemManager.h:377
DtFxParticleSystemArray m_psystems
Definition: DtFxParticleSystemManager.h:370
int m_clear_derived_update_flag_on_next_update
Definition: DtFxParticleSystemManager.h:385
int myNumSystemsDrawn
Definition: DtFxParticleSystemManager.h:413
DtFxForceArray m_global_forces
Definition: DtFxParticleSystemManager.h:379
a subclass of bdiParticleDesc, currently reimplements all of configuration file reading and writing...
Definition: DtFxParticleSystem.h:112
float myWindSpeed
Definition: DtFxParticleSystemManager.h:390

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)