VR-Forces 4.8 Class Documentation
 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) 2019 VT MAK
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 
26 namespace osg
27 {
28  class Group;
29 }
30 
31 namespace makVrv
32 {
33  class DtSceneObjectAgent;
34  class DtDiGuyScenario;
35  class DtOsgSceneConnector;
36  class DtSceneObject;
37  class DtSceneObjectUpdater;
38  class DtDiGuyMotionModel;
39  class DtDeadReckonUpdater;
40 
41  DtTaitBryan vrvToDiGuyOrientationChar(const DtTaitBryan& hpr);
42 
44  {
46  : mySpeed(0)
47  , myOffset(0, 0, 0)
48  , myAutoTransition(0)
49  , myName()
50  , myUsePositioning(false)
51  {
52  }
53 
54  std::string myName;
55  float mySpeed;
59  };
60 
73  {
74  public:
77 
79  virtual ~DtDiGuyCharacterModel();
80 
81  virtual void setModelDefinition(const std::string& modelDefinition);
82 
84  virtual void addToScene(const DtUniqueID& sceneObjectId, int modelSet,
85  int visualizerType);
86 
88  virtual void removeFromScene();
89 
93  void setPositionAndVelocityState(const DtVector& vrvLoc, const DtTaitBryan& vrvOri, const DtVector32& vrvVel,
94  const DtVector32& vrvAngularVel, bool needsTopoUpdate);
95 
98  virtual void setPosition(int vtx, const DtVector& position);
99  const DtVector& getPosition() { return myWorldPosition; }
100 
103  virtual void setPositionOffset(const DtVector& position);
104 
105 
109  virtual void setOrientation(int vtx, const DtTaitBryan& orientation);
110  const DtTaitBryan& getOrientation() { return myWorldOrientation; }
111 
114  virtual void setOrientationOffset(const DtTaitBryan& orientationOffset);
115 
119  virtual void setPositionAndOrientation(int vtx, const DtVector& position, const DtTaitBryan& orientation);
120 
121 
124  virtual const std::string& className() const;
125 
129  virtual void setCharacterModel(const std::string& characterType);
130 
134  virtual void setEnableAnimationSmoothing(bool);
135 
137  virtual bool enableAnimationSmoothing() const;
138 
140  virtual void setDefaultAppearance(const std::string& appearanceName);
142  virtual void setAppearance(const std::string& appearanceName);
143 
144  virtual void setHeadAppearance(const std::string& appearanceName);
145  virtual void setItemAppearance(const std::string& appearanceName);
147 
148  virtual void setFlamesPresent(bool val);
149  virtual void setEnginePlume(bool val);
150  virtual void setEngineSmoke(bool val);
151  virtual void setTrailState(bool val);
152  virtual void setLightState(unsigned int light, unsigned int lightState);
153 
154  virtual void fireWeapon();
155 
156  virtual void beginAppearanceEffect(const std::string& effect, const std::string& overrideLink,
157  float overrideScale, const DtVector& overrideOffset, float overrideDuration);
158  virtual void endAppearanceEffect(int instant, const std::string& effect, const std::string& overrideLink);
159 
160  virtual void executeGesture(const std::string& gestureName, int reps,
161  float overallDuration, float channelAWeight);
162  virtual void endGesture(const std::string& gestureName, float rampDown);
163 
165  virtual void setDesiredAction(const std::string& action, float speed);
166 
174  virtual void forceAction(const std::string& action, float speed, bool usePositioning,
175  const DtVector& offset, int autoChooseTransitionBehavior);
176 
177  virtual int currentArcChangeCb(diguyCharacter* character);
178 
180  virtual void forceTemporaryAction(const std::string& action, double duration);
181 
184  virtual void unforceAction();
185 
187  virtual void setSpeed(float speed);
188 
190  virtual bool weaponDeployed() const;
191 
193  virtual void setWeaponDeployed(bool deployed);
194 
197  void setFullUpdateNeeded(bool updated);
198 
200  bool fullUpdateNeeded() const;
201 
204  virtual void die(const std::string& deathAction);
205 
207  virtual void revive(const std::string& aliveAction);
208 
210  virtual void setPaused(bool paused);
211 
213  bool paused() const;
214 
216  diguyCharacter* character();
217 
219  virtual void setPosture(int posture);
220 
221  virtual void setLinkRotationOverride(const std::string& linkName, const DtTaitBryan& rotation,
222  float rampTime);
223 
224  virtual void setLinkTranslationOverride(const std::string& linkName, const DtVector& offsets,
225  float rampTime);
226 
230  bool autoGenerateActions() const;
231 
235  bool autoGenerateActionSpeed() const;
236 
239  virtual void setModelScalingEnabled(bool b);
240 
241  virtual void setIsSupportModel(bool isSupport);
242 
243  static void setDiGuyAttachGroup(osg::Group* diguy_attach_pt) { DiguyAttachGroup = diguy_attach_pt; }
244 
246  virtual void setEmbarked(bool embarkedState);
247  virtual bool embarked() const;
248 
249  virtual void setScale(const DtVector& scale);
250  virtual void setWeight(float weightScale);
251  virtual void setPartOrientation(int partNumber,
252  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
253  virtual void setPartTranslation(int partNumber,
254  const DtVector& translation, const DtVector& velocity);
256  virtual void setPartVisibility(int partNumber, bool visible);
260  void updateAimingAndGaze();
261 
263  void setupGuides();
264  diguyCharacterGuide* getGuide() { return myGuide; }
265  void setGuide(diguyCharacterGuide* guide) { myGuide = guide; }
266 
267  bool getVRForcesEntity() { return myVRForcesEntity; }
268 
269  virtual void setupCoordSystem(const DtVector& vrvLoc, bool overrideEmbarked = false);
270 
271  // If coordinate system is geocentric, will output orientation and velocity values
272  // That make sense in NED paradigm. Otherwise, output values will be the same
273  // as input ones.
274  void convertToLocalFrame(
275  const DtVector32& velocity, const DtTaitBryan& orientation,
276  DtVector32& outVelocity, DtTaitBryan& outOrientation);
277 
278  bool getIsVehicle() { return m_vehicle; }
279 
280  DtDiGuyScenario& getScenario();
281 
282  virtual void setSelected(bool value);
283  virtual void setTextureVariations(std::vector<DtCharacterTextureVariationInfo>& varationInfoArray, int force);
284 
286  virtual void setDynamicSensorRegion(const std::string& region, bool state);
287 
289  virtual bool dynamicSensorRegion(const std::string& region);
290 
292  virtual DtVector positionOffsetWorld();
293 
295  virtual bool hasPositionOffset();
296 
300  virtual DtTaitBryan orientationOffsetWithBase(const DtTaitBryan& baseOri);
301 
303  virtual bool hasOrientationOffset();
304 
308  virtual void setUseTransitions(bool use);
309 
311  bool useTransitions();
312 
314  virtual void setEnabled(bool enabled);
315 
317  bool enabled();
318 
320  virtual void setIsOccupant(bool occupant);
321 
323  bool occupant();
324 
325  //virtual bool useGeocentricCoords() { return myUseGeocentricCoords; }
326 
327  virtual DtSceneObject* sceneObject() { return mySceneObject; }
328 
330  virtual bool isPostureTransitioning();
331 
332  protected:
333 
334  virtual void setSceneObjectIdOnCollisionBoxes();
335 
337  void slot_modelInstanceToBeDestroyed(DtModelInstance*, DtModel*);
338 
340  void slot_modelInstanceCreated(DtModelInstance*, DtModel*);
341 
342  //helper function to update model instance when appearance/model changes
343  virtual void updateModelInstance();
344 
347  virtual void setMotionModelByName(const std::string& modelName);
348 
351  virtual void updateVisibility();
352 
353 
354  protected:
355 
356  static osg::Group* DiguyAttachGroup;
358 
359  DtTaitBryan myWorldOrientation;
361 
362  diguyCharacter* myCharacter;
363  diguyCharacterGuide* myGuide;
364 
375 
376  // For positionOffset so that it can
377  // get a good initial orientation
379 
381  bool m_vehicle;
382  float m_aim_az; // azimuth
383  float m_aim_el; // elevation
384  float m_gaze_az;
385  float m_gaze_el;
387 
389 
390  // Perform transitions and ramp downs
391  // between animations (for occupants / drivers)
393 
394  // Is this DI-Guy an occupant / driver
396 
397  bool myEnabled;
398  //bool myUseGeocentricCoords;
399 
400  typedef boost::unordered_map<std::string, bool> SensorRegionStateMap;
402 
404 
405  public:
406 
407  // For converting from geocentric frame of reference to topographic one
408  DtCoordTransform m_geocToTopo;
409  DtCoordTransform m_topoToGeoc;
410 
411 #ifdef VISUALIZE_DIGUY_VELOCITY
412  osg::ref_ptr<osg::Geometry> myDesiredPositionLine;
413  osg::ref_ptr<osg::Geometry> myDesiredVelocityLine;
414  osg::ref_ptr<osg::Geometry> myVelocityLine;
415  osg::ref_ptr<osg::Geometry> myCordSys;
416  osg::ref_ptr<osg::Geometry> myCurrentDesiredPositionLine;
417  osg::ref_ptr<osg::Geode> myVizualizers;
418  osg::ref_ptr<osg::MatrixTransform> myVizualizersTransform;
419 #endif
420  };
421 
422 }
float m_gaze_el
Definition: DtDiGuyCharacterModel.h:385
The base class for all model instances.
Definition: DtModelInstance.h:39
void setGuide(diguyCharacterGuide *guide)
Definition: DtDiGuyCharacterModel.h:265
bool myGenerateActionSpeedFlag
Definition: DtDiGuyCharacterModel.h:367
static osg::Group * DiguyAttachGroup
Definition: DtDiGuyCharacterModel.h:356
bool myCouldBePostureTransitioning
Definition: DtDiGuyCharacterModel.h:403
boost::unordered_map< std::string, bool > SensorRegionStateMap
Definition: DtDiGuyCharacterModel.h:400
float m_gaze_az
Definition: DtDiGuyCharacterModel.h:384
bool myWeaponDeployedFlag
Definition: DtDiGuyCharacterModel.h:368
bool myEnabled
Definition: DtDiGuyCharacterModel.h:397
float m_aim_az
Definition: DtDiGuyCharacterModel.h:382
DtLastForceActionParams()
Definition: DtDiGuyCharacterModel.h:45
diguyCharacter * myCharacter
Definition: DtDiGuyCharacterModel.h:362
DtDiGuyScenario * myDtScenario
Definition: DtDiGuyCharacterModel.h:357
static void setDiGuyAttachGroup(osg::Group *diguy_attach_pt)
Definition: DtDiGuyCharacterModel.h:243
std::string myName
Definition: DtDiGuyCharacterModel.h:54
DtVector myWorldPosition
Definition: DtDiGuyCharacterModel.h:360
bool myIsOccupant
Definition: DtDiGuyCharacterModel.h:395
bool myNeedsGuideInstalled
Definition: DtDiGuyCharacterModel.h:372
diguyCharacterGuide * myGuide
Definition: DtDiGuyCharacterModel.h:363
Contains the makVrv::DtCharacterModel class declaration.
DI-Guy Character model.
Definition: DtDiGuyCharacterModel.h:72
float mySpeed
Definition: DtDiGuyCharacterModel.h:55
bool m_vehicle
Definition: DtDiGuyCharacterModel.h:381
bool m_turreted_vehicle
Definition: DtDiGuyCharacterModel.h:380
A special human character model.
Definition: DtCharacterModel.h:20
Contains DLL export macros.
DtTaitBryan vrvToDiGuyOrientationChar(const DtTaitBryan &hpr)
SensorRegionStateMap mySensorRegionMap
Definition: DtDiGuyCharacterModel.h:401
float m_aim_el
Definition: DtDiGuyCharacterModel.h:383
virtual DtSceneObject * sceneObject()
Definition: DtDiGuyCharacterModel.h:327
bool myEnableAnimationSmoothing
Definition: DtDiGuyCharacterModel.h:388
bool myVRForcesEntity
Definition: DtDiGuyCharacterModel.h:371
bool getVRForcesEntity()
Definition: DtDiGuyCharacterModel.h:267
bool m_character_can_aim
Definition: DtDiGuyCharacterModel.h:386
bool myUsingActionPositioningFlag
Definition: DtDiGuyCharacterModel.h:365
DtVector myOffset
Definition: DtDiGuyCharacterModel.h:57
DtUniqueID mySceneObjectId
Definition: DtDiGuyCharacterModel.h:373
int myAutoTransition
Definition: DtDiGuyCharacterModel.h:58
const DtTaitBryan & getOrientation()
Definition: DtDiGuyCharacterModel.h:110
unsigned long long DtUniqueID
Definition: DtUniqueID.h:22
bool myUsePositioning
Definition: DtDiGuyCharacterModel.h:56
DtTaitBryan myWorldOrientation
Definition: DtDiGuyCharacterModel.h:359
Definition: DtDiGuyCharacterModel.h:43
DtCoordTransform m_topoToGeoc
Definition: DtDiGuyCharacterModel.h:409
A DtSceneObject represents an object that can be positioned in the scene by (possibly) attaching it t...
Definition: DtSceneObject.h:41
A model which owns a single model instance.
Definition: DtModel.h:56
bool myUseTransitions
Definition: DtDiGuyCharacterModel.h:392
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
bool myGenerateAutomaticActionFlag
Definition: DtDiGuyCharacterModel.h:366
bool getIsVehicle()
Definition: DtDiGuyCharacterModel.h:278
#define DT_DLL_VRVDIGUY
Definition: vrvDiGuy.h:21
bool myFullUpdateFlag
Definition: DtDiGuyCharacterModel.h:369
voidpf uLong offset
Definition: ioapi.h:42
const DtVector & getPosition()
Definition: DtDiGuyCharacterModel.h:99
diguyCharacterGuide * getGuide()
Definition: DtDiGuyCharacterModel.h:264
DtLastForceActionParams myLastForceAction
Definition: DtDiGuyCharacterModel.h:374
bool myEmbarkedFlag
Definition: DtDiGuyCharacterModel.h:370
Owns a DiGuy scenario for the application.
Definition: DtDiGuyScenario.h:73
DtSceneObject * mySceneObject
Definition: DtDiGuyCharacterModel.h:378
DtCoordTransform m_geocToTopo
Definition: DtDiGuyCharacterModel.h:408

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)