VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtDiGuyScenario.h
Go to the documentation of this file.
1 /****************************************************************************
2 * Copyright (c) 2020 VT MAK
3 * All rights reserved.
4 * ***************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <string>
13 #include <list>
14 
15 #include <vrvDiGuy/vrvDiGuy.h>
17 
18 #include <vrvCore/DtUniqueID.h>
19 
22 #include <vrvUtil/DtUnicode.h>
23 
26 
27 #include <vlutil/vlString.h>
28 #include <matrix/vlVector.h>
29 #include <osg/Group>
30 
31 #include <tbb/tbb.h>
32 #include <tbb/mutex.h>
33 
34 class diguyScenario;
35 class diguyCharacter;
36 class DtCoordTransform;
37 
38 
39 namespace makArchives
40 {
41  class DtDiGuySettings;
42 }
43 
44 namespace makVrv
45 {
46  class DtDe;
47  class DtWindow;
48  class DtDiGuyOsgRootNode;
49  class DtDiGuyInstanceTboUpdaterJob;
50  class DtDiGuyScenario;
51  class DtDiGuyInstanceDrawable;
52 
53  struct DtDiGuyCullData;
54 
57  {
58  float myDistance;
59  float mySpeed;
60  float myDuration;
61 
62  DtVector32 myDeltaPos;
63  float myRot;
64 
65  DtVector32 myBaseDeltaPos;
67  };
68 
69 
70 
74  {
75  public:
76 
77  typedef std::list<DtString> StringList;
78  typedef std::vector<StringList> StringListVec;
79 
80  // Static accessor: creates a new instance or, if one is already associated
81  // with DtDe instance, return the existing instance. The visual component
82  // (needed for graphical applications) can be initialized now or later.
83  static DtDiGuyScenario& instance(DtDe& de, bool initVisualComponent = true);
84 
85  // For graphical applications, this must be called, but it can be called at
86  // the last possible moment. It calls, or enables the calling of, functions
87  // that are somewhat more time-consuming.
88  void initializeVisualComponent();
89 
90  // This returns an instance of DtDiGuyScenario in which the visual component
91  // has not been initialized. If this is not a graphical application, it will
92  // not be possible to initialize the visual component.
93  static DtDiGuyScenario* lightweight_instance( const std::string& dataPath );
94 
96  virtual ~DtDiGuyScenario();
97 
99  diguyScenario& scenario();
100 
101  virtual void clearScene();
102 
104  virtual osg::Node* characterRoot();
105 
107  virtual int useGuides();
109  virtual float guideSyncGain();
110 
112  virtual int useInstancing();
113 
115  virtual bool useMultithreadedCull();
116 
118  virtual bool useOctree();
119 
121  std::string findCharacterName(DtElementID parentSceneObjectID);
122 
124  int getSupportsWeightVariations(DtElementID parentSceneObjectID);
125 
127  bool evalScript(const std::string& script);
128 
133 
135  int getNumCharacterTypes();
137  const char* getCharacterTypeAtIndex(int index);
139  int getCharacterTypeNumAppearances(const char* typeName);
141  const char* getCharacterTypeAppearanceAtIndex(const char* typeName, int index);
143  int getCharacterTypeNumGestures(const char* typeName);
145  const char* getCharacterTypeGestureAtIndex(const char* typeName, int index);
146 
149  const char* getHandItemClass(const char* typeName);
150  int getNumHandItemsInClass(const char* className);
152  const char* getHandItemFromClass(const char* className, int index);
153 
155  int getCharacterTypeNumHeads(const char* typeName, const char* appearanceName);
157  const char* getCharacterTypeHeadAtIndex(const char* typeName, const char* appearanceName, int index);
158 
160  int getCharacterTypeNumActions(const char* typeName);
162  const char* getCharacterTypeActionAtIndex(const char* typeName, int index);
163 
165  float getCharacterTypeActionDuration(const char* typeName, const char* actionName);
167  float getCharacterTypeActionSpeed(const char* typeName, const char* actionName);
170  const char* getCharacterTypeActionPosture(const char* typeName, const char* actionName);
174  const char* getCharacterTypeActionDirection(const char* typeName, const char* actionName);
179  const char* getCharacterTypeActionPrimaryVariant(const char* typeName, const char* actionName);
180 
182  int getCharacterTypeTransitionInfo(const char* typeName, const char* actionFrom, const char* actionTo, DtDiguyTransitionInfo& info);
183 
196 
199  int getNumTypeMapEntries();
200 
202  const char* getTypeMapCharacterType(int index);
203 
205  const char* getTypeMapCharacterAppearance(int index);
206 
208  const char* getTypeMapFieldValue(int index, const char* fieldName);
209  const char* getTypeMapFieldValue(int index, int fieldIndex);
210 
211  // For finding out the total number of possible values for the first field of a character's type map
212  // Class is something like: animal, effect, human, human_on_vehicle, object, vehicle
213  int getNumTypeMapCharacterClasses();
214  const char* getTypeMapCharacterClassAtIndex(int index);
215 
216  // For finding out the total number of possible values for the second field of a character's type map
217  // Category depends on class (above)
218  int getNumTypeMapCategories(const char* character_class);
219  const char* getTypeMapCategoryAtIndex(const char* character_class, int index);
220 
221  // For finding out the total number of possible values for the third field of a character's type map
222  int getNumTypeMapSubcategories(const char* character_class,
223  const char* category);
224  const char* getTypeMapSubcategoryAtIndex(const char* character_class,
225  const char* category,
226  int index);
227 
230  virtual void getAppearancesMatchingDiGuyTypeMap(const DtString& characterType, std::vector<DtString>& fields, std::vector<DtString>& retAppearances);
233  virtual void getAppearancesMatchingPartialDiGuyTypeMap(const DtString& characterType, std::vector<DtString>& partialFields,
234  std::vector<int>& fieldIndices, std::vector<DtString>& retAppearances);
238  virtual void getTypeMapFieldOptions(const DtString& characterType, std::vector<DtString>& fields, StringListVec& retValues);
240  virtual void getTypeMapPartialFieldOptions(const DtString& characterType, std::vector<DtString>& partialFields, std::vector<int>& fieldIndices,
241  StringListVec& retValues);
242 
243  virtual void initTypeMapNodes();
244 
246  static osg::Group* getDiGuyAttachGroup();
247 
249  static osg::Group* getDiGuyInstancingAttachGroup();
250 
252  virtual bool isGeocentric();
253 
254 
256  virtual void createOctreeNode(DtDiGuyOsgRootNode* pChar);
258 
260  virtual void destroyOctreeNode(DtDiGuyOsgRootNode* pChar);
261 
263  virtual void characterOctreeNodeUpdated( DtDiGuyOsgRootNode* pChar);
264 
266  virtual Octree_64* octree() { return myOctree; }
268 
270  virtual DtDe& getDe() { return myDe; }
271 
272  // runs octree cull and finished instancing group generation
273  virtual void cullAndUpdate(const Frustum_64& frustum, const DtDiGuyCullData& cullData);
274 
276  virtual DtDiGuyInstanceDrawable* instancedDrawable() { return myInstancedDrawable; }
277 
279  virtual void updateStats(int mask, double duration);
280 
281  protected:
282 
284  virtual void slot_terrainLoaded( const DtUnicode& terrain, bool reload );
285 
287  virtual void slot_windowDestroyed(DtWindow* window);
288 
290  virtual void slot_windowCreated(DtWindow* window);
291 
293  virtual void slot_ProfilingChanged(bool active);
294 
296  virtual void slot_reloadShader();
297 
299  virtual void slot_preDraw();
300 
302  virtual void slot_postDraw();
303 
305  virtual void slot_postUpdate();
306 
308  virtual void syncToSharedDiGuySettings();
309 
311  virtual void slot_diGuyInstancingEnabledChanged( bool enabled );
312 
314  virtual void slot_diGuyInstancedLodChanged( int lod );
315 
317  virtual void slot_diGuyVisualizeInstancingChanged( bool enabled );
318 
320  virtual void slot_diGuyMaxDrawDistanceChanged( float distance );
321 
323  virtual void slot_diGuyMaxMotionUpdateDistanceChanged(float distance);
324 
326  virtual void slot_diGuyMultiThreadUpdateChanged( bool enabled );
327 
328 
329  protected:
330 
331  // Internal helper function to get pointer to specific DI-Guy character
332  diguyCharacter* getCharacter(DtElementID parentSceneObjectID);
333 
334 
335  void updateScenario(double simTime);
336  void updateScenario();
337  void setComponentVisualizationMode(int mode);
338 
339  DtDiGuyScenario(DtDe& de);
340  DtDiGuyScenario(const std::string& dataPth);
341 
342  void createDiGuyScenario();
343 
344  void reloadConfigInfo();
345 
346  protected:
347  // Helper function called by other instance functions. If this is a graphical application,
348 // de must be set.
349  static DtDiGuyScenario* createInstance(DtDe& de, bool initVisualComponent = true);
350  static DtDiGuyScenario* createNonVisualInstance(const std::string& dataPath);
351 
352  static void slot_displayToBeDestroyed(const std::string& displayName, DtDe* de);
353 
354  protected:
355 
357  // True if myDe refers to a valid DtDe object, created by a graphical application, this will be true
358  // It might not be true if this instance was created by lightweight_instance()
360  diguyScenario* myScenario;
361 
369 
370  // settings
377 
378 
379  // True if initializeVisualComponent() has been called
382 
385 
386  std::string myAlternateDataPath; // use this when the De is not valid
388 
389  tbb::mutex myOctreeMutex;
392  // temp object, don't realloc every frame
393  tbb::concurrent_vector< DtDiGuyOsgRootNode*> myNoninstancedNodeArray;
394 
395  // stats
400 
401 
402  public:
404  static tbb::atomic<int> theStatNumCharInstanced;
405  };
406 
407 
408  DtCoordTransform getTopoToGeoc(const DtVector& location);
409 
410 }
virtual DtDe & getDe()
returns de
Definition: DtDiGuyScenario.h:270
bool myVisualComponentInitialized
Definition: DtDiGuyScenario.h:380
data that&#39;s passed around for culling
Definition: DtDiGuyOctreeCullGroup.h:35
Abstract Base class.
Definition: DtWindow.h:25
tbb::mutex myOctreeMutex
Definition: DtDiGuyScenario.h:389
Virtual base class.
Definition: DtVirtualBaseClass.h:22
osg::ref_ptr< DtDiGuyInstanceDrawable > myInstancedDrawable
Definition: DtDiGuyScenario.h:365
osg::ref_ptr< osg::Group > myCharacterRoot
Definition: DtDiGuyScenario.h:363
A unicode string.
Definition: DtUnicode.h:33
float mySpeed
Definition: DtDiGuyScenario.h:59
float myBaseDeltaRot
Definition: DtDiGuyScenario.h:66
osg::ref_ptr< osg::Group > myDiguyRoot
Definition: DtDiGuyScenario.h:362
diguyScenario * myScenario
Definition: DtDiGuyScenario.h:360
bool myDeIsValid
Definition: DtDiGuyScenario.h:359
Custom per character root node that does custom traversals and short circuits osg lod picking...
Definition: DtDiGuyOsgGraphicsLink.h:99
virtual Instance * createInstance()
Definition: bdiQPropTree_subclasses.h:693
bool myUseMultithreadedCull
Definition: DtDiGuyScenario.h:374
std::list< DtString > StringList
Definition: DtDiGuyScenario.h:77
There are nine DI-Guy type map fields.
Definition: DtDiGuyTypeMapFieldNode.h:34
bool myLightweightInstance
Definition: DtDiGuyScenario.h:381
double myFirstUpdateT
Definition: DtDiGuyScenario.h:367
osg::ref_ptr< osg::MatrixTransform > myInstancingRoot
Definition: DtDiGuyScenario.h:364
DtDiGuyTypeMapFieldNode myTypeMapFieldsRootNode
Definition: DtDiGuyScenario.h:383
Contains DLL export macros.
DtUniqueID DtElementID
The ElementID is a specific type of unique ID used to represent VR-Vantage uniquely defined elements...
Definition: DtUniqueID.h:26
int myUseInstancing
Definition: DtDiGuyScenario.h:371
int myStatOctreeUpdate
Definition: DtDiGuyScenario.h:396
float myGuideSyncGain
Definition: DtDiGuyScenario.h:376
helper struct for VRF transition code
Definition: DtDiGuyScenario.h:56
virtual Octree_64 * octree()
returns octree
Definition: DtDiGuyScenario.h:266
Contains makVrv::DtVirtualBaseClass class.
DtOctree class.
OctreeNode class.
DT_DLL_VRVCORE double distance(const makVrv::DtCoordinateSystem &, const DtVector &from, const DtVector &to)
Returns the distance from the two points.
float myDistance
Definition: DtDiGuyScenario.h:58
bool myHaveSetupTypeMapFieldsNodes
Definition: DtDiGuyScenario.h:384
DtCoordTransform getTopoToGeoc(const DtVector &location)
std::vector< StringList > StringListVec
Definition: DtDiGuyScenario.h:78
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:24
Octree datastructure for managing scene nodes.
Definition: DtOctree.h:27
std::vector< DtOctreeNode< T > * > NodeVector
Definition: DtOctree.h:79
double myPreviousUpdateTime
Definition: DtDiGuyScenario.h:368
tbb::concurrent_vector< DtDiGuyOsgRootNode * > myNoninstancedNodeArray
Definition: DtDiGuyScenario.h:393
static int theStatNumCharDrawn
Definition: DtDiGuyScenario.h:403
Octree_64::NodeVector myVisibleOctreeNodes
Definition: DtDiGuyScenario.h:391
Base class to provide boost signal/slot management.
DtVector32 myBaseDeltaPos
Definition: DtDiGuyScenario.h:65
DtDe & myDe
Definition: DtDiGuyScenario.h:356
DtSignalConnectionManager myConnections
Definition: DtDiGuyScenario.h:387
float myDuration
Definition: DtDiGuyScenario.h:60
const char int mode
Definition: ioapi.h:38
Contains makVrv::DtUniqueID type.
float myMaxMotionUpdateDistance
Definition: DtDiGuyScenario.h:375
Class that renders all the diguy instance objects in one osg drawable, major performance improvement...
Definition: DtDiGuyInstanceDrawable.h:26
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
int myUseGuides
Definition: DtDiGuyScenario.h:372
#define DT_DLL_VRVDIGUY
Definition: vrvDiGuy.h:21
Template for 32/64 bit bit frustums.
Definition: DtCamera.h:148
Octree_64 * myOctree
Definition: DtDiGuyScenario.h:390
bool myIsGeocentric
Definition: DtDiGuyScenario.h:366
std::string myAlternateDataPath
Definition: DtDiGuyScenario.h:386
float myStatOctreeUpdateTime
Definition: DtDiGuyScenario.h:397
float myStatPreviousOctreeUpdateTime
Definition: DtDiGuyScenario.h:398
bool myUseOctree
Definition: DtDiGuyScenario.h:373
static tbb::atomic< int > theStatNumCharInstanced
Definition: DtDiGuyScenario.h:404
float myRot
Definition: DtDiGuyScenario.h:63
DtVector32 myDeltaPos
Definition: DtDiGuyScenario.h:62
float myStatCulltime
Definition: DtDiGuyScenario.h:399
Owns a DiGuy scenario for the application.
Definition: DtDiGuyScenario.h:73
Contains the makVrv::DtDiGuyTypeMapFieldNode class declaration.
virtual DtDiGuyInstanceDrawable * instancedDrawable()
returns instance drawable singleton
Definition: DtDiGuyScenario.h:276

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)