VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtDiGuyCharacterModel.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2025 MAK Technologies, Inc.
3  * All rights reserved.
4  ****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvDiGuy/vrvDiGuy.h>
14 #include <osg/Geometry>
15 #include <osg/ref_ptr>
16 
17 #include <matrix/topoCoord.h>
18 
19 #include <boost/unordered_map.hpp>
20 
21 // TODO Turning this on causes crashes. Need to fix the logic.
22 //#define VISUALIZE_DIGUY_VELOCITY
23 
24 class diguyCharacter;
25 class diguyCharacterGuide;
26 class diguyGraphicsLink;
27 
28 namespace osg
29 {
30  class Group;
31 }
32 
33 namespace makVrv
34 {
35  class DtDeadReckonUpdater;
36 
37  class DtDiGuyOsgGraphicsLink;
38  class DtDiGuyScenario;
39 
40  class DtOsgSceneConnector;
41  class DtSceneObject;
42  class DtSceneObjectAgent;
43  class DtSceneObjectUpdater;
44  class DtOsgGizmoRenderer;
45  class DtDiGuyMotionController;
46 
47  struct DtDiguyLightConfig;
48 
49 
52  {
54  : myName()
55  , mySpeed( 0 )
56  , myUsePositioning( false )
57  , myOffset( 0, 0, 0 )
58  , myAutoTransition( 0 )
59  , myTransitionSpeed( 0 )
60  {
61  }
62 
63  std::string myName;
64  float mySpeed;
66  DtVector myOffset;
69 
70  };
71 
72 
73 // for debugging
75  {
76  std::string m_action;
77  double m_time;
78  };
79 
82  {
84  : myDesc( nullptr )
85  , myLink( nullptr )
86  , myIndex( -1 )
87  , myActive( false )
88  , myConnectionPoint( false )
89  {
90  }
91 
94 
95  // runtime data
96 
99  osg::Matrix myOffsetMat;
101  int myIndex;
103  bool myActive;
105  };
106 
107 
120  {
121  public:
122 
123  typedef std::list<DtDiGuyDebugEventStream> EventStreamList;
124 
125  public:
126 
129 
131  virtual ~DtDiGuyCharacterModel();
132 
133  private:
134 
136  DtDiGuyCharacterModel( const DtDiGuyCharacterModel& ) = delete;
137 
139  DtDiGuyCharacterModel& operator = ( const DtDiGuyCharacterModel& ) = delete;
140 
141  public:
142 
143  virtual void setModelDefinition(const std::string& modelDefinition);
144 
146  virtual void discoverDynamicRegions(const DtModelDefinition* definition);
147 
149  diguyCharacter* character();
150 
152  DtDiGuyScenario& getScenario();
153 
156  virtual const std::string& className() const;
157 
159  virtual void addToScene(const DtUniqueID& sceneObjectId, DtModelSetId modelSet,
160  int visualizerType);
161 
163  virtual void removeFromScene();
164 
168  void setPositionAndVelocityState(const DtVector& vrvLoc, const DtTaitBryan& vrvOri, const DtVector32& vrvVel,
169  const DtVector32& vrvAngularVel, bool needsTopoUpdate);
170 
173  virtual void setPosition(int vtx, const DtVector& position);
174  const DtVector& getPosition() { return myWorldPosition; }
175 
178  virtual void setPositionOffset(const DtVector& position);
179 
183  virtual void setOrientation(int vtx, const DtTaitBryan& orientation);
184  const DtTaitBryan& getOrientation() { return myWorldOrientation; }
185 
188  virtual void setOrientationOffset(const DtTaitBryan& orientationOffset);
189 
193  virtual void setPositionAndOrientation(int vtx, const DtVector& position, const DtTaitBryan& orientation);
194 
195 
199  virtual void setCharacterModel(const std::string& characterType);
200 
203 
205  virtual void setDefaultAppearance( const std::string& appearanceName );
207  virtual void setAppearance( const std::string& appearanceName );
208 
210  virtual void setHeadAppearance( const std::string& appearanceName );
212  virtual void setItemAppearance( const std::string& appearanceName );
214  virtual void setCharacterEquipment( const std::string& appearanceName );
215 
217  virtual void setUnit( unsigned short country, unsigned char service, unsigned short patch, bool setPersonal ) override;
219  virtual void setPersonalUnit( unsigned short country, unsigned char service, unsigned short patch ) override;
221  virtual void setRank( unsigned short country, unsigned char service, unsigned short patch ) override;
223  virtual void setCharacterName( const std::string& name ) override;
224 
226 
228  virtual void setFlamesPresent(bool val);
230  virtual void setEnginePlume(bool val);
232  virtual void setEngineSmoke(bool val);
234  virtual void setTrailState(bool val);
236  virtual void setLightState(unsigned int light, unsigned int lightState);
237 
238 
240  virtual void beginAppearanceEffect(const std::string& effect, const std::string& overrideLink,
241  float overrideScale, const DtVector& overrideOffset, float overrideDuration);
243  virtual void endAppearanceEffect(int instant, const std::string& effect, const std::string& overrideLink);
244 
246  virtual void executeGesture(const std::string& gestureName, int reps,
247  float overallDuration, float channelAWeight);
249  virtual void endGesture(const std::string& gestureName, float rampDown);
250 
251 
255  virtual void setEnableAnimationSmoothing(bool);
256 
258  virtual bool enableAnimationSmoothing() const;
260  virtual void setDesiredAction(const std::string& action, float speed);
261 
263  virtual void fireWeapon();
264 
271  virtual void forceAction( const std::string& action, float speed, bool usePositioning,
272  const DtVector& offset, int autoChooseTransitionBehavior, float transitionSpeedScale );
273 
275  virtual int currentArcChangeCb(diguyCharacter* character);
276 
278  virtual void forceTemporaryAction(const std::string& action, double duration);
279 
282  virtual void unforceAction();
283 
285  virtual void setSpeed(float speed);
286 
288  virtual void setPosture(int posture);
289 
291  virtual bool weaponDeployed() const override;
292 
294  virtual EntityStateListener::WeaponState weaponState() const override;
295 
297  virtual void setWeaponState(EntityStateListener::WeaponState deployed) override;
298 
299 
302  void setFullUpdateNeeded(bool updated);
303 
305  bool fullUpdateNeeded() const;
306 
309  virtual void die(const std::string& deathAction);
310 
312  virtual void revive(const std::string& aliveAction);
313 
315  virtual void setPaused(bool paused);
316 
318  bool paused() const;
319 
320  virtual bool getVRForcesEntity() { return myVRForcesEntity; }
321 
325  bool autoGenerateActions() const;
326 
330  bool autoGenerateActionSpeed() const;
331 
334  virtual void setModelScalingEnabled(bool b);
335 
336  virtual void setIsSupportModel(bool isSupport);
337 
339  virtual void setEmbarked(bool embarkedState);
340  virtual bool embarked() const;
341 
343  virtual void setStationName(int name);
344  virtual int getStationName() const;
345 
347  virtual void setStationNumber(DtU16 number);
348 
349  virtual void setScale(const DtVector& scale);
350  virtual void setWeight(float weightScale);
351 
352  virtual void setPartOrientation(int partNumber,
353  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
354 
355  virtual void setPartTranslation(int partNumber,
356  const DtVector& translation, const DtVector& velocity);
357 
359  virtual void setLinkRotationOverride(const std::string& linkName, const DtTaitBryan& rotation,
360  float rampTime);
361 
363  virtual void setLinkTranslationOverride(const std::string& linkName, const DtVector& offsets,
364  float rampTime);
365 
367  virtual void setPartVisibility(int partNumber, bool visible);
368 
370  virtual void removePart( unsigned int partNumber );
371 
375  void updateAimingAndGaze();
376 
378  void setupGuides();
379  virtual diguyCharacterGuide* getGuide();
380  virtual void setGuide(diguyCharacterGuide* guide);
381 
387  virtual void setupCoordSystem( const DtVector& vrvLoc, bool overrideEmbarked = false );
388 
390  virtual bool getAndResetTerrainHasChangedBit();
391 
393  virtual void setTerrainHasChanged();
394 
395  // If coordinate system is geocentric, will output orientation and velocity values
396  // That make sense in NED paradigm. Otherwise, output values will be the same
397  // as input ones.
398  void convertToLocalFrame(
399  const DtVector32& velocity, const DtTaitBryan& orientation,
400  DtVector32& outVelocity, DtTaitBryan& outOrientation);
401 
402  bool getIsVehicle() { return m_vehicle; }
403 
404  virtual void setSelected(bool value);
405  virtual bool selected();
406  virtual void setTextureVariations(std::vector<DtCharacterTextureVariationInfo>& varationInfoArray, int force) override;
407 
409  virtual void setDynamicSensorRegion(const std::string& region, bool state);
410 
412  virtual bool dynamicSensorRegion(const std::string& region);
413 
415  virtual DtVector positionOffsetWorld();
416 
418  virtual bool hasPositionOffset();
419 
423  virtual DtTaitBryan orientationOffsetWithBase(const DtTaitBryan& baseOri);
424 
426  virtual bool hasOrientationOffset();
427 
431  virtual void setUseTransitions(bool use);
432 
434  virtual bool useTransitions();
435 
437  virtual void setEnabled(bool enabled);
438 
440  virtual bool enabled();
441 
443  virtual void setIsOccupant(bool occupant);
444 
446  virtual bool occupant();
447 
448  virtual DtSceneObject* sceneObject() { return mySceneObject; }
449 
451  virtual bool isPostureTransitioning();
452 
455  virtual bool usingActionPositioningFlag();
456 
458  virtual void updateLights();
459 
461  virtual void resetLightsWithLink(DtDiGuyOsgGraphicsLink* link);
462 
464  virtual void draw_character_skeleton(DtOsgGizmoRenderer* renderer);
465 
467  virtual void draw_movement_info(DtOsgGizmoRenderer* renderer);
468 
470  std::vector<DtDiGuyLightRtInfo>& lights();
471 
472  // not active yet
473  const EventStreamList& recentActions() { return myRecentActions; }
474  const EventStreamList& recentHandItems() { return myRecentHandItems; }
475 
476  public:
477 
479  static void setDiGuyAttachGroup( osg::Group* diguy_attach_pt ) { DiguyAttachGroup = diguy_attach_pt; }
480 
481  protected:
482 
483  virtual void setSceneObjectIdOnCollisionBoxes();
484 
486  void slot_modelInstanceToBeDestroyed(DtModelInstance*, DtModel*);
487 
489  void slot_modelInstanceCreated(DtModelInstance*, DtModel*);
490 
491  //helper function to update model instance when appearance/model changes
492  virtual void updateModelInstance();
493 
496  virtual void updateVisibility();
497 
499  virtual void createLights(int id);
500 
503  virtual void setCharacter(diguyCharacter* character);
504 
506  virtual bool shouldUpdateAppearance(const std::string& appearanceName) const;
507 
509  virtual void setAndTrackAppearance(const std::string& appearanceName);
510 
511  protected:
512 
514 
515  DtTaitBryan myWorldOrientation;
516  DtVector myWorldPosition;
517 
518  diguyCharacter* myCharacter;
519  diguyCharacterGuide* myGuide;
520 
522 
531  bool m_vehicle;
534 
535  // For positionOffset so that it can
536  // get a good initial orientation
538 
539  float m_aim_az; // azimuth
540  float m_aim_el; // elevation
541  float m_gaze_az;
542  float m_gaze_el;
544 
547 
548  // Perform transitions and ramp downs
549  // between animations (for occupants / drivers)
551 
552  // Is this DI-Guy an occupant / driver
554 
555  bool myEnabled;
556  //bool myUseGeocentricCoords;
558 
560 
561  typedef boost::unordered_map<std::string, bool> SensorRegionStateMap;
563 
564  std::vector<DtDiGuyLightRtInfo> myLights;
565 
566  // For converting from geocentric frame of reference to topographic one
567  DtCoordTransform m_geocToTopo;
568  DtCoordTransform m_topoToGeoc;
569 
570  std::list< DtDiGuyDebugEventStream> myRecentActions;
571  std::list< DtDiGuyDebugEventStream> myRecentHandItems;
572 
573 #ifdef VISUALIZE_DIGUY_VELOCITY
574  friend class DtDiGuyOsgGraphicsLink;
575  osg::ref_ptr<osg::Geometry> myDesiredPositionLine;
576  osg::ref_ptr<osg::Geometry> myDesiredVelocityLine;
577  osg::ref_ptr<osg::Geometry> myVelocityLine;
578  osg::ref_ptr<osg::Geometry> myCordSys;
579  osg::ref_ptr<osg::Geometry> myCurrentDesiredPositionLine;
580  osg::ref_ptr<osg::Geode> myVizualizers;
581  osg::ref_ptr<osg::MatrixTransform> myVizualizersTransform;
582 #endif
583 
584  std::list<std::string> myAliveStateDynamicRegions;
585  std::list<std::string> myWeaponFireDynamicRegions;
586 
588 
589  protected:
590  static osg::Group* DiguyAttachGroup;
591 
592  };
593 
594 }
const EventStreamList & recentActions()
Definition: DtDiGuyCharacterModel.h:473
float m_gaze_el
Definition: DtDiGuyCharacterModel.h:542
The base class for all model instances.
Definition: DtModelInstance.h:41
DtDiGuyLightRtInfo()
Definition: DtDiGuyCharacterModel.h:83
const DtDiguyLightConfig * myDesc
config data
Definition: DtDiGuyCharacterModel.h:93
bool myGenerateActionSpeedFlag
Definition: DtDiGuyCharacterModel.h:526
helper struct for data loaded from light config file
Definition: DtDiGuyScenario.h:68
bool mySelected
Definition: DtDiGuyCharacterModel.h:557
static osg::Group * DiguyAttachGroup
Definition: DtDiGuyCharacterModel.h:590
bool myConnectionPoint
Definition: DtDiGuyCharacterModel.h:104
bool myCouldBePostureTransitioning
Definition: DtDiGuyCharacterModel.h:559
boost::unordered_map< std::string, bool > SensorRegionStateMap
Definition: DtDiGuyCharacterModel.h:561
float m_gaze_az
Definition: DtDiGuyCharacterModel.h:541
bool myEnabled
Definition: DtDiGuyCharacterModel.h:555
float m_aim_az
Definition: DtDiGuyCharacterModel.h:539
std::list< std::string > myWeaponFireDynamicRegions
Definition: DtDiGuyCharacterModel.h:585
DtLastForceActionParams()
Definition: DtDiGuyCharacterModel.h:53
diguyCharacter * myCharacter
Definition: DtDiGuyCharacterModel.h:518
DtDiGuyScenario * myDtScenario
Definition: DtDiGuyCharacterModel.h:513
static void setDiGuyAttachGroup(osg::Group *diguy_attach_pt)
where diguys attach to the scene graph
Definition: DtDiGuyCharacterModel.h:479
std::string myName
Definition: DtDiGuyCharacterModel.h:63
DtVector myWorldPosition
Definition: DtDiGuyCharacterModel.h:516
bool myIsOccupant
Definition: DtDiGuyCharacterModel.h:553
diguyCharacterGuide * myGuide
Definition: DtDiGuyCharacterModel.h:519
osg::Matrix myOffsetMat
Definition: DtDiGuyCharacterModel.h:99
Contains the makVrv::DtCharacterModel class declaration.
DI-Guy Character model. This class manages a DI-Guy character (diguyCharacter) instance and makes cal...
Definition: DtDiGuyCharacterModel.h:119
a class to quickly render a bunch of basic primitives as debugging aids basic overview, create an adapter that inherits from DtDebugDrawCallbackInterface then call DtOsgGizmoRenderer::addDebugDrawerCallback() to register it with the system. Your code will then get called while the system is drawing, user should then add various primitives that will get rendered in one big batch after all the callbacks. See DtOsgLightDebugAdapter::drawDebugLines() for an example.
Definition: DtOsgGizmoRenderer.h:44
float mySpeed
Definition: DtDiGuyCharacterModel.h:64
std::list< std::string > myAliveStateDynamicRegions
Definition: DtDiGuyCharacterModel.h:584
bool m_vehicle
Definition: DtDiGuyCharacterModel.h:531
bool m_turreted_vehicle
Definition: DtDiGuyCharacterModel.h:530
A special human character model.
Definition: DtCharacterModel.h:26
Contains DLL export macros.
int myIndex
index of light in light point drawable
Definition: DtDiGuyCharacterModel.h:101
A model definition Interaction any number of named parameters, and also can be used to store cached d...
Definition: DtModelDefinition.h:42
DtDiGuyMotionController * myDiGuyMotionController
Definition: DtDiGuyCharacterModel.h:587
helper struct for tracking an added light
Definition: DtDiGuyCharacterModel.h:81
SensorRegionStateMap mySensorRegionMap
Definition: DtDiGuyCharacterModel.h:562
float m_aim_el
Definition: DtDiGuyCharacterModel.h:540
bool myActive
is it on
Definition: DtDiGuyCharacterModel.h:103
virtual DtSceneObject * sceneObject()
Definition: DtDiGuyCharacterModel.h:448
int myStationName
Definition: DtDiGuyCharacterModel.h:521
bool myEnableAnimationSmoothing
Definition: DtDiGuyCharacterModel.h:545
bool myVRForcesEntity
Definition: DtDiGuyCharacterModel.h:529
const EventStreamList & recentHandItems()
Definition: DtDiGuyCharacterModel.h:474
bool m_character_can_aim
Definition: DtDiGuyCharacterModel.h:543
std::vector< DtDiGuyLightRtInfo > myLights
Definition: DtDiGuyCharacterModel.h:564
bool myUsingActionPositioningFlag
Definition: DtDiGuyCharacterModel.h:524
diguyGraphicsLink * myLink
pointer to light link
Definition: DtDiGuyCharacterModel.h:98
DtVector myOffset
Definition: DtDiGuyCharacterModel.h:66
std::list< DtDiGuyDebugEventStream > EventStreamList
Definition: DtDiGuyCharacterModel.h:123
DtUniqueID mySceneObjectId
Definition: DtDiGuyCharacterModel.h:532
int myAutoTransition
Definition: DtDiGuyCharacterModel.h:67
const DtTaitBryan & getOrientation()
Definition: DtDiGuyCharacterModel.h:184
double m_time
Definition: DtDiGuyCharacterModel.h:77
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
bool myUsePositioning
Definition: DtDiGuyCharacterModel.h:65
DtTaitBryan myWorldOrientation
Definition: DtDiGuyCharacterModel.h:515
struct for the last action that happened
Definition: DtDiGuyCharacterModel.h:51
WeaponState
Definition: DtEntityStateListener.h:101
std::string m_action
Definition: DtDiGuyCharacterModel.h:76
Definition: DtDiGuyCharacterModel.h:74
DtCoordTransform m_topoToGeoc
Definition: DtDiGuyCharacterModel.h:568
virtual bool getVRForcesEntity()
Definition: DtDiGuyCharacterModel.h:320
bool myTerrainHasChanged
Definition: DtDiGuyCharacterModel.h:546
A DtSceneObject represents an object that can be positioned in the scene by (possibly) attaching it t...
Definition: DtSceneObject.h:44
float myTransitionSpeed
Definition: DtDiGuyCharacterModel.h:68
A model which owns a single model instance. A DtModel is a managing container for a single DtModelIns...
Definition: DtModel.h:56
bool myUseTransitions
Definition: DtDiGuyCharacterModel.h:550
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:76
bool myGenerateAutomaticActionFlag
Definition: DtDiGuyCharacterModel.h:525
bool getIsVehicle()
Definition: DtDiGuyCharacterModel.h:402
#define DT_DLL_VRVDIGUY
Definition: vrvDiGuy.h:21
std::list< DtDiGuyDebugEventStream > myRecentActions
Definition: DtDiGuyCharacterModel.h:570
A DiGuy based motion controller for objects which have a DI Guy character. This has been extracted fr...
Definition: DtDiGuyMotionController.h:33
DtModelSetId
Definition: DtModelSetEnums.h:19
voidpf uLong offset
Definition: ioapi.h:42
const DtVector & getPosition()
Definition: DtDiGuyCharacterModel.h:174
bool myAppearanceHasBeenSet
Definition: DtDiGuyCharacterModel.h:523
DtLastForceActionParams myLastForceAction
Definition: DtDiGuyCharacterModel.h:533
bool myEmbarkedFlag
Definition: DtDiGuyCharacterModel.h:528
Owns a DiGuy scenario for the application.
Definition: DtDiGuyScenario.h:87
EntityStateListener::WeaponState myWeaponState
Definition: DtDiGuyCharacterModel.h:527
DtSceneObject * mySceneObject
Definition: DtDiGuyCharacterModel.h:537
std::list< DtDiGuyDebugEventStream > myRecentHandItems
Definition: DtDiGuyCharacterModel.h:571
DtCoordTransform m_geocToTopo
Definition: DtDiGuyCharacterModel.h:567

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)