VR-Forces 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 MAK Technologies, Inc.
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 void resetLastSimUpdateTime();
94 
96  virtual int load_entries(const char* fileName);
97 
99  virtual void add_desc(bdiParticleDesc *desc);
101  virtual void remove_desc(bdiParticleDesc* desc, int delete_desc = 1);
103  virtual void rename_desc(bdiParticleDesc* desc, const char* new_name);
104 
106  virtual DtFxParticleDesc* create_default_description();
107 
109  virtual int in_use(bdiParticleDesc* desc);
110 
112  virtual bdiParticleDescArray* get_descriptions();
114  bdiParticleDesc* get_description(int index);
116  bdiParticleDesc* find_description(const char * name);
117 
119  diguyParticleSystem* create(const char* desc_name);
121  diguyParticleSystem* create_transient_system(const char* desc_name, float life_time_override = -1.0f);
123  diguyParticleSystem* create_preview_system(const char* desc_name);
124 
126  diguyParticleSystem* find_system_with_character_pointer(diguyCharacter* character);
127 
129  virtual void remove_system(diguyParticleSystem* ps);
130 
132  virtual int get_number_of_systems();
134  virtual int get_number_of_transient_systems();
136  virtual diguyParticleSystem* get_system(int i);
137 
139  virtual bdiString get_unique_description_name(const char* prefix);
140 
142  virtual diguyParticleSystem* get_preview_system();
144  virtual void destroy_preview_system();
145 
147  virtual void reset();
148 
150  virtual void process_data_queue();
151 
153  virtual void set_draw_debug_visuals(int val);
155  virtual int get_draw_debug_visuals() const;
156 
158  virtual void set_global_wind(const bdiVec3f& wind);
160  virtual const bdiVec3f& get_global_wind() const;
161 
163  virtual void load_texture_map(bdiParticleDesc* desc);
164 
165 
169  virtual int get_enabled() const { return 1; }
171  virtual void set_enabled(int val);
173  virtual void start_emitting_for(diguyCharacter*, const bdiFarPosition& start_pos, const bdiVec3f& orient);
175  virtual void stop_emitting_for(diguyCharacter*);
177  virtual void stop_all_particles_for(diguyCharacter*);
178 
180  virtual void set_draw_placeholder(int draw) { }
182  virtual int get_draw_placeholder() const { return false; }
184  virtual void set_draw_placeholder_master_switch(int draw) { }
186  virtual int get_draw_placeholder_master_switch() const { return false; }
188  virtual int get_license_status() const { return 1; }
190  virtual int load_descs_library(bdiObjectLibrary* object_library);
192  virtual void unload_descs_library(bdiObjectLibrary* object_library);
194 
196  virtual void clear_derived_update_flag_on_next_update();
197 
199  virtual int get_num_systems_drawn() const;
201  virtual void increment_systems_drawn();
202 
203 
204  //VRV Additions
205  virtual bool isGeocentric();
206 
208  virtual void calcGeocentric(const bdiFarPosition & pos, bdiMat4f& mat, bdiMat4f* inversemat);
210  virtual void setOsgDrawable(osg::ref_ptr<DtFxOsgParticleDrawable>& drawable);
212  virtual osg::ref_ptr<DtFxOsgParticleDrawable>& osgDrawable();
213 
215  virtual void setWindSpeed(float metersPerSecond);
217  virtual void setWindDirection(float radians);
219  virtual void updateWind();
220 
222  virtual void setNumPreviewSystems(int value);
224  virtual void restartPreview();
226  virtual void setPreviewSystemsPosition(const bdiFarPosition& pos);
227 
229  DtDe& de();
230 
233  virtual void set_particle_module_disabled(int dis) { ; }
234  virtual void set_water_height(const float& water_height);
235  virtual float get_water_height() const;
236  virtual void sync_spawn_system_data(bdiParticleDesc* desc);
238 
239 
243  virtual osg::Node* getOrCreateSensorNode(int diguyMat);
244 
246  virtual DtFxCollisionVolumeInterface* addCollisionVolume();
247 
249  virtual void destroyCollisionVolume(DtFxCollisionVolumeInterface* volume);
250 
252  virtual DtFxForceInterface* addGlobalForce();
253 
255  virtual void destroyGlobalForce(DtFxForceInterface* volume);
257 
258 
259  DtFxParticleVertex* get_vertbuffer();
260 
261  virtual bool revertItem(DtFxParticleDesc* item);
262  virtual void saveItem(DtFxParticleDesc* item);
264  virtual std::string saveFiles();
265 
267  virtual void createDescBackups();
268 
270  static DtFxParticleSystemManager* instance(DtDe& de);
271 
273  virtual diguyParticleManager* getDiguyParticleManager();
274 
276  virtual void initSystem();
277 
279  virtual void createParticleDrawable();
280 
282  virtual bool hasDescription(const std::string& name);
284  virtual void slot_reloadShaders();
285 
287  virtual void setWireFrameMode(bool wireframeMode);
288 
290  virtual void setTextureMode(bool textureMode);
291 
293  virtual DtFxParticleSystem* createSystem(const std::string& name);
295  virtual void destroySystem(DtFxParticleSystem* system);
296 
298  virtual void updateParticles(double simTime);
299 
301  bool getTerrainOrPropIntersection(const osg::Vec3d& startPos, const osg::Vec3d& endPos,
302  osg::Vec3d& result) const;
303 
305  virtual void addGlobalForce(DtFxForce* force);
306 
308  virtual void removeGlobalForce(DtFxForce* force);
309 
311  const DtFxForceArray& globalForces() const;
312 
314  DtFxForceArray& globalForces();
315 
317  const DtFxCollisionObjectArray& collisionObjects() const;
318 
320  DtFxCollisionObjectArray* collisionObjectsPtr();
321 
322  virtual void addDescToTextureLoad(bdiParticleDesc* desc);
323 
325  tbb::mutex& systemDataMutex();
326 
328  tbb::mutex& lightMutex();
329 
331  const std::set<std::string>& fileNamesList();
332 
334  DtFxParticleSystemArray& previewArray();
335 
337  DtFxParticleSystemArray& systemArray();
338 
340  DtFxParticleSystemHolderArray& testHolderArray();
341 
343  virtual bool* previewAutoMovePtr();
345  virtual float* previewAutoMoveSpeedPtr();
346  virtual bdiVec3f* previewAutoMoveRadiusPtr();
347 
349  virtual void recompileScripts();
350 
352  virtual void addDebugDrawer(DtFxDebugDrawCallbackInterface* drawer);
353 
357  virtual bool anyToUpdateCullDraw(void);
358 
360  virtual void setPauseAllSystems(bool val);
362  virtual bool pauseAllSystems() const ;
363 
365  virtual void setGlobalControlActive(bool val);
367  virtual bool globalControlActive() const;
368 
369  protected:
370 
371  virtual diguyParticleSystem* create_transient_system(DtFxParticleDesc* desc, float life_time_override = -1.0f);
372  virtual diguyParticleSystem* create_preview_system(DtFxParticleDesc* desc);
373  virtual DtFxParticleSystem* shared_creation(DtFxParticleDesc* desc);
374  virtual void create_child_systems(DtFxParticleDesc* desc, DtFxParticleSystem* psystem, bool transient);
375  virtual void update_preview(const float quantum);
376  virtual void cull(DtFxParticleSystemArray& input, osg::Polytope& polytope, bool shadow_pass, std::vector< DtFxParticleSystem*>& results);
377 
379  virtual osg::ref_ptr<osg::Texture2D> loadTexture(const char* txName);
380 
382  virtual bool anyActive(DtFxParticleSystemArray& input);
383 
385  virtual void slot_coordinateSystemChanged();
386 
387 
388  protected:
389  mutable tbb::mutex m_mutex_critical_data;
390 
391  mutable tbb::mutex m_mutex_texture_data;
392 
393  // this seems to be needs to protect the light manager
394  mutable tbb::mutex m_mutex_light_objects;
395 
396  bdiParticleDescArray m_descs;
397  bdiParticleDescArray m_backup_descs;
398 
399  bdiParticleDescArray m_init_texture_queue;
400 
401  DtFxParticleSystemArray m_psystems;
402 
403  DtFxParticleSystemArray m_trans_systems;
404 
405  DtFxParticleSystemArray m_preview_array;
406 
408  DtFxParticleSystemHolderArray m_test_holder_array;
409 
410  DtFxForceArray m_global_forces;
411 
413 
417 
418  // pointer from the gpu
420 
421  float myWindSpeed;
423 
425  bdiFarPosition myPreviewCenter;
426  std::set<std::string> myFileNamesList;
427  std::vector< DtFxParticleSystem*> myViewFrustumSystems;
428 
430 
433  std::map<int, osg::ref_ptr<osg::Node> > mySensorMap;
434  bdiFarPosition myEyePosition;
435 
436  DtFxCollisionObjectArray myCollisionObjects;
437 
438  // stats tracking
445 
448 
456 
457  osg::Polytope myCullPolytop;
458 
459  std::vector<DtFxDebugDrawCallbackInterface*> myExtraDebugDrawObjects;
460 
462 
464 
467  DtCoordinateSystem* myCoordinateSystem = nullptr;
468 
469  };
470 
471 
472 }
double myLastUpdateTime
Definition: DtFxParticleSystemManager.h:447
int myTotalVertCount
Definition: DtFxParticleSystemManager.h:442
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:443
bdiFarPosition myPreviewCenter
Definition: DtFxParticleSystemManager.h:425
tbb::mutex m_mutex_critical_data
Definition: DtFxParticleSystemManager.h:389
DtFxParticleSystemManager is the manager for all the particle systems and descriptions diguy sdk comm...
Definition: DtFxParticleSystemManager.h:47
float myStatsUpdateTime
Definition: DtFxParticleSystemManager.h:439
float myWindDirection
Definition: DtFxParticleSystemManager.h:422
std::vector< DtSceneRoot > DtSceneRootList
A list of DtOsgRenderer::SceneRoots.
Definition: DtSceneRoot.h:135
class that allows clients to add collision objects (no export of virtual base class) ...
Definition: DtFxCollisionVolumeInterface.h:18
bdiFarPosition myEyePosition
Definition: DtFxParticleSystemManager.h:434
float myStatsDrawLastTime
Definition: DtFxParticleSystemManager.h:441
DT_DLL_tdbutil void ps(int indent_level)
bdiParticleDescArray m_descs
Definition: DtFxParticleSystemManager.h:396
Definition: featureContext.h:37
int m_draw_debug_visuals
Definition: DtFxParticleSystemManager.h:414
DtOsgIntersector is the OSG-specific implementation of the DtIntersector class. It provides a variety...
Definition: DtOsgIntersector.h:66
tbb::mutex m_mutex_texture_data
Definition: DtFxParticleSystemManager.h:391
std::vector< DtFxParticleSystem * > myViewFrustumSystems
Definition: DtFxParticleSystemManager.h:427
DtFxParticleSystemArray m_preview_array
Definition: DtFxParticleSystemManager.h:405
virtual void set_draw_placeholder_master_switch(int draw)
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:184
#define DT_DLL_VRVFX
Definition: vrvFx.h:20
DtOsgIntersector * myIntersector3dModelSet
Definition: DtFxParticleSystemManager.h:461
Contains DLL export macros.
bdiParticleDescArray m_init_texture_queue
Definition: DtFxParticleSystemManager.h:399
virtual int get_draw_placeholder_master_switch() const
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:186
std::vector< DtFxDebugDrawCallbackInterface * > myExtraDebugDrawObjects
Definition: DtFxParticleSystemManager.h:459
float m_water_height
Definition: DtFxParticleSystemManager.h:415
DtFxParticleSystemArray m_trans_systems
Definition: DtFxParticleSystemManager.h:403
Contains particle system class.
DtSceneRootList myIntersectionRoots
Definition: DtFxParticleSystemManager.h:463
DtFxParticleVertex * m_vertbuffer
Definition: DtFxParticleSystemManager.h:419
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:169
DtDe & myDe
Definition: DtFxParticleSystemManager.h:431
DtFxCollisionObjectArray myCollisionObjects
Definition: DtFxParticleSystemManager.h:436
std::set< std::string > myFileNamesList
Definition: DtFxParticleSystemManager.h:426
DtSignalConnectionManager myConnections
Definition: DtFxParticleSystemManager.h:429
bdiVec3f myPreviewAutoMoveRadius
Definition: DtFxParticleSystemManager.h:455
virtual void set_draw_placeholder(int draw)
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:180
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:424
virtual int get_draw_placeholder() const
compatibility with diguy effects
Definition: DtFxParticleSystemManager.h:182
tbb::mutex m_mutex_light_objects
Definition: DtFxParticleSystemManager.h:394
DtFxParticleDesc * m_preview_desc
Definition: DtFxParticleSystemManager.h:412
bool myPreviewAutoMove
public to allow the UI to edit
Definition: DtFxParticleSystemManager.h:450
The DtCoordinateSystem is used to manage the current coordinate system of the scene.
Definition: DtCoordinateSystem.h:40
bool myPauseAllSystems
Definition: DtFxParticleSystemManager.h:451
std::map< int, osg::ref_ptr< osg::Node > > mySensorMap
Definition: DtFxParticleSystemManager.h:433
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:233
Contains makVrv::DtSceneRoot class.
Base class to provide boost signal/slot management.
bdiParticleDescArray m_backup_descs
Definition: DtFxParticleSystemManager.h:397
class that wraps the particle manager in vrvFx in a vrv friendly layer
Definition: DtParticleSystemManagerInterface.h:36
float myStatsDrawTime
Definition: DtFxParticleSystemManager.h:440
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:188
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:72
osg::Polytope myCullPolytop
Definition: DtFxParticleSystemManager.h:457
float myPreviewAutoMoveSpeed
public to allow the UI to edit
Definition: DtFxParticleSystemManager.h:454
osg::ref_ptr< osg::MatrixTransform > myParticleRendererGroup
Definition: DtFxParticleSystemManager.h:446
osg::ref_ptr< DtFxOsgParticleDrawable > myFxOsgParticleDrawable
Definition: DtFxParticleSystemManager.h:432
DtFxParticleSystemHolderArray m_test_holder_array
array for additional test systems
Definition: DtFxParticleSystemManager.h:408
DtFxParticleSystemArray m_psystems
Definition: DtFxParticleSystemManager.h:401
bool myGlobalControlActive
Definition: DtFxParticleSystemManager.h:452
int m_clear_derived_update_flag_on_next_update
Definition: DtFxParticleSystemManager.h:416
int myNumSystemsDrawn
Definition: DtFxParticleSystemManager.h:444
DtFxForceArray m_global_forces
Definition: DtFxParticleSystemManager.h:410
a subclass of bdiParticleDesc, currently reimplements all of configuration file reading and writing...
Definition: DtFxParticleSystem.h:113
float myWindSpeed
Definition: DtFxParticleSystemManager.h:421

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)