VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfObjectStateRepository.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
14 #include "vrfobjparam/simSector.h"
17 #include "vrfutil/echelonId.h"
18 #include <readerWriter/rwInt.h>
25 #include "vrfobjcore/vrfObject.h"
30 #include "tbb/concurrent_hash_map.h"
31 #include "tbb/mutex.h"
32 #include <vrfutil/rwUUID.h>
33 
35 #include <vlpi/appearance.h>
36 #include <vlpi/artPartSpec.h>
37 #include <vlutil/vlString.h>
38 #include <vlpi/thresholder.h>
39 
41 #include <vlutil/vlConfig.h>
42 #include <map>
43 #include <list>
44 
45 #include "boost/logic/tribool.hpp"
46 
48 class DtVrfObject;
51 class DtSimManager;
53 class DtVrfWeaponPSR;
54 class DtRwAppearance;
55 class DtVrfObject;
56 class DtSimManager;
57 class DtTaskMessage;
66 class DtVrfObjectMessage;
67 
68 const int DtEntityVisibilityTest = 1;
71 
72 typedef bool (*DtVisibilityTest)(double rangeSquared, const DtEntityIdentifier& eyeKey,
73  const DtVector& localEyePoint, const DtVector& localEndPoint, const DtVrfObjectStateRepository* sr);
74 
78  void* usr);
79 
86 {
87 protected:
90 
91 public:
92  typedef std::map<DtString, DtString> ExtendedData;
93  typedef std::map<int, DtString> ExtendedLabels;
94 
96  typedef std::map<DtString, std::map<DtString, DtRwJoystickControl> > JoystickControls;
97 
100  const DtObjectType& objectType, DtVrfObjectParameters* parameters,
101  const DtString& rwName = DtString::nullString(),
102  DtReaderWriterRegistry* parentRegistry = 0);
103 
106  const DtString& rwName = DtString::nullString(),
107  DtReaderWriterRegistry* parentRegistry = 0);
108 
111  const DtVrfObjectStateRepository& orig);
112 
114  virtual ~DtVrfObjectStateRepository();
115 
118  const DtString& rwName = DtString::nullString(),
119  DtReaderWriterRegistry* parentRegistry = 0) const;
120 
121  virtual DtString type() const;
122 
124  virtual const int objectStateRepositorySubType() const;
125 
127  virtual const int vrfObjectStateRepositorySubType() const;
128 
129  virtual bool init();
130 
131  virtual bool createParameters();
132  virtual void initializeFromParameters();
133  virtual const DtVrfObjectParameters* vrfParameters() const;
134 
137  virtual void setConcealed(bool);
138 
140  virtual void setJoystickMovementControlled(bool);
141  virtual bool joystickMovementControlled() const;
142 
147  virtual DtVrfStateRepositoryUserExtension* userExtension() const;
148 
151  virtual void restoreEntity();
152 
154 
155  virtual void addRestoredCallback(
157  virtual void removeRestoredCallback(
159  virtual void invokeRestoredCallbacks();
161 
164  virtual void updateCachedStateProperties();
165 
170  virtual void setExtendedData(const DtString& key, const DtString& value);
171  virtual void clearExtendedData();
172  virtual void removeExtendedData(const DtString& key);
173  virtual DtString extendedData(const DtString& key) const;
174  const ExtendedData& extendedDataMap() const
175  {
176  return myExtendedData;
177  }
178  virtual void setExtendedDataMap(const ExtendedData&);
179  virtual void setExtendedDataMap(const std::map<std::string, std::string>&);
180 
182  virtual void setupExtendedDataFromParameterData();
184 
188  virtual void setExtendedLabel(int, const DtString& value);
189  virtual void clearExtendedLabels();
190  virtual DtString extendedLabel(int index) const;
191  virtual ExtendedLabels extendedLabels() const;
192  virtual void setExtendedLabels(const ExtendedLabels&);
194 
197  virtual void addJoystickControls(const DtRwJoystickControls&);
198  virtual const JoystickControls& joystickControls() const;
200 
203  virtual void setActivity(const DtString&);
204  virtual DtString activity() const;
205 
216 
217  virtual const DtObjectResourceManager* objectResourceManager() const;
218  virtual DtObjectResourceManager* objectResourceManager();
220 
229 
230  virtual const DtSimResourceManager& oldResourceManager() const;
231  virtual DtSimResourceManager& oldResourceManager();
232 
234  virtual DtSimResource* oldLookupResource(const DtString & resourceName);
235  virtual const DtSimResource* oldLookupResource(const DtString & resourceName) const;
236 
239  virtual void oldAddResource(DtSimResource* resource);
240 
242  virtual void oldRemoveResource(DtSimResource* resource);
244 
247  virtual void setNavigationEnabled(bool);
248  virtual bool navigationEnabled() const;
250 
252  virtual bool wouldBeRecursiveAttach(DtSimObjectStateRepository* parent) const;
253 
254  virtual void restoreResourcesFromParameters();
255 
258 
259  virtual void setSOR(DtReal center, DtReal size);
260 
261  virtual DtReal SORSize() const;
262  virtual DtReal SORCenter() const;
263 
264  virtual const DtSimSector& SOR() const;
266 
269  virtual bool isContactHostile(DtRwSensorContactInfo*) const;
270 
272  virtual bool isContactHostile(DtVrfObject*) const;
273 
276  virtual bool isContactHostile(const DtVector& location, int perceivedForce) const;
277 
280  virtual bool inSOR(const DtVrfObject* entity) const;
281 
284  virtual bool canFireAt(const DtVector& location) const;
285 
286  virtual const DtString& engagementRules() const;
287  virtual void setEngagementRules(const DtString& engagementRules);
288 
290 
291  virtual void setRequestTaskNeeded(bool value);
292  virtual bool requestTaskNeeded() const;
294 
296 
297  virtual void setTasked(const DtSymbolString& componentName, bool tasked);
298  virtual void setTasked(const DtSymbolString& componentName, int taskID, bool tasked);
299  virtual bool tasked(const DtSymbolString& componentName) const;
301 
304  virtual bool isTasked() const;
305 
307  virtual void clearCurrentTaskMsg(const DtSymbolString& componentName);
308 
310  virtual void clearCurrentTaskMsg(const DtSymbolString& componentName, int taskId);
311 
313 
314  virtual void setCurrentTaskMsg(const DtSymbolString& componentName,
315  const DtTaskMessage & taskMsg);
316 
317  virtual void setCurrentTaskMsg(const DtSymbolString& componentName,
318  const DtTaskMessage & taskMsg, int taskId);
320 
322  virtual const DtTaskStatusList* taskStatusList() const;
323  virtual DtTaskStatusList* taskStatusList();
324  virtual DtSuspendedTaskStatusList* suspendedTaskStatusList();
325 
328  virtual DtTaskMessage* currentTaskMsg(const DtSymbolString& componentName) const;
329 
331  virtual DtTaskMessage* currentTaskMsg(const DtSymbolString& componentName, int taskId) const;
332 
334  virtual std::list<DtTaskMessage*> allCurrentTaskMsg(const DtSymbolString& componentName) const;
335 
337  static bool shouldArchiveExtendedAttribute(const DtString&);
338  static void doNotArchiveAttribute(const DtString&, bool);
339 
340  virtual void putSelf(std::string& fp,
341  int indentLevel = 0,
342  bool writeUnspecified = false,
343  const DtFilename& path = DtReaderWriter::appPath());
344 
357  virtual bool placePoints(DtAttachedTerrain& attachedTerrain,
358  std::vector<DtGroundInteractionPt*> groundInteractionPts,
359  bool* terrainDataAvailable = 0);
360 
364  virtual void updateSupportPoints(const DtVector& newPosition,
365  const DtReal newHeading);
366 
369 
370  virtual void setIndependentlyTasked(bool value);
371  virtual bool independentlyTasked() const;
373 
376 
377  virtual bool processCompleteAttachment(DtVrfObject*);
378  static void objectAboutToBeRemovedCallback(DtVrfObject * vrfObject, void * usr);
379  virtual void processObjectAboutToBeRemovedCallback(DtVrfObject * vrfObject);
381 
383  static DtVrfObjectStateRepository* createRepository(const DtString & name,
384  const DtString & type, DtVrfObject* simObject,
385  const DtObjectType & objectType, DtVrfObjectParameters* parameters,
386  DtReaderWriterRegistry* parentRegistry = 0);
387 
388  static void addSimObjectStateRepositoryCreatorFcn(const DtString & type,
390 
395 
397  static void setFactory(DtSimObjectStateRepositoryFactory* factory);
399 
402 
403  virtual const DtVrfObjectParameters* parameterEntry() const;
404  virtual void setParameterEntry(DtVrfObjectParameters* parameterEntry);
406 
408  virtual const DtVrfObjectParameters* parameters() const;
409 
411  virtual DtVrfObjectParameters* modifiableParameters();
414  virtual void setupParameterInheritance();
415 
418 
419  virtual DtForceType forceType() const;
420  virtual void setForceType(DtForceType force);
422 
424  virtual bool createAttachments();
425 
427  void addPart(DtArticulatedPartStateRepository * part);
428  void removePart(DtArticulatedPartStateRepository * part);
429  DtArticulatedPartStateRepository * part(DtArtPartType partType);
430 
431  DtArticulatedPartStateRepository * findDescendantByType(
432  DtArtPartType childType);
433 
437 
438  virtual bool createAppearance();
439  virtual const DtAppearance* appearance() const;
440  virtual DtAppearance* appearance();
442 
446 
447  virtual void setCapabilities(int cap);
448  virtual int capabilities() const;
450 
453 
454  virtual void setDestroyed(bool isDestroyed);
455  virtual bool isDestroyed() const;
457 
460  virtual void setInvisible(bool);
461  virtual bool invisible() const;
462 
467 
468  virtual void setOccupantsHidden(bool v);
469  virtual bool occupantsHidden() const;
471 
473  virtual void setInvulnerable(bool);
474  virtual bool invulnerable() const;
475 
478  virtual void setInvisibleSetByUser(bool);
479  virtual bool invisibleSetByUser() const;
480 
488 
489  DtReal healthPct() const;
490  void setHealthPct(DtReal pct);
492 
495 
496  bool firePowerKilled() const;
497  void setFirePowerKilled(const bool firePowerKilled);
498 
499  bool mobilityKilled() const;
500  void setMobilityKilled(const bool mobilityKilled);
501 
502  bool flaming() const;
503  void setFlaming(const bool flaming);
504 
505  bool smoking() const;
506  void setSmoking(const bool smoking);
508 
510  bool sensorsKilled() const;
511  void setSensorsKilled(bool sensorsKilled);
512 
516  bool isEntity() const;
517 
522  bool isLocal() const;
523 
528  bool isAggregate() const;
529 
532 
533  virtual DtVrfSubordinateManager* subordinates();
534  virtual const DtVrfSubordinateManager* subordinates() const;
536 
542  void addSubordinate(DtVrfObject* subordinateEntity);
543 
545  void removeSubordinate(DtVrfObject* subordinateEntity);
546 
548  virtual DtSharedVrfObjectReference leadEntity() const;
549 
551  virtual DtSharedVrfObjectReference firstSubordinate() const;
552 
554  virtual DtSharedVrfObjectReference lastSubordinate() const;
555 
557  virtual DtSharedVrfObjectReference firstHealthySubordinate() const;
558 
561 
562  virtual DtSimManager* simManager();
563  virtual const DtSimManager* simManager() const;
565 
568 
569  virtual DtPhysicalWorld* physicalWorld();
570  virtual const DtPhysicalWorld* physicalWorld() const;
572 
575  virtual void tick();
576 
581  virtual void timedTick();
582 
585  virtual void setMinTickPeriod(double minTickPeriod);
586 
588  virtual double minTickPeriod() const;
589 
591  virtual void setMinTickPeriodVariance(double minTickPeriodVariance);
592 
594  virtual double minTickPeriodVariance() const;
595 
599  virtual void setNextTickTime(double nextTickTime);
600 
602  virtual double nextTickTime() const;
603 
609  virtual double calculateNextTickTime() const;
610 
611  virtual bool createSubordinates();
612  virtual DtVrfSubordinateManager* vrfSubordinates();
613  virtual const DtVrfSubordinateManager* vrfSubordinates() const;
614 
615  virtual bool createProcessStateRepositoryManager();
620 
621  virtual const DtVrfProcessStateRepositoryManager*
622  systemProcessStateRepositoryManager() const;
623  virtual DtVrfProcessStateRepositoryManager* systemProcessStateRepositoryManager();
625 
628  virtual const DtTaitBryan& localOrientationWrtDatabase() const;
629  virtual void setLocalOrientationWrtDatabase(
630  const DtTaitBryan& localOrientation);
631 
636  virtual DtVrfWeaponPSR* firstWeaponPSR() const;
637 
642  virtual void processObjectGeometry(const DtList& vertices);
643  virtual void processObjectGeometry(const DtLocalVertexList& vertices);
644 
651  virtual void processObjectGeometry();
652 
653  virtual const DtVrfObjectParameters* vrfBaseParameters() const;
654 
655  virtual DtGroundInteractionPt* groundCenter();
656  virtual const DtGroundInteractionPt* groundCenter() const;
657 
658  virtual const DtVector& getPartAttachPoint(const int partType) const;
659 
674  virtual void place(const DtVector& location, bool* dataAvailable = 0,
675  bool requireAllData = false);
676 
691  virtual void place(const DtReal heading, bool* dataAvailable = 0,
692  bool requireAllData = false);
693 
706  virtual void place(const DtVector& location, const DtReal heading,
707  bool clampToGroundFlag = true, bool* dataAvailable = 0,
708  bool requireAllData = false);
709 
712  virtual void reclampToGround();
713 
716  virtual void updatePositionFromModelVertices();
717 
718  virtual DtReal mass() const;
719  virtual void setMass(const DtReal mass);
720 
722  virtual const DtArticulatedPartCollection* artPartList() const;
723 
727  virtual void createParts();
728 
729  virtual DtTime lastTimeFiredUpon() const;
730  virtual void setLastTimeFiredUpon(const DtTime time);
731 
732  virtual bool underFire() const;
733  virtual void setUnderFire(bool underFire);
734 
740  DtNoSuppression = 0,
741  DtSuppressed1 = 1,
742  DtSuppressed2 = 2,
743  DtSuppressed3 = 3
744  };
745  virtual suppressionLevels suppressionLevel() const;
746  virtual void setSuppressionLevel(const suppressionLevels l);
747  virtual bool isSuppressed() const;
749 
750  virtual DtDeadReckonTypes deadReckoningAlgorithm() const;
751  virtual void setDeadReckoningAlgorithm(
752  DtDeadReckonTypes deadReckoningAlgorithm);
753 
755 
756  virtual const DtThresholder& deadReckoningThresholder() const;
757  virtual void setDeadReckoningThresholder(
758  const DtThresholder& thresholder);
760 
763 
764  virtual const DtEntityIdentifier & occupyingObjectId() const;
765  virtual void setOccupyingObjectId(const DtEntityIdentifier & objId);
767 
770 
771  virtual void setEchelonId(const DtEchelonId& echelonId);
772  virtual DtEchelonId& echelonId();
773  virtual const DtEchelonId& echelonId() const;
775 
777 
778  virtual void setIsSubordinateOfForceLevel(bool yesNo);
779  virtual bool isSubordinateOfForceLevel() const;
781 
784  virtual void putData(std::string& fp, int indentLevel = 0);
785 
790  virtual void getSelf(DtlObjPtr args, const DtReaderWriter::SearchPaths& searchPaths,
791  const DtVariableBindingsList& variableBindings);
792 
794  virtual int nextTaskId();
795 
797  virtual int nextSuspendId();
798 
804 
805 
808  virtual int spawningTaskId(int subtaskId) const;
809 
810  virtual void addPendingSubtaskId(const DtSymbolString& componentName, int subtaskId);
811  virtual void addPendingSubtaskId(const DtSymbolString& componentName, int taskId, int subtaskId);
812  virtual bool findPendingSubtaskId(const DtSymbolString& componentName, int subtaskId);
813  virtual bool isSubtasked(const DtSymbolString& componentName) const;
814  virtual bool findPendingSubtaskId(const DtSymbolString& componentName, int taskId, int subtaskId);
815  virtual void removePendingSubtaskId(const DtSymbolString& componentName, int subtaskId);
816  virtual void removePendingSubtaskId(const DtSymbolString& componentName, int taskId, int subtaskId);
817  virtual void removeAllPendingSubtaskIds(const DtSymbolString& componentName);
818  virtual void removeAllPendingSubtaskIds(const DtSymbolString& componentName, int taskId);
819  virtual void removeInactiveSubtaskStatus(const DtSymbolString& componentName);
820  virtual void removeInactiveSubtaskStatus(const DtSymbolString& componentName, int taskId);
821  virtual void printPendingSubtaskIds(const DtSymbolString& componentName) const;
822  virtual std::vector<int> currentPendingSubstaskIds(const DtSymbolString& componentName) const;
823  virtual std::vector<int> currentPendingSubstaskIds(const DtSymbolString& componentName, int taskId) const;
824  virtual DtSubtaskStatusEntry* pendingSubtaskStatus(const DtSymbolString& componentName, int subtaskId);
825  virtual DtSubtaskStatusEntry* pendingSubtaskStatus(const DtSymbolString& componentName, int taskId, int subtaskId);
827 
830  virtual DtTaskMessage* pendingSubtask(int subtaskId, DtString& controller) const;
831 
835  virtual bool taskedBySuperiorUponTaskComplete() const;
836 
837  virtual void setParentWasDestroyedWhenEmbarked(bool);
838  virtual bool parentWasDestroyedWhenEmbarked() const;
839 
840  virtual void detachFromParent();
841  virtual void attachToParent(DtSimObjectStateRepository* parent);
842  virtual void attachToParent(const DtUUID& parent);
843 
851  virtual void addAttachedTerrain(const DtUUID& parent);
852 
855  virtual void removeAttachedTerrain(const DtUUID& parent);
856 
859  Dt3dBoundingVolume* boundingVolume() const;
860 
864  DtVector localBoundingVolumeCenterPosition() const;
865 
870 
871  DtReal currentSpeed() const;
873 
878  DtReal forwardSpeed() const;
879 
881  virtual double totalMass() const;
882 
884 
885  DtReal currentHeading() const;
886  void setCurrentHeading(const DtReal heading);
888 
890 
891  virtual const DtRwNLengthUUIDVector& engagementZones() const;
892  virtual void setEngagementZones(const DtRwNLengthUUIDVector&);
894 
897 
898  virtual void addPostInitFromParamsCallback(DtPostInitializeFromParametersCallbackFcn fcn,
899  void* usr);
900  virtual void removePostInitFromParamsCallback(DtPostInitializeFromParametersCallbackFcn fcn,
901  void* usr);
903 
905  virtual void restoreStateProperties();
906 
908  virtual void initStatePropertiesNotToBeRestored();
909 
911 
912  virtual DtRwProperties& stateProperties();
913  virtual const DtRwProperties& stateProperties() const;
915 
917 
918  virtual DtRwProperties& parameterProperties();
919  virtual const DtRwProperties& parameterProperties() const;
921 
922 protected:
923 
926  virtual void initializeNextTaskId();
927 
929  virtual void setOrientationRelativeToParent();
930 
931  virtual DtAttachedTerrain* createAttachedTerrain();
932 
936  virtual DtArticulatedPartStateRepository* createArtPartStateRepository(
937  DtVrfObject* vrfObject, const DtObjectType& objectType,
938  const DtString& rwName = DtString::nullString());
939 
940 public:
941 
943  //{@
944  virtual void addRangeItem(const DtRangeItem&);
945  virtual void removeRangeItem(int index);
946  virtual void setRangeItems(const DtRangeItems&);
947  const DtRangeItems& rangeItems() const;
948  DtRangeItems& rangeItems();
949  virtual void clearRangeItems();
951 
952  DtAttachedTerrain* terrainAttachedTo() const;
953 
954  virtual boost::tribool onTerrainSurface() const;
955 
960  virtual double sensorSignature(const DtSymbolString& sensorDomain) const;
961 
964  virtual std::list<DtSymbolString> sensorSignatureDomains() const;
965 
972 
973  virtual DtSensorContactInfoList& objectContactList();
974  virtual const DtSensorContactInfoList& objectContactList() const;
976 
979  virtual DtString stringFromExtendedData(const DtString&) const;
980 
982  virtual std::map<DtString, DtString> unarchivedData() const;
983 
985  virtual void appendExtendedData(const std::map<DtString, DtString>&);
986 
987 protected:
990  virtual double baseSensorSignature(const DtSymbolString& sensorDomain) const;
991 
995  virtual double modifySensorSignature(const DtSymbolString& sensorDomain,
996  double baseSignature) const;
997 
1000  virtual bool initSignatureEvaluators();
1001 
1004  void clearSignatureEvaluators();
1005 
1007  virtual bool createObjectResourceManager();
1008 
1010  virtual void invokePostInitFromParamsCallbacks();
1011 
1012 public:
1014 
1015  static void taskCompleteCallback(const DtVrfObjectMessage* msg, void* usr);
1016  virtual void processTaskComplete(const DtVrfObjectMessage* msg);
1018 
1019  static DtVrfObjectStateRepository * creator(const DtString& name,
1020  DtVrfObject* simObject, const DtObjectType& objectType,
1021  DtVrfObjectParameters * parameters,
1022  DtReaderWriterRegistry * parentRegistry);
1023 
1024  static DtVrfObjectStateRepository* isVrfObjectStateRepository(
1025  DtSimObjectStateRepository* repository);
1026 
1027  static const DtVrfObjectStateRepository* isVrfObjectStateRepository(
1028  const DtSimObjectStateRepository* repository);
1029 
1032 
1033 protected:
1034 
1036  static bool visibilityFilter(const DtVrfObject * object, void * usr);
1037 
1038 protected:
1039 
1041 
1044 
1046 
1048 
1050 
1053 
1057 
1061 
1063 
1065 
1069 
1073 
1074  DtReal myMass;
1075  DtDeadReckonTypes myDeadReckoningAlgorithm;
1077 
1078  DtEntityIdentifier myOccupyingObjectId;
1079 
1082  DtArticulatedPartCollection myArtPartList;
1083 
1086 
1092 
1095 
1100 
1102 
1104 
1109 
1111 
1113 
1117 
1120 
1125 
1127 
1131 
1136 
1139 
1140 protected:
1141  //***** Important API change note
1143  //*****
1171 
1176 
1180 
1186 
1188 
1189  typedef std::list<DtSignatureModifierEvaluator*> DtSignatureModifierEvalList;
1190  typedef std::map<DtSymbolString, DtSignatureModifierEvalList*> DtSignatureModifierEvalMap;
1194 
1195  typedef tbb::concurrent_hash_map<unsigned int, double> DtSensorSignatureCacheMap;
1200 
1204 
1205  typedef std::pair<DtPostInitializeFromParametersCallbackFcn, void*> DtPostInitializeFromParametersInfo;
1206  typedef std::list<DtPostInitializeFromParametersInfo> DtPostInitializeFromParametersCallbackList;
1207 
1209 
1213  std::vector<DtRangeItem> myFixedRangeItems;
1214 
1221 
1224 
1226  std::vector<DtString> myStatePropertiesNotToBeRestored;
1227 
1229 
1232 
1235 
1236  std::set<DtArticulatedPartStateRepository*> myArtParts;
1237 
1238  static std::set<DtString> theDoNotArchiveAttributes;
1239 
1242 };

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)