VR-Forces 5.0.3 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) 2021 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 //#define VISUALIZE_DIGUY_VELOCITY
22 
23 class diguyCharacter;
24 class diguyCharacterGuide;
25 class diguyGraphicsLink;
26 
27 namespace osg
28 {
29  class Group;
30 }
31 
32 namespace makVrv
33 {
34  class DtDeadReckonUpdater;
35 
36  class DtDiGuyOsgGraphicsLink;
37  class DtDiGuyScenario;
38  class DtDiGuyMotionModel;
39 
40  class DtOsgSceneConnector;
41  class DtSceneObject;
42  class DtSceneObjectAgent;
43  class DtSceneObjectUpdater;
44  class DtOsgGizmoRenderer;
45  struct DtDiguyLightConfig;
46 
47 
50  {
52  : myName()
53  , mySpeed( 0 )
54  , myUsePositioning( false )
55  , myOffset( 0, 0, 0 )
56  , myAutoTransition( 0 )
57  , myTransitionSpeed( 0 )
58  {
59  }
60 
61  std::string myName;
62  float mySpeed;
67 
68  };
69 
70 
71 // for debugging
73  {
74  std::string m_action;
75  double m_time;
76  };
77 
80  {
82  : myDesc( nullptr )
83  , myLink( nullptr )
84  , myIndex( -1 )
85  , myActive( false )
86  , myConnectionPoint( false )
87  {
88  }
89 
92 
93  // runtime data
94 
97  osg::Matrix myOffsetMat;
99  int myIndex;
101  bool myActive;
103  };
104 
105 
118  {
119  public:
120 
123 
125  virtual ~DtDiGuyCharacterModel();
126 
127  private:
131  DtDiGuyCharacterModel& operator=(const DtDiGuyCharacterModel&) = delete;
132 
133  public:
134 
135  virtual void setModelDefinition(const std::string& modelDefinition);
136 
138  virtual void discoverDynamicRegions(const DtModelDefinition* definition);
139 
141  diguyCharacter* character();
142 
144  DtDiGuyScenario& getScenario();
145 
148  virtual const std::string& className() const;
149 
151  virtual void addToScene(const DtUniqueID& sceneObjectId, int modelSet,
152  int visualizerType);
153 
155  virtual void removeFromScene();
156 
160  void setPositionAndVelocityState(const DtVector& vrvLoc, const DtTaitBryan& vrvOri, const DtVector32& vrvVel,
161  const DtVector32& vrvAngularVel, bool needsTopoUpdate);
162 
165  virtual void setPosition(int vtx, const DtVector& position);
166  const DtVector& getPosition() { return myWorldPosition; }
167 
170  virtual void setPositionOffset(const DtVector& position);
171 
175  virtual void setOrientation(int vtx, const DtTaitBryan& orientation);
176  const DtTaitBryan& getOrientation() { return myWorldOrientation; }
177 
180  virtual void setOrientationOffset(const DtTaitBryan& orientationOffset);
181 
185  virtual void setPositionAndOrientation(int vtx, const DtVector& position, const DtTaitBryan& orientation);
186 
187 
191  virtual void setCharacterModel(const std::string& characterType);
192 
195 
197  virtual void setDefaultAppearance( const std::string& appearanceName );
199  virtual void setAppearance( const std::string& appearanceName );
200 
202  virtual void setHeadAppearance( const std::string& appearanceName );
204  virtual void setItemAppearance( const std::string& appearanceName );
206  virtual void setCharacterEquipment( const std::string& appearanceName );
207 
209  virtual void setUnit( unsigned short country, unsigned char service, unsigned short patch, bool setPersonal ) override;
211  virtual void setPersonalUnit( unsigned short country, unsigned char service, unsigned short patch ) override;
213  virtual void setRank( unsigned short country, unsigned char service, unsigned short patch ) override;
215  virtual void setCharacterName( const std::string& name ) override;
216 
218 
220  virtual void setFlamesPresent(bool val);
222  virtual void setEnginePlume(bool val);
224  virtual void setEngineSmoke(bool val);
226  virtual void setTrailState(bool val);
228  virtual void setLightState(unsigned int light, unsigned int lightState);
229 
230 
232  virtual void beginAppearanceEffect(const std::string& effect, const std::string& overrideLink,
233  float overrideScale, const DtVector& overrideOffset, float overrideDuration);
235  virtual void endAppearanceEffect(int instant, const std::string& effect, const std::string& overrideLink);
236 
238  virtual void executeGesture(const std::string& gestureName, int reps,
239  float overallDuration, float channelAWeight);
241  virtual void endGesture(const std::string& gestureName, float rampDown);
242 
243 
247  virtual void setEnableAnimationSmoothing(bool);
248 
250  virtual bool enableAnimationSmoothing() const;
252  virtual void setDesiredAction(const std::string& action, float speed);
253 
255  virtual void fireWeapon();
256 
263  virtual void forceAction( const std::string& action, float speed, bool usePositioning,
264  const DtVector& offset, int autoChooseTransitionBehavior, float transitionSpeedScale );
265 
267  virtual int currentArcChangeCb(diguyCharacter* character);
268 
270  virtual void forceTemporaryAction(const std::string& action, double duration);
271 
274  virtual void unforceAction();
275 
277  virtual void setSpeed(float speed);
278 
280  virtual void setPosture(int posture);
281 
283  virtual bool weaponDeployed() const override;
284 
286  virtual EntityStateListener::WeaponState weaponState() const override;
287 
289  virtual void setWeaponState(EntityStateListener::WeaponState deployed) override;
290 
291 
294  void setFullUpdateNeeded(bool updated);
295 
297  bool fullUpdateNeeded() const;
298 
301  virtual void die(const std::string& deathAction);
302 
304  virtual void revive(const std::string& aliveAction);
305 
307  virtual void setPaused(bool paused);
308 
310  bool paused() const;
311 
312  virtual bool getVRForcesEntity() { return myVRForcesEntity; }
313 
317  bool autoGenerateActions() const;
318 
322  bool autoGenerateActionSpeed() const;
323 
326  virtual void setModelScalingEnabled(bool b);
327 
328  virtual void setIsSupportModel(bool isSupport);
329 
331  virtual void setEmbarked(bool embarkedState);
332  virtual bool embarked() const;
333 
335  virtual void setStationName(int name);
336  virtual int getStationName() const;
337 
339  virtual void setStationNumber(DtU16 number);
340 
341  virtual void setScale(const DtVector& scale);
342  virtual void setWeight(float weightScale);
343 
344  virtual void setPartOrientation(int partNumber,
345  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
346 
347  virtual void setPartTranslation(int partNumber,
348  const DtVector& translation, const DtVector& velocity);
349 
351  virtual void setLinkRotationOverride(const std::string& linkName, const DtTaitBryan& rotation,
352  float rampTime);
353 
355  virtual void setLinkTranslationOverride(const std::string& linkName, const DtVector& offsets,
356  float rampTime);
357 
359  virtual void setPartVisibility(int partNumber, bool visible);
363  void updateAimingAndGaze();
364 
366  void setupGuides();
367  virtual diguyCharacterGuide* getGuide();
368  virtual void setGuide(diguyCharacterGuide* guide);
369 
371  virtual void setupCoordSystem(const DtVector& vrvLoc, bool overrideEmbarked = false);
372 
374  virtual bool getAndResetTerrainHasChangedBit();
375 
377  virtual void setTerrainHasChanged();
378 
379  // If coordinate system is geocentric, will output orientation and velocity values
380  // That make sense in NED paradigm. Otherwise, output values will be the same
381  // as input ones.
382  void convertToLocalFrame(
383  const DtVector32& velocity, const DtTaitBryan& orientation,
384  DtVector32& outVelocity, DtTaitBryan& outOrientation);
385 
386  bool getIsVehicle() { return m_vehicle; }
387 
388  virtual void setSelected(bool value);
389  virtual bool selected();
390  virtual void setTextureVariations(std::vector<DtCharacterTextureVariationInfo>& varationInfoArray, int force) override;
391 
393  virtual void setDynamicSensorRegion(const std::string& region, bool state);
394 
396  virtual bool dynamicSensorRegion(const std::string& region);
397 
399  virtual DtVector positionOffsetWorld();
400 
402  virtual bool hasPositionOffset();
403 
407  virtual DtTaitBryan orientationOffsetWithBase(const DtTaitBryan& baseOri);
408 
410  virtual bool hasOrientationOffset();
411 
415  virtual void setUseTransitions(bool use);
416 
418  virtual bool useTransitions();
419 
421  virtual void setEnabled(bool enabled);
422 
424  virtual bool enabled();
425 
427  virtual void setIsOccupant(bool occupant);
428 
430  virtual bool occupant();
431 
432  virtual DtSceneObject* sceneObject() { return mySceneObject; }
433 
435  virtual bool isPostureTransitioning();
436 
439  virtual bool usingActionPositioningFlag();
440 
442  virtual void updateLights();
443 
445  virtual void resetLightsWithLink(DtDiGuyOsgGraphicsLink* link);
446 
448  virtual void draw_character_skeleton(DtOsgGizmoRenderer* renderer);
449 
451  virtual void draw_movement_info(DtOsgGizmoRenderer* renderer);
452 
454  std::vector<DtDiGuyLightRtInfo>& lights();
455 
456  // not active yet
457  const std::list< DtDiGuyDebugEventStream>& recentActions() { return myRecentActions; }
458  const std::list< DtDiGuyDebugEventStream>& recentHandItems() { return myRecentHandItems; }
459 
460  public:
462  static void setDiGuyAttachGroup(osg::Group* diguy_attach_pt) { DiguyAttachGroup = diguy_attach_pt; }
463 
464  protected:
465 
466  virtual void setSceneObjectIdOnCollisionBoxes();
467 
469  void slot_modelInstanceToBeDestroyed(DtModelInstance*, DtModel*);
470 
472  void slot_modelInstanceCreated(DtModelInstance*, DtModel*);
473 
474  //helper function to update model instance when appearance/model changes
475  virtual void updateModelInstance();
476 
479  virtual void setMotionModelByName(const std::string& modelName);
480 
483  virtual void updateVisibility();
484 
486  virtual void createLights(int id);
487 
488 
489  protected:
490 
492 
493  DtTaitBryan myWorldOrientation;
495 
496  diguyCharacter* myCharacter;
497  diguyCharacterGuide* myGuide;
498 
500 
509  bool m_vehicle;
512 
513  // For positionOffset so that it can
514  // get a good initial orientation
516 
517  float m_aim_az; // azimuth
518  float m_aim_el; // elevation
519  float m_gaze_az;
520  float m_gaze_el;
522 
525 
526  // Perform transitions and ramp downs
527  // between animations (for occupants / drivers)
529 
530  // Is this DI-Guy an occupant / driver
532 
533  bool myEnabled;
534  //bool myUseGeocentricCoords;
536 
538 
539  typedef boost::unordered_map<std::string, bool> SensorRegionStateMap;
541 
542  std::vector<DtDiGuyLightRtInfo> myLights;
543 
544  // For converting from geocentric frame of reference to topographic one
545  DtCoordTransform m_geocToTopo;
546  DtCoordTransform m_topoToGeoc;
547 
548  std::list< DtDiGuyDebugEventStream> myRecentActions;
549  std::list< DtDiGuyDebugEventStream> myRecentHandItems;
550 
551 #ifdef VISUALIZE_DIGUY_VELOCITY
552  osg::ref_ptr<osg::Geometry> myDesiredPositionLine;
553  osg::ref_ptr<osg::Geometry> myDesiredVelocityLine;
554  osg::ref_ptr<osg::Geometry> myVelocityLine;
555  osg::ref_ptr<osg::Geometry> myCordSys;
556  osg::ref_ptr<osg::Geometry> myCurrentDesiredPositionLine;
557  osg::ref_ptr<osg::Geode> myVizualizers;
558  osg::ref_ptr<osg::MatrixTransform> myVizualizersTransform;
559 #endif
560 
561  std::list<std::string> myAliveStateDynamicRegions;
562  std::list<std::string> myWeaponFireDynamicRegions;
563 
564  protected:
565  static osg::Group* DiguyAttachGroup;
566 
567  };
568 
569 }
float m_gaze_el
Definition: DtDiGuyCharacterModel.h:520
The base class for all model instances.
Definition: DtModelInstance.h:39
DtDiGuyLightRtInfo()
Definition: DtDiGuyCharacterModel.h:81
const DtDiguyLightConfig * myDesc
config data
Definition: DtDiGuyCharacterModel.h:91
bool myGenerateActionSpeedFlag
Definition: DtDiGuyCharacterModel.h:503
helper struct for data loaded from light config file
Definition: DtDiGuyScenario.h:68
bool mySelected
Definition: DtDiGuyCharacterModel.h:535
static osg::Group * DiguyAttachGroup
Definition: DtDiGuyCharacterModel.h:565
bool myConnectionPoint
Definition: DtDiGuyCharacterModel.h:102
bool myCouldBePostureTransitioning
Definition: DtDiGuyCharacterModel.h:537
boost::unordered_map< std::string, bool > SensorRegionStateMap
Definition: DtDiGuyCharacterModel.h:539
float m_gaze_az
Definition: DtDiGuyCharacterModel.h:519
bool myEnabled
Definition: DtDiGuyCharacterModel.h:533
float m_aim_az
Definition: DtDiGuyCharacterModel.h:517
std::list< std::string > myWeaponFireDynamicRegions
Definition: DtDiGuyCharacterModel.h:562
DtLastForceActionParams()
Definition: DtDiGuyCharacterModel.h:51
diguyCharacter * myCharacter
Definition: DtDiGuyCharacterModel.h:496
DtDiGuyScenario * myDtScenario
Definition: DtDiGuyCharacterModel.h:491
static void setDiGuyAttachGroup(osg::Group *diguy_attach_pt)
where diguys attach to the scene graph
Definition: DtDiGuyCharacterModel.h:462
std::string myName
Definition: DtDiGuyCharacterModel.h:61
DtVector myWorldPosition
Definition: DtDiGuyCharacterModel.h:494
bool myIsOccupant
Definition: DtDiGuyCharacterModel.h:531
diguyCharacterGuide * myGuide
Definition: DtDiGuyCharacterModel.h:497
osg::Matrix myOffsetMat
Definition: DtDiGuyCharacterModel.h:97
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:117
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:62
std::list< std::string > myAliveStateDynamicRegions
Definition: DtDiGuyCharacterModel.h:561
bool m_vehicle
Definition: DtDiGuyCharacterModel.h:509
bool m_turreted_vehicle
Definition: DtDiGuyCharacterModel.h:508
A special human character model.
Definition: DtCharacterModel.h:22
Contains DLL export macros.
int myIndex
index of light in light point drawable
Definition: DtDiGuyCharacterModel.h:99
A model definition Interaction any number of named parameters, and also can be used to store cached d...
Definition: DtModelDefinition.h:38
const std::list< DtDiGuyDebugEventStream > & recentHandItems()
Definition: DtDiGuyCharacterModel.h:458
helper struct for tracking an added light
Definition: DtDiGuyCharacterModel.h:79
SensorRegionStateMap mySensorRegionMap
Definition: DtDiGuyCharacterModel.h:540
float m_aim_el
Definition: DtDiGuyCharacterModel.h:518
bool myActive
is it on
Definition: DtDiGuyCharacterModel.h:101
virtual DtSceneObject * sceneObject()
Definition: DtDiGuyCharacterModel.h:432
int myStationName
Definition: DtDiGuyCharacterModel.h:499
bool myEnableAnimationSmoothing
Definition: DtDiGuyCharacterModel.h:523
bool myVRForcesEntity
Definition: DtDiGuyCharacterModel.h:507
bool m_character_can_aim
Definition: DtDiGuyCharacterModel.h:521
std::vector< DtDiGuyLightRtInfo > myLights
Definition: DtDiGuyCharacterModel.h:542
bool myUsingActionPositioningFlag
Definition: DtDiGuyCharacterModel.h:501
diguyGraphicsLink * myLink
pointer to light link
Definition: DtDiGuyCharacterModel.h:96
DtVector myOffset
Definition: DtDiGuyCharacterModel.h:64
DtUniqueID mySceneObjectId
Definition: DtDiGuyCharacterModel.h:510
int myAutoTransition
Definition: DtDiGuyCharacterModel.h:65
const DtTaitBryan & getOrientation()
Definition: DtDiGuyCharacterModel.h:176
double m_time
Definition: DtDiGuyCharacterModel.h:75
bool myUsePositioning
Definition: DtDiGuyCharacterModel.h:63
DtTaitBryan myWorldOrientation
Definition: DtDiGuyCharacterModel.h:493
struct for the last action that happened
Definition: DtDiGuyCharacterModel.h:49
WeaponState
Definition: DtEntityStateListener.h:96
std::string m_action
Definition: DtDiGuyCharacterModel.h:74
Definition: DtDiGuyCharacterModel.h:72
DtCoordTransform m_topoToGeoc
Definition: DtDiGuyCharacterModel.h:546
virtual bool getVRForcesEntity()
Definition: DtDiGuyCharacterModel.h:312
bool myTerrainHasChanged
Definition: DtDiGuyCharacterModel.h:524
A DtSceneObject represents an object that can be positioned in the scene by (possibly) attaching it t...
Definition: DtSceneObject.h:42
float myTransitionSpeed
Definition: DtDiGuyCharacterModel.h:66
A model which owns a single model instance. A DtModel is a managing container for a single DtModelIns...
Definition: DtModel.h:55
bool myUseTransitions
Definition: DtDiGuyCharacterModel.h:528
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:70
bool myGenerateAutomaticActionFlag
Definition: DtDiGuyCharacterModel.h:502
bool getIsVehicle()
Definition: DtDiGuyCharacterModel.h:386
#define DT_DLL_VRVDIGUY
Definition: vrvDiGuy.h:21
std::list< DtDiGuyDebugEventStream > myRecentActions
Definition: DtDiGuyCharacterModel.h:548
bool myFullUpdateFlag
Definition: DtDiGuyCharacterModel.h:505
voidpf uLong offset
Definition: ioapi.h:42
const DtVector & getPosition()
Definition: DtDiGuyCharacterModel.h:166
DtLastForceActionParams myLastForceAction
Definition: DtDiGuyCharacterModel.h:511
bool myEmbarkedFlag
Definition: DtDiGuyCharacterModel.h:506
const std::list< DtDiGuyDebugEventStream > & recentActions()
Definition: DtDiGuyCharacterModel.h:457
Owns a DiGuy scenario for the application.
Definition: DtDiGuyScenario.h:87
EntityStateListener::WeaponState myWeaponState
Definition: DtDiGuyCharacterModel.h:504
DtSceneObject * mySceneObject
Definition: DtDiGuyCharacterModel.h:515
std::list< DtDiGuyDebugEventStream > myRecentHandItems
Definition: DtDiGuyCharacterModel.h:549
DtCoordTransform m_geocToTopo
Definition: DtDiGuyCharacterModel.h:545

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)