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) 2023 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;
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:
137  DtDiGuyCharacterModel& operator=(const DtDiGuyCharacterModel&) = delete;
138 
139  public:
140 
141  virtual void setModelDefinition(const std::string& modelDefinition);
142 
144  virtual void discoverDynamicRegions(const DtModelDefinition* definition);
145 
147  diguyCharacter* character();
148 
150  DtDiGuyScenario& getScenario();
151 
154  virtual const std::string& className() const;
155 
157  virtual void addToScene(const DtUniqueID& sceneObjectId, DtModelSetId modelSet,
158  int visualizerType);
159 
161  virtual void removeFromScene();
162 
166  void setPositionAndVelocityState(const DtVector& vrvLoc, const DtTaitBryan& vrvOri, const DtVector32& vrvVel,
167  const DtVector32& vrvAngularVel, bool needsTopoUpdate);
168 
171  virtual void setPosition(int vtx, const DtVector& position);
172  const DtVector& getPosition() { return myWorldPosition; }
173 
176  virtual void setPositionOffset(const DtVector& position);
177 
181  virtual void setOrientation(int vtx, const DtTaitBryan& orientation);
182  const DtTaitBryan& getOrientation() { return myWorldOrientation; }
183 
186  virtual void setOrientationOffset(const DtTaitBryan& orientationOffset);
187 
191  virtual void setPositionAndOrientation(int vtx, const DtVector& position, const DtTaitBryan& orientation);
192 
193 
197  virtual void setCharacterModel(const std::string& characterType);
198 
201 
203  virtual void setDefaultAppearance( const std::string& appearanceName );
205  virtual void setAppearance( const std::string& appearanceName );
206 
208  virtual void setHeadAppearance( const std::string& appearanceName );
210  virtual void setItemAppearance( const std::string& appearanceName );
212  virtual void setCharacterEquipment( const std::string& appearanceName );
213 
215  virtual void setUnit( unsigned short country, unsigned char service, unsigned short patch, bool setPersonal ) override;
217  virtual void setPersonalUnit( unsigned short country, unsigned char service, unsigned short patch ) override;
219  virtual void setRank( unsigned short country, unsigned char service, unsigned short patch ) override;
221  virtual void setCharacterName( const std::string& name ) override;
222 
224 
226  virtual void setFlamesPresent(bool val);
228  virtual void setEnginePlume(bool val);
230  virtual void setEngineSmoke(bool val);
232  virtual void setTrailState(bool val);
234  virtual void setLightState(unsigned int light, unsigned int lightState);
235 
236 
238  virtual void beginAppearanceEffect(const std::string& effect, const std::string& overrideLink,
239  float overrideScale, const DtVector& overrideOffset, float overrideDuration);
241  virtual void endAppearanceEffect(int instant, const std::string& effect, const std::string& overrideLink);
242 
244  virtual void executeGesture(const std::string& gestureName, int reps,
245  float overallDuration, float channelAWeight);
247  virtual void endGesture(const std::string& gestureName, float rampDown);
248 
249 
253  virtual void setEnableAnimationSmoothing(bool);
254 
256  virtual bool enableAnimationSmoothing() const;
258  virtual void setDesiredAction(const std::string& action, float speed);
259 
261  virtual void fireWeapon();
262 
269  virtual void forceAction( const std::string& action, float speed, bool usePositioning,
270  const DtVector& offset, int autoChooseTransitionBehavior, float transitionSpeedScale );
271 
273  virtual int currentArcChangeCb(diguyCharacter* character);
274 
276  virtual void forceTemporaryAction(const std::string& action, double duration);
277 
280  virtual void unforceAction();
281 
283  virtual void setSpeed(float speed);
284 
286  virtual void setPosture(int posture);
287 
289  virtual bool weaponDeployed() const override;
290 
292  virtual EntityStateListener::WeaponState weaponState() const override;
293 
295  virtual void setWeaponState(EntityStateListener::WeaponState deployed) override;
296 
297 
300  void setFullUpdateNeeded(bool updated);
301 
303  bool fullUpdateNeeded() const;
304 
307  virtual void die(const std::string& deathAction);
308 
310  virtual void revive(const std::string& aliveAction);
311 
313  virtual void setPaused(bool paused);
314 
316  bool paused() const;
317 
318  virtual bool getVRForcesEntity() { return myVRForcesEntity; }
319 
323  bool autoGenerateActions() const;
324 
328  bool autoGenerateActionSpeed() const;
329 
332  virtual void setModelScalingEnabled(bool b);
333 
334  virtual void setIsSupportModel(bool isSupport);
335 
337  virtual void setEmbarked(bool embarkedState);
338  virtual bool embarked() const;
339 
341  virtual void setStationName(int name);
342  virtual int getStationName() const;
343 
345  virtual void setStationNumber(DtU16 number);
346 
347  virtual void setScale(const DtVector& scale);
348  virtual void setWeight(float weightScale);
349 
350  virtual void setPartOrientation(int partNumber,
351  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
352 
353  virtual void setPartTranslation(int partNumber,
354  const DtVector& translation, const DtVector& velocity);
355 
357  virtual void setLinkRotationOverride(const std::string& linkName, const DtTaitBryan& rotation,
358  float rampTime);
359 
361  virtual void setLinkTranslationOverride(const std::string& linkName, const DtVector& offsets,
362  float rampTime);
363 
365  virtual void setPartVisibility(int partNumber, bool visible);
369  void updateAimingAndGaze();
370 
372  void setupGuides();
373  virtual diguyCharacterGuide* getGuide();
374  virtual void setGuide(diguyCharacterGuide* guide);
375 
381  virtual void setupCoordSystem( const DtVector& vrvLoc, bool overrideEmbarked = false );
382 
384  virtual bool getAndResetTerrainHasChangedBit();
385 
387  virtual void setTerrainHasChanged();
388 
389  // If coordinate system is geocentric, will output orientation and velocity values
390  // That make sense in NED paradigm. Otherwise, output values will be the same
391  // as input ones.
392  void convertToLocalFrame(
393  const DtVector32& velocity, const DtTaitBryan& orientation,
394  DtVector32& outVelocity, DtTaitBryan& outOrientation);
395 
396  bool getIsVehicle() { return m_vehicle; }
397 
398  virtual void setSelected(bool value);
399  virtual bool selected();
400  virtual void setTextureVariations(std::vector<DtCharacterTextureVariationInfo>& varationInfoArray, int force) override;
401 
403  virtual void setDynamicSensorRegion(const std::string& region, bool state);
404 
406  virtual bool dynamicSensorRegion(const std::string& region);
407 
409  virtual DtVector positionOffsetWorld();
410 
412  virtual bool hasPositionOffset();
413 
417  virtual DtTaitBryan orientationOffsetWithBase(const DtTaitBryan& baseOri);
418 
420  virtual bool hasOrientationOffset();
421 
425  virtual void setUseTransitions(bool use);
426 
428  virtual bool useTransitions();
429 
431  virtual void setEnabled(bool enabled);
432 
434  virtual bool enabled();
435 
437  virtual void setIsOccupant(bool occupant);
438 
440  virtual bool occupant();
441 
442  virtual DtSceneObject* sceneObject() { return mySceneObject; }
443 
445  virtual bool isPostureTransitioning();
446 
449  virtual bool usingActionPositioningFlag();
450 
452  virtual void updateLights();
453 
455  virtual void resetLightsWithLink(DtDiGuyOsgGraphicsLink* link);
456 
458  virtual void draw_character_skeleton(DtOsgGizmoRenderer* renderer);
459 
461  virtual void draw_movement_info(DtOsgGizmoRenderer* renderer);
462 
464  std::vector<DtDiGuyLightRtInfo>& lights();
465 
466  // not active yet
467  const EventStreamList& recentActions() { return myRecentActions; }
468  const EventStreamList& recentHandItems() { return myRecentHandItems; }
469 
470  public:
471 
473  static void setDiGuyAttachGroup( osg::Group* diguy_attach_pt ) { DiguyAttachGroup = diguy_attach_pt; }
474 
475  protected:
476 
477  virtual void setSceneObjectIdOnCollisionBoxes();
478 
480  void slot_modelInstanceToBeDestroyed(DtModelInstance*, DtModel*);
481 
483  void slot_modelInstanceCreated(DtModelInstance*, DtModel*);
484 
485  //helper function to update model instance when appearance/model changes
486  virtual void updateModelInstance();
487 
490  virtual void updateVisibility();
491 
493  virtual void createLights(int id);
494 
495 
496  protected:
497 
499 
500  DtTaitBryan myWorldOrientation;
502 
503  diguyCharacter* myCharacter;
504  diguyCharacterGuide* myGuide;
505 
507 
515  bool m_vehicle;
518 
519  // For positionOffset so that it can
520  // get a good initial orientation
522 
523  float m_aim_az; // azimuth
524  float m_aim_el; // elevation
525  float m_gaze_az;
526  float m_gaze_el;
528 
531 
532  // Perform transitions and ramp downs
533  // between animations (for occupants / drivers)
535 
536  // Is this DI-Guy an occupant / driver
538 
539  bool myEnabled;
540  //bool myUseGeocentricCoords;
542 
544 
545  typedef boost::unordered_map<std::string, bool> SensorRegionStateMap;
547 
548  std::vector<DtDiGuyLightRtInfo> myLights;
549 
550  // For converting from geocentric frame of reference to topographic one
551  DtCoordTransform m_geocToTopo;
552  DtCoordTransform m_topoToGeoc;
553 
554  std::list< DtDiGuyDebugEventStream> myRecentActions;
555  std::list< DtDiGuyDebugEventStream> myRecentHandItems;
556 
557 #ifdef VISUALIZE_DIGUY_VELOCITY
558  friend class DtDiGuyOsgGraphicsLink;
559  osg::ref_ptr<osg::Geometry> myDesiredPositionLine;
560  osg::ref_ptr<osg::Geometry> myDesiredVelocityLine;
561  osg::ref_ptr<osg::Geometry> myVelocityLine;
562  osg::ref_ptr<osg::Geometry> myCordSys;
563  osg::ref_ptr<osg::Geometry> myCurrentDesiredPositionLine;
564  osg::ref_ptr<osg::Geode> myVizualizers;
565  osg::ref_ptr<osg::MatrixTransform> myVizualizersTransform;
566 #endif
567 
568  std::list<std::string> myAliveStateDynamicRegions;
569  std::list<std::string> myWeaponFireDynamicRegions;
570 
572 
573  protected:
574  static osg::Group* DiguyAttachGroup;
575 
576  };
577 
578 }
const EventStreamList & recentActions()
Definition: DtDiGuyCharacterModel.h:467
float m_gaze_el
Definition: DtDiGuyCharacterModel.h:526
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:510
helper struct for data loaded from light config file
Definition: DtDiGuyScenario.h:68
bool mySelected
Definition: DtDiGuyCharacterModel.h:541
static osg::Group * DiguyAttachGroup
Definition: DtDiGuyCharacterModel.h:574
bool myConnectionPoint
Definition: DtDiGuyCharacterModel.h:104
bool myCouldBePostureTransitioning
Definition: DtDiGuyCharacterModel.h:543
boost::unordered_map< std::string, bool > SensorRegionStateMap
Definition: DtDiGuyCharacterModel.h:545
float m_gaze_az
Definition: DtDiGuyCharacterModel.h:525
bool myEnabled
Definition: DtDiGuyCharacterModel.h:539
float m_aim_az
Definition: DtDiGuyCharacterModel.h:523
std::list< std::string > myWeaponFireDynamicRegions
Definition: DtDiGuyCharacterModel.h:569
DtLastForceActionParams()
Definition: DtDiGuyCharacterModel.h:53
diguyCharacter * myCharacter
Definition: DtDiGuyCharacterModel.h:503
DtDiGuyScenario * myDtScenario
Definition: DtDiGuyCharacterModel.h:498
static void setDiGuyAttachGroup(osg::Group *diguy_attach_pt)
where diguys attach to the scene graph
Definition: DtDiGuyCharacterModel.h:473
std::string myName
Definition: DtDiGuyCharacterModel.h:63
DtVector myWorldPosition
Definition: DtDiGuyCharacterModel.h:501
bool myIsOccupant
Definition: DtDiGuyCharacterModel.h:537
diguyCharacterGuide * myGuide
Definition: DtDiGuyCharacterModel.h:504
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:568
bool m_vehicle
Definition: DtDiGuyCharacterModel.h:515
bool m_turreted_vehicle
Definition: DtDiGuyCharacterModel.h:514
A special human character model.
Definition: DtCharacterModel.h:25
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:571
helper struct for tracking an added light
Definition: DtDiGuyCharacterModel.h:81
SensorRegionStateMap mySensorRegionMap
Definition: DtDiGuyCharacterModel.h:546
float m_aim_el
Definition: DtDiGuyCharacterModel.h:524
bool myActive
is it on
Definition: DtDiGuyCharacterModel.h:103
virtual DtSceneObject * sceneObject()
Definition: DtDiGuyCharacterModel.h:442
int myStationName
Definition: DtDiGuyCharacterModel.h:506
bool myEnableAnimationSmoothing
Definition: DtDiGuyCharacterModel.h:529
bool myVRForcesEntity
Definition: DtDiGuyCharacterModel.h:513
const EventStreamList & recentHandItems()
Definition: DtDiGuyCharacterModel.h:468
bool m_character_can_aim
Definition: DtDiGuyCharacterModel.h:527
std::vector< DtDiGuyLightRtInfo > myLights
Definition: DtDiGuyCharacterModel.h:548
bool myUsingActionPositioningFlag
Definition: DtDiGuyCharacterModel.h:508
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:516
int myAutoTransition
Definition: DtDiGuyCharacterModel.h:67
const DtTaitBryan & getOrientation()
Definition: DtDiGuyCharacterModel.h:182
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:500
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:552
virtual bool getVRForcesEntity()
Definition: DtDiGuyCharacterModel.h:318
bool myTerrainHasChanged
Definition: DtDiGuyCharacterModel.h:530
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:534
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
bool myGenerateAutomaticActionFlag
Definition: DtDiGuyCharacterModel.h:509
bool getIsVehicle()
Definition: DtDiGuyCharacterModel.h:396
#define DT_DLL_VRVDIGUY
Definition: vrvDiGuy.h:21
std::list< DtDiGuyDebugEventStream > myRecentActions
Definition: DtDiGuyCharacterModel.h:554
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:172
DtLastForceActionParams myLastForceAction
Definition: DtDiGuyCharacterModel.h:517
bool myEmbarkedFlag
Definition: DtDiGuyCharacterModel.h:512
Owns a DiGuy scenario for the application.
Definition: DtDiGuyScenario.h:87
EntityStateListener::WeaponState myWeaponState
Definition: DtDiGuyCharacterModel.h:511
DtSceneObject * mySceneObject
Definition: DtDiGuyCharacterModel.h:521
std::list< DtDiGuyDebugEventStream > myRecentHandItems
Definition: DtDiGuyCharacterModel.h:555
DtCoordTransform m_geocToTopo
Definition: DtDiGuyCharacterModel.h:551

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)