VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
localObjectManager.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2021 MAK Technologies, Inc.
3  * All rights reserved.
4  ****************************************************************************/
5 
6 #pragma once
7 
15 #include <vrfobjcore/simObject.h>
25 #include <vrfutil/rwEntityType.h>
26 #include <vrfutil/vrf4XAPI.h>
27 
29 #include <vlpi/appearance.h>
30 #include <vlutil/vlConfig.h>
31 #include <vlutil/vlFilename.h>
32 #include <vlutil/vlHashlist.h>
33 #include <vlutil/vlList.h>
34 #include <vlutil/vlSmartPointers.h>
35 
38 #include <readerWriter/rwList.h>
39 
40 
42 #include <atomic>
43 #include <tbb/mutex.h>
44 #include <tbb/queuing_mutex.h>
45 #include <mutex>
46 #include <tbb/spin_mutex.h>
47 #include <tbb/spin_rw_mutex.h>
48 
50 #include <vector>
51 #include <list>
52 #include <set>
53 #include <boost/signals2.hpp>
54 
56 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
57 
59 class DtRwActivities;
61 class DtVrfNameGenerator;
63 class DtVrfParameterDb;
64 class DtSimObjectSubComponentTypes;
67 class DtVertexList;
69 class DtBaseEntityStateRepository;
70 class DtSimObjectManager;
71 class DtVrfObjectManagerTickArguments;
72 class DtSimTickArguments;
73 class DtSimMessage;
75 class DtIfAggregateAs;
76 class DtLocalObjectstateRepository;
77 class DtEchelonId;
78 class Coordinate_System;
81 class DtCreateQueueEntry;
82 class DtModifyQueueEntry;
84 class DtlInputStream;
88 class DtVrfObjectTransferManager;
92 
93 namespace makVrfEvents
94 {
95  class DtEventManager;
96  class DtEvent;
97 }
98 
99 namespace makVrf
100 {
101  class DtStateData;
102  class DtStateDataManager;
103 }
104 
105 typedef std::map<DtEntityIdentifier, DtLocalObject*> DtEntityIdMap;
106 typedef std::map<DtUUID, DtLocalObject*> DtSimObjectMap;
107 
109 typedef bool (*DtSimObjectUserInitFcn)(DtLocalObject* object, void* usr);
110 
114 const int DtSimMaxForceTypes = 256;
115 
118 {
122 };
123 
126 {
128 
132 };
133 
139 
158 {
159 private:
160 
163 
166 
168  DtLocalObjectManager& operator=(const DtLocalObjectManager& orig);
169 
170 public:
171 
174 
180  virtual ~DtLocalObjectManager();
183 
185  virtual void clearRemoteComponentAttachmentSystem();
186 
188  void removeAllRemoteComponentAttachments();
189 
190  const DtSimObjectManager* simObjectManager() const;
191 
194  virtual void createRemoteComponentAttachmentManager();
195 
197  virtual bool isRemoteComponentAttachment(const DtUUID&) const;
198 
200  virtual bool initializeRemoteComponentAttachmentSystem(const DtFilename& fromFile);
201 
203  DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager();
204  const DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager() const;
206 
209  virtual bool init();
210 
212  virtual DtVisualMetaDataManager* visualMetaDataManager() const;
213 
216  virtual DtFilename metaDataFilename(const DtEntityType&) const;
217 
222  virtual DtRwStringAttributeList* customizedMarkingsFor(const DtEntityType&);
223 
226  virtual bool add(DtLocalObject* simObject);
227 
229  virtual bool completeObjectAddition(DtLocalObject* simObject);
230 
233  virtual bool checkAndMoveIfUniqueObject(const DtVrfLocalObjectCreateInformation&);
234 
236  virtual bool isValidState() const;
237 
240  virtual void setOwnershipTransferManager(DtOwnershipTransferManager*);
241  DtOwnershipTransferManager* ownershipTransferManager() const;
242 
243 public:
245 
250  virtual DtString generateUniqueName(int maxLength, const DtString& root = "Object") const;
253  virtual DtString nextNameWithPrefix(const DtEntityType&, const DtString& potentialPrefix);
256  virtual DtString nextNameWithPrefix(unsigned int maxLength, const DtString& potentialPrefix);
257 
265  virtual DtString nextName(const DtEntityType& objectType);
266 
267  virtual DtString nextUnorganizedName();
268 
271  virtual void queueObjectsToUpgrade(const std::vector<DtLocalObject*>&);
272 
274  boost::signals2::signal <void (DtLocalObjectUpgrader*, const std::vector<DtLocalObject*>&)> signal_preObjectsUpgrade;
275  boost::signals2::signal <void (DtLocalObjectUpgrader*, const std::vector<DtLocalObject*>&)> signal_postObjectsUpgrade;
276 
278  boost::signals2::signal <void (DtLocalObject*)> signal_localObjectCreated;
279 
280 public:
281  virtual void insertObjectCreatedThisTick(DtLocalObject*);
282  virtual void removeObjectCreatedThisTick(DtLocalObject*);
283 
284 public:
286  virtual void setRunFullyThreaded(bool b);
287  bool runFullyThreaded() const;
288 
290  virtual void setParameterDatabase(DtVrfParameterDb* parameterDatabase);
291  virtual DtVrfParameterDb* parameterDatabase();
292 
293  virtual makVrf::DtStateDataManager* stateDataManager() const;
294 
295  virtual void setStateDataManager(makVrf::DtStateDataManager*);
296 
297  virtual void setCommunicationManager(DtCommunicationManager*);
299  {
300  return myCommunicationManager;
301  }
302 
303  DtNetworkInterfaceManager* networkInterfaceManager() const;
304  makVrfEvents::DtEventManager* eventManager() const;
305 
311  virtual void removeAndDelete(const DtUUID& objectName, bool andRemoveFromOrbat, bool andRemoveSubordinatres = true);
312  virtual void removeAndDelete(DtLocalObject* object, bool andRemoveFromOrbat, bool andRemoveSubordinatres = true);
313 
315  bool removingAllObjects() const
316  {
317  return myRemovingAllObjects;
318  }
319 
322  virtual void removeAndDeleteAll(bool andDeleteFromOrbat = false, const std::set<DtUUID>& except = std::set<DtUUID>());
323 
325  virtual bool objectInRemovalQueue(const DtUUID& uuid);
326 
333  virtual void registerInterfaceCallbacks();
334 
336  const DtSimulationServices* simulationServices() const;
338  DtSimulationServices* simulationServices();
339 
349  virtual void processCreateVrfObject(DtSimMessage* msg);
350 
352  typedef std::shared_ptr<DtCreateQueueEntry> DtCreateQueueEntryPtr;
353  typedef std::list<DtCreateQueueEntryPtr> DtVrfObjectCreateQueue;
354  virtual const DtVrfObjectCreateQueue& objectCreateQueue() const;
355 
362  virtual void processCreateVrfObject(const DtVrfLocalObjectCreateInformation& ifCreateVrfObject);
363 
371  virtual void processModifyVrfObject(DtSimMessage* msg);
372 
379  virtual void processModifyVrfObject(DtIfModifyVrfObject modObj);
380 
383  virtual void processModifyVrfOverlay(DtSimMessage* msg);
386  virtual void processDeleteVrfObject(DtSimMessage* msg);
389  virtual void processDeleteVrfObjectById(DtSimMessage* msg);
390 
393  virtual void processAggregateAs(DtSimMessage* msg);
396  virtual void processSkipTask(DtSimMessage* msg);
397 
399  virtual void queueSetSuperiorToForce(const DtUUID&, int force, int designator = 0);
400  virtual void queueSetSuperior(const DtUUID& subordinate, const DtUUID& superior, int designator = 0);
401  virtual void clearSubordinateOperations();
402  virtual bool hasOutstandingSubordinateChanges() const;
403 
408  virtual void processSetThresholds(DtSimMessage* msg);
409 
411  virtual void processDeleteDynamicTerrainServer(DtSimMessage*);
412 
415  virtual void removeObjectSubordinates(DtLocalObject* object, bool andRemoveFromOrbat);
416 
419  virtual void queueObjectForRemoval(const DtUUID& key, bool andRemoveFromOrbat = false);
420 
422  virtual void removeObjectsQueuedForRemoval();
423 
432  virtual void tick();
433 
435  virtual DtLocalObject* createAndInitVrfObject(DtIfCreateVrfObject* creationInfo);
436 
437  virtual DtLocalObject* createAndInitVrfObject(DtIfAggregateAs* aggInfo);
438 
448  virtual DtLocalObject* createAndInitVrfObject(
449  const DtEntityType& objectType,
450  bool publishLocalObject = true,
451  const DtString& objectName = DtString::nullString(),
452  const DtString& objectLabel = DtString::nullString(),
453  DtForceType forceType = DtForceOther,
454  const DtList* vertices = 0,
455  const DtTaitBryan* orientation = 0,
456  bool projection = false,
457  bool closedFigure = false,
458  const DtAppearance& appearance = DtAppearance::nullAppearance(),
459  bool createSubObjects = false,
460  DtVrfObjectUserInitFcn userInit = 0,
461  void* userInitData = 0,
462  bool organize = true,
463  const DtString& startingFormation = DtDefaultFormationString,
464  DtAggregateCreationMode initialAggregateState =
466  unsigned long requestId = 0,
467  const DtString& overlayParent = "",
468  const DtUUID& uuid = DtUUID::nullUUID(),
469  bool addToOrbat = false,
470  bool clampToGround = true,
471  const DtString& globalId = DtString::nullString());
472 
473  virtual DtLocalObject* createAndInitVrfObject(const DtVrfLocalObjectCreateInformation& crt);
474 
482  virtual DtLocalObject* createAndInitVrfObject(
483  const DtEntityType& objectType,
484  bool publishLocalObject = true,
485  const DtString& objectName = DtString::nullString(),
486  const DtString& objectLabel = DtString::nullString(),
487  DtForceType forceType = DtForceOther,
488  const DtVector& position = DtVector::zero(),
489  const DtTaitBryan* orientation = 0,
490  bool projection = false,
491  bool closedFigure = false,
492  const DtAppearance& appearance = DtAppearance::nullAppearance(),
493  bool createSubObjects = false,
494  DtVrfObjectUserInitFcn userInitFcn = 0,
495  void* userInitData = 0,
496  bool organize = true,
497  const DtString& startingFormation = DtDefaultFormationString,
498  DtAggregateCreationMode initialAggregateState =
500  unsigned long requestId = 0, const DtString& overlayParent = "",
501  const DtUUID& startingUUID = DtUUID::nullUUID(),
502  bool addToOrbat = false,
503  bool clampToGround = true);
504 
506  virtual void preallocateLuaScriptHandles(int);
507 
510  static void tickCallback(void* args);
511 
515  virtual void addVrfObjectAboutToBeAddedCallback(
516  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
517  const DtEntityType& filter = DtAllEntityType,
518  bool invertFilter = false) const;
519 
523  virtual void addVrfObjectAddedCallback(
524  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
525  const DtEntityType& filter = DtAllEntityType,
526  bool invertFilter = false) const;
527 
531  virtual void addVrfObjectAboutToBeLoadedCallback(
532  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
533  const DtEntityType& filter = DtAllEntityType,
534  bool invertFilter = false) const;
535 
540  virtual void addVrfObjectAboutToBeRemovedCallback(
541  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
542  const DtEntityType& filter = DtAllEntityType,
543  bool invertFilter = false) const;
544 
547  virtual void removeVrfObjectAboutToBeAddedCallback(
548  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
549  const DtEntityType& filter = DtAllEntityType,
550  bool invertFilter = false) const;
551 
554  virtual void removeVrfObjectAboutToBeLoadedCallback(
555  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
556  const DtEntityType& filter = DtAllEntityType,
557  bool invertFilter = false) const;
558 
561  virtual void removeVrfObjectAddedCallback(
562  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
563  const DtEntityType& filter = DtAllEntityType,
564  bool invertFilter = false) const;
565 
568  virtual void removeVrfObjectAboutToBeRemovedCallback(
569  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
570  const DtEntityType& filter = DtAllEntityType,
571  bool invertFilter = false) const;
572 
574  virtual int numLocalPublished() const;
575 
579  virtual bool objectNameExists(const DtString&) const;
580 
582  virtual DtLocalObject* createAndInitTopLevelVrfObject(DtForceType forceType);
585  virtual DtLocalObject* createAndInitTopLevelVrfObject(DtForceType forceType,
586  const DtString& name);
588  virtual DtString topLevelName(DtForceType forceType);
589 
592  virtual void objectNameChanged(const DtSimObject*, const DtString& oldName,
593  const DtString& newName);
594 
597  virtual void objectUUIDChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
598 
600 
601  virtual void addObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr) const;
602  virtual void removeObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr) const;
604 
608 
609  virtual void addObjectUUIDChangedCallback(DtVrfObjectUUIDChangedCallbackFcn fcn, void* usr) const;
610  virtual void removeObjectUUIDChangedCallback(DtVrfObjectUUIDChangedCallbackFcn fcn, void* usr) const;
612 
629  virtual DtLocalObject* aggregateAs(
630  const DtEntityType& aggregateType,
631  DtForceType force,
632  const DtVector& dbPosition,
633  DtReal heading,
634  const std::vector<DtUUID>& subordinates = std::vector<DtUUID>(),
635  const DtString& aggregateName = DtString::nullString(),
636  bool addToOrbat = true);
637 
639  virtual void sendCapableTasksAndSets(const std::vector<DtUUID>&, bool forceUpdate = false) const;
640 
645  virtual void setSimulationDateTimeBasedOnLocation(const DtVector& geocentricLocation, int timeOfDay);
646 
648  virtual void setCoordinateSystem(const Coordinate_System* coordinateSystem);
649 
651  virtual unsigned objectCount() const;
652 
653  const std::map<int, DtUUID>& forceLevelNodes() const
654  {
655  return myForceLevelNodesByUUID;
656  }
657 
672  virtual DtLocalObject* lookup(const DtUUID&) const;
673 
675  DtLocalObject* lookup(const std::string&) const;
676 
678  DtLocalObject* lookup(const DtString&) const;
679 
682  virtual bool uuidExists(const DtUUID&) const;
683 
685  virtual bool hasObjectType(const DtEntityType&) const;
686 
689  virtual bool markingTextExists(const DtString&) const;
690 
692  virtual const DtSimulationAddress& simulationAddress() const;
693 
695  virtual bool createSimObjectList();
696 
699  virtual const DtSimObjectMap& objectMap() const;
700  virtual DtSimObjectMap localObjectMap() const;
701 
703  virtual bool hostingDynamicTerrainServer() const;
704 
706  virtual bool hasDynamicTerrainServer() const;
707 
709  virtual DtVrfParameterDb* objectParametersDB() const;
710 
712  virtual void addSimObjectQueuedForRemovalCallback(
713  DtVrfObjectQueuedForRemocalCallbackFcn fcn, void* usr) const;
714  virtual void removeSimObjectQueuedForRemovalCallback(
715  DtVrfObjectQueuedForRemocalCallbackFcn fcn, void* usr) const;
716  virtual void invokeSimObjectQueuedForRemovalCallbacks(
717  const DtLocalObject* object);
718 
720  virtual void addValidStateChangedCallbackFcn(
721  DtValidStateChangedCallbackFcn fcn, void* usr) const;
722  virtual void removeValidStateChangedCallbackFcn(
723  DtValidStateChangedCallbackFcn fcn, void* usr) const;
724  virtual void invokeValidStateChangedCallbacks();
725 
727  virtual void addSimObjectConvertedToLocalCallback(DtSimObjectListActivityCallbackFcn fcn, void* usrData);
728  virtual void removeSimObjectConvertedToLocalCallback(DtSimObjectListActivityCallbackFcn fcn, void* usrData);
729 
731  virtual void addSimObjectConvertedToRemoteCallback(DtSimObjectListActivityCallbackFcn fcn, void* usrData);
732  virtual void removeSimObjectConvertedToRemoteCallback(DtSimObjectListActivityCallbackFcn fcn, void* usrData);
733 
737  virtual void addSimObjectAboutToBeAddedCallback(
738  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
739  const DtEntityType& filter = DtAllEntityType,
740  bool invertFilter = false) const;
741 
745  virtual void addSimObjectAddedCallback(
746  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
747  const DtEntityType& filter = DtAllEntityType,
748  bool invertFilter = false) const;
749 
753  virtual void addSimObjectAboutToBeRemovedCallback(
754  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
755  const DtEntityType& filter = DtAllEntityType,
756  bool invertFilter = false) const;
757 
761  virtual void addSimObjectAboutToBeLoadedCallback(
762  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
763  const DtEntityType& filter = DtAllEntityType,
764  bool invertFilter = false) const;
765 
768  virtual void removeSimObjectAboutToBeAddedCallback(
769  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
770  const DtEntityType& filter = DtAllEntityType,
771  bool invertFilter = false) const;
772 
775  virtual void removeSimObjectAddedCallback(
776  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
777  const DtEntityType& filter = DtAllEntityType,
778  bool invertFilter = false) const;
779 
782  virtual void removeSimObjectAboutToBeLoadedCallback(
783  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
784  const DtEntityType& filter = DtAllEntityType,
785  bool invertFilter = false) const;
786 
789  virtual void removeSimObjectAboutToBeRemovedCallback(
790  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
791  const DtEntityType& filter = DtAllEntityType,
792  bool invertFilter = false) const;
793 
795  virtual void invokeSimObjectConvertedToLocalCallbacks(
796  const DtLocalObject* simObject);
797 
799  virtual void invokeSimObjectConvertedToRemoteCallbacks(
800  const DtLocalObject* simObject);
801 
805  virtual void invokeSimObjectAboutToBeAddedCallbacks(
806  const DtLocalObject* simObject);
807 
811  virtual void invokeSimObjectAddedCallbacks(
812  const DtLocalObject* simObject);
813 
817  virtual void invokeSimObjectAboutToBeRemovedCallbacks(
818  const DtLocalObject* simObject);
819 
823  virtual void invokeSimObjectAboutToBeLoadedCallbacks(
824  const DtLocalObject* simObject);
825 
829  virtual void setSimObjectType(const DtString& type);
830  virtual const DtString& simObjectType() const;
832 
834  virtual void closingScenario(const std::set<DtUUID>& except = std::set<DtUUID>());
835 
838  virtual bool addUUIDMappingForObject(DtLocalObject* vrfObject);
839 
841  virtual void removeUUIDMappingForObject(DtLocalObject* vrfObject);
842 
845  virtual bool canSimulate() const;
846 
849  virtual void setCanSimulate(bool);
850 
853  virtual void addStealthType(const DtEntityType&);
854  virtual void removeStealthType(const DtEntityType&);
855  virtual bool isStealthType(const DtEntityType&) const;
856  std::vector<DtEntityType>& stealthTypes() { return myStealthTypes; };
857  const std::vector<DtEntityType>& stealthTypes() const { return myStealthTypes; };
858 
860  virtual DtLocalObject* getObjectByType(const DtEntityType&) const;
862  {
863  return myNameGenerator;
864  }
865 
867  virtual void createForceLevelObjects();
868 
869 public:
870 
873  virtual bool addSubordinatesToAggregate(DtLocalObject* object,
874  const std::vector<DtUUID>& subordinates, DtAggregateState desiredState = DtFullyDisaggregated);
875 
876 public:
878  virtual void convertToLocal(DtLocalObject*);
879  virtual void convertedToRemote(const DtLocalObject*);
880  public:
881 
884  virtual void removeVrfObject(const DtUUID&, bool queueDeletionOfVrfObject = false);
885 protected:
886  virtual DtEntityIdentifier generateObjectIdentifier();
887 
888  virtual void objectHandoffHandling(DtLocalObject*, int flag);
889 
890 protected:
892  virtual DtOwnershipTransferManager* createOwnershipTransferManager();
893 
896  virtual bool shouldAddImmediately(const DtLocalObject* simObject) const;
897 
898  public:
903  virtual void remove(DtLocalObject* simObject);
904 
905  virtual void objRemovedThisTick(const DtUUID& object);
906  virtual void addQueueObjectToDelete(DtLocalObject* vrfobject);
907  virtual void objectDeleteThisTick(DtLocalObject* vrfobject);
908  virtual void processModifyVrfOverlayObject(DtIfModifyVrfOverlay*, DtLocalObject*);
909 
910  virtual void upgradeObjects();
911 
914  static void renderImguiCallback(void* args);
915  virtual void updateImgui();
916 
917 protected:
920  virtual void onQueueObjectForRemoval(DtLocalObject* vrfObject, bool andRemoveFromOrbat = false);
921 
922  virtual const Coordinate_System* coordinateSystem() const;
923  virtual Coordinate_System* coordinateSystem();
924 
926  virtual void advanceFrame();
927 
928 protected:
929  virtual bool processPendingSubordinateRequests();
930  virtual void hookSuperiorToSubordinates(DtLocalObject* localObject);
931 
932 public:
934  virtual void deleteVrfObjectsToBeDeleted();
935 
936 protected:
937 
941  static void modifyVrfObjectCallback(DtSimMessage* msg, void* usr);
942  static void modifyVrfOverlayCallback(DtSimMessage* msg, void* usr);
943  static void skipTaskCallback(DtSimMessage* msg, void* usr);
944  static void setThresholdsCallback(DtSimMessage* msg, void* usr);
945  static void deleteDynamicTerrainServerCallback(DtSimMessage*, void*);
946 
947 #if DT_SINGLE_STATE_UPDATE_MESSAGE
948  static void vrfObjectStateUpdateCallback(DtSimMessage* msg, void* usr);
949 #endif
950 
958  static void createVrfObjectCallback(DtSimMessage* msg, void* usr);
959  static void deleteVrfObjectCallback(DtSimMessage* msg, void* usr);
960  static void deleteVrfObjectByIdCallback(DtSimMessage* msg, void* usr);
961  static void orderOfBattleOpCallback(DtSimMessage* msg, void* usr);
962  static void aggregateAsCallback(DtSimMessage* msg, void* usr);
963 
965  static void extendedLabelsOperationCallback(DtSimMessage* msg, void* usr);
966  virtual void processExtendedLabelsOperation(DtSimMessage*);
967 
969  static void requestActivitiesCallback(DtSimMessage* msg, void* usr);
970  virtual void processRequestActivities(DtSimMessage*);
971 
973  static void requestJoystickControlsCallback(DtSimMessage* msg, void* usr);
974  virtual void processRequestJoystickControls(DtSimMessage*);
975 
976  virtual void sendObjectsCreatedMessage();
977  virtual void sendObjectsDeletedMessage();
978 
979  virtual void placeObjectEvent(const makVrfEvents::DtEvent&);
980 
981 protected:
982 
985  virtual DtCreateQueueEntry* createQueueEntryCreator(const DtVrfLocalObjectCreateInformation& msg);
986 
989  virtual DtModifyQueueEntry* modifyQueueEntryCreator(const DtIfModifyVrfObject& msg);
990 
991  virtual void postInitFromParamsCallback(DtLocalObject*, DtAggregateCreationMode);
992  virtual DtVrfNameGenerator* createNameGenerator();
993  virtual DtEntityType potentialRandomObjectTypeFrom(const DtEntityType& original);
994 
1002  virtual void createSubObjectsFromParameters(DtLocalObject* parent,
1003  bool publishSubobjects, unsigned long requestId, const DtString& overlayParent, bool addToOrbat, bool clampToGround);
1004 
1007  virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(const DtList&) const;
1008 
1010  virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(const DtList& subObjects,
1011  int& totalLeafNodes) const;
1012 
1019  virtual DtLocalObject* createSubObjectFromParameterEntry(
1020  const DtVrfSubObjectParameterEntry& entry, const DtVector& positionOffsetFromParent,
1021  const DtLocalObject& parent,
1022  const DtString& formationName,
1023  bool publishSubObject, unsigned long requestId = 0, const DtString& overlayParent = "",
1024  const DtString& markingText = "", const DtUUID& uuid = DtUUID::nullUUID(),
1025  bool addToOrbat = true, bool clampToGround = true);
1026 
1029  virtual void modifyInterfaceContentForNewObject(DtSimInterfaceContent*, DtLocalObject*, bool& isLocal) const;
1030 
1031  virtual void updateSubordianteFunction(DtLocalObject* agg, const std::vector<DtUUID>& subordiantes);
1032 
1033 protected:
1036 
1038 
1040  mutable tbb::spin_rw_mutex mySimObjectListMutex;
1042 
1045 
1050 
1055 
1060 
1065 
1068 
1071 
1072  //mutable std::set<DtSimObjectListActivityCallbackInfo*> myRemovalCallbacksRemoved;
1073 
1076 
1078 
1081  std::map<DtUUID, bool> myObjectsToRemoveQueue;
1082 
1086 
1089  typedef std::shared_ptr<DtModifyQueueEntry> DtModifyQueueEntryPtr;
1090  typedef std::list<DtModifyQueueEntryPtr> DtVrfObjectModifyQueue;
1092 
1094 
1096 
1098 
1101 
1104 
1107 
1109 
1112 
1114 
1117 
1118  std::vector<DtEntityType> myStealthTypes;
1119 
1120  std::vector<DtLocalObject*> myVrfObjectsToDelete;
1121 
1123 
1126  std::set<DtLocalObject*> myCompleteObjectAddition;
1127 
1129 
1130  tbb::spin_mutex myObjectPublisherMutex;
1131  tbb::spin_mutex myRemovalQueueMutex;
1132 
1135 
1137  std::set<DtLocalObject*> myObjectsCreatedThisTick;
1138  std::set<DtString> myObjectsDeletedThisTick;
1139 
1140  std::atomic<int> myNumLocalPublished;
1142  mutable tbb::spin_rw_mutex myObjectsToRemoveQueueMutex;
1143 
1145  std::set<DtUUID> myObjectWasRemovedThisTick;
1146 
1148 
1149  mutable tbb::spin_rw_mutex myQueueSetSuperiorMutex;
1150  std::map<int, DtUUID> myForceLevelNodesByUUID;
1152 
1154  {
1155  PendingStruct() : superior(DtUUID::nullUUID()), designator(0) {};
1156  PendingStruct(const DtUUID& sup, int des) : superior(sup), designator(des) {};
1157  PendingStruct(const PendingStruct& orig) : superior(orig.superior), designator(orig.designator) {};
1158  PendingStruct& operator=(const PendingStruct& rhs) { superior = rhs.superior; designator = rhs.designator; return *this; };
1159 
1160  DtUUID superior;
1162  };
1163 
1164  typedef std::map<DtUUID, PendingStruct> PendingSetSuperior;
1166 
1167  typedef std::map<DtUUID, std::set<DtUUID> > PendingSuperiorsToSet;
1169 
1170  boost::signals2::scoped_connection myPlaceObjectEventConnection;
1171 
1172  typedef std::map<DtUUID, boost::signals2::connection> PostInitParamsConnections;
1175 
1177 
1178  typedef std::map<DtString, DtRwStringAttributeList*> VisualMarkings;
1180  tbb::spin_rw_mutex myVisualMarkingsMutex;
1181 
1182  std::set<DtUUID> myObjectsToUpgrade;
1183 
1185 
1186 public:
1190  VRF4API_METHOD DtSimObjectReference lookupVrfObjectByUUID(const DtUUID& u) const;
1191  VRF4API_METHOD const DtSimulationServices* simManager() const;
1192  VRF4API_METHOD DtSimulationServices* simManager();
1193 
1196  bool reevaluateFlag = false, DtTime evaluationPeriod = 0);
1197 
1198  VRF4API_METHOD DtVrfObjectPlanAdministrator* planAdministrator();
1199  VRF4API_METHOD DtSimObjectReference lookupVrfObjectByMarkingText(const DtString&) const;
1200  VRF4API_METHOD const DtReaderWriter::SearchPaths& searchPaths() const;
1202 };
1203 
1205 {
1207 }
1208 
1210 {
1212 }
1213 
1214 #include "localObjectManager.inl"
UUID is a unique ID wrapper class.
Definition: uuid.h:59
DtUUID superior
Definition: localObjectManager.h:1158
Class Description: DtVrfSimulationObjectGroupGeometry is a specialized that class will calculate obje...
Definition: vrfSimulationObjectGroupGeometry.h:50
std::map< int, DtUUID > myForceLevelNodesByUUID
Definition: localObjectManager.h:1150
This singleton class keeps track of components that should be added to remote, non VR-Forces entities...
Definition: remoteComponentAttachmentManager.h:35
DtValidStateChangedCallbackList myValidStateChangedCallbackList
Definition: localObjectManager.h:1111
class DtLocalObjectManager:
Definition: localObjectManager.h:157
DtString mySimObjectType
Type of DtSimObject to create. Types are defined in simObjectTypes.h.
Definition: localObjectManager.h:1075
class DtIfModifyVrfOverlay
Definition: ifModifyVrfOverlay.h:47
Instances of DtVrfParameterDb are the database of DtVrfObjectParameters objects used in the construct...
Definition: vrfParameterDb.h:41
tbb::spin_rw_mutex myVisualMarkingsMutex
Definition: localObjectManager.h:1180
DtSimulationServices * mySimulationServices
Definition: localObjectManager.h:1077
tbb::mutex myTopLevelNodeCreationMutex
Definition: localObjectManager.h:1037
DtString myNewName
Definition: localObjectManager.h:120
The DtVisualMetaDataManager will use ead meta data files based on the given entity type...
Definition: visualMetaDataManager.h:27
bool(* DtSimObjectUserInitFcn)(DtLocalObject *object, void *usr)
User action function definition for createAndInitSimObject()
Definition: localObjectManager.h:109
bool myRemovingAllObjects
Definition: localObjectManager.h:1136
const char DtDefaultFormationString[]
Definition: extendedAggregateEnums.h:23
DtVrfObjectModifyQueue myObjectsToModifyQueue
Definition: localObjectManager.h:1091
Definition: localObjectManager.h:1153
DtSimObjectListActivityCallbackList myAboutToBeRemovedSimObjectCallbackList
List of DtSimObjectListActivityCallbackFcn*s. Clients register callback functions on this list for no...
Definition: localObjectManager.h:1064
PendingStruct()
Definition: localObjectManager.h:1155
DtSimObjectListActivityCallbackList myAboutToBeLoadedSimObjectCallbackList
List of DtSimObjectListActivityCallbackFcn*s. Clients register callback functions on this list for no...
Definition: localObjectManager.h:1049
void(* DtSimObjectListActivityCallbackFcn)(const DtLocalObject *simObject, void *usr)
Callback function definition.
Definition: simObjectListActivityCallbackInfo.h:16
double myTimeToPublishNextStateUpdate
Definition: localObjectManager.h:1095
The DtEventManager handles the sending and receipt of system events (fire, detonate, command, etc). It provides a thread-safe way for the sim engine to send and receive such events, between both components within this sim engine and other remote applications.
Definition: eventManager.h:33
DtVrfNameGenerator * myNameGenerator
Definition: localObjectManager.h:1176
DtLocalObject * myDynamicTerrainServer
Definition: localObjectManager.h:1097
std::map< DtUUID, boost::signals2::connection > PostInitParamsConnections
Definition: localObjectManager.h:1172
DtRemoteComponentAttachmentManager * myRemoteComponentAttachmentManager
List of components to attach to remote, non-vrf entities.
Definition: localObjectManager.h:1035
DtCallbackList< const DtLocalObject * >::DtCallbackFunctionType DtVrfObjectQueuedForRemocalCallbackFcn
Definition: localObjectManager.h:137
DtVrfSubObjectParameterEntry.
Definition: vrfSubObjectParameterEntry.h:27
VisualMarkings myVisualMarkings
Definition: localObjectManager.h:1179
std::shared_ptr< const DtManagedObjectList > DtManagedObjectListConstPtr
Typedef for a shared pointer to a const DtOrgViewManagedObjectList. These lists are used within VR-Fo...
Definition: managedObjectList.h:35
bool(* DtVrfObjectUserInitFcn)(DtLocalObject *vrfObject, void *usr)
User action function definition for createAndInitVrfObject()
Definition: localObjectCreateInformation.h:25
static DtEntityType DtAllEntityType(-1,-1,-1,-1,-1,-1,-1)
This file includes entity types that are used in the system as predefined types that are referenced i...
makVrf::DtStateDataManager * myStateDataManager
Definition: localObjectManager.h:1133
The DtLocalObjectCreateInformation class is a subset of the information used in the DtIfCreateVrfObje...
Definition: vrfLocalObjectCreateInformation.h:26
Callback list for DtLocalObjectManager object list activity, such as adding and removing objects...
Definition: simObjectListActivityCallbackList.h:25
std::set< DtLocalObject * > myObjectsCreatedThisTick
Definition: localObjectManager.h:1137
PendingSuperiorsToSet myPendingSuperiorsToSet
Definition: localObjectManager.h:1168
tbb::spin_mutex myPostInitParamsConnectionsMutex
Definition: localObjectManager.h:1174
DtObjectQueuedForRemovalCallbackList myObjectQueuedForRemovalCallbackList
Definition: localObjectManager.h:1103
DtVrfObjectUUIDChangedCallbackInfo()
Definition: localObjectManager.h:127
Arguments passed by the DtLocalObjectManager::addUUIDChangedCallback callbacks.
Definition: localObjectManager.h:125
std::list< DtModifyQueueEntryPtr > DtVrfObjectModifyQueue
Definition: localObjectManager.h:1090
class DtIfModifyVrfObject:
Definition: ifModifyVrfObject.h:50
const std::vector< DtEntityType > & stealthTypes() const
Definition: localObjectManager.h:857
std::set< DtLocalObject * > myCompleteObjectAddition
Definition: localObjectManager.h:1126
Renders a list of local entities, and also windows for any entities selected from that list...
Definition: imGuiLocalObjectList.h:30
Contains the DtVrfObjectPredicate class declaration.
Definition: vrfObjectPredicate.h:20
Manages loading and destruction of the geometric models for objects. Will reference the object parame...
Definition: objectGeometricModelsManager.h:34
int myAppIdRangeMax
Definition: localObjectManager.h:1128
Definition: ownershipTransferManager.h:30
DtNameChangedCallbackList myObjectNameChangedCallbackList
Definition: localObjectManager.h:1100
void(* DtVrfObjectListActivityCallbackFcn)(const DtLocalObject *vrfObject, void *usr)
Callback function definition (for callbacks registered on DtLocalObject* additions to and removals fr...
Definition: simObjectListActivityCallbackList.h:19
DtVrfObjectCreateQueue myObjectsToCreateQueue
Object creation queue; objects are only created once the terrain at the requested location has been p...
Definition: localObjectManager.h:1085
std::set< DtString > myObjectsDeletedThisTick
Definition: localObjectManager.h:1138
bool myInitialTimeSetThisFrame
Definition: localObjectManager.h:1122
static const DtUUID & nullUUID()
DtCallbackList< const DtVrfObjectNameChangedCallbackInfo & > DtNameChangedCallbackList
Definition: localObjectManager.h:1099
Definition: coordSystem.h:54
Definition: event.h:13
bool myRunFullyThreaded
Definition: localObjectManager.h:1124
std::map< DtEntityIdentifier, DtLocalObject * > DtEntityIdMap
Definition: localObjectManager.h:105
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
std::set< DtUUID > myObjectsToUpgrade
Definition: localObjectManager.h:1182
DtSimObjectMap mySimObjectList
Definition: localObjectManager.h:1041
std::map< DtUUID, DtLocalObject * > DtSimObjectMap
Definition: localObjectManager.h:106
The DtCommunicationManager class is a convenience class that will create both the DtNetworkInterfaceM...
Definition: communicationManager.h:54
Definition: createObjectServiceInterface.h:25
PendingStruct(const PendingStruct &orig)
Definition: localObjectManager.h:1157
File: simMsg.h.
Definition: simMessage.h:35
class DtVertexList:
Definition: vertexList.h:22
The DtLocalObjectUpgrader class will be responsible for starting the process of upgrading objects fro...
Definition: localObjectUpgrader.h:32
DtCallbackList< const DtVrfObjectUUIDChangedCallbackInfo & >::DtCallbackFunctionType DtVrfObjectUUIDChangedCallbackFcn
Definition: localObjectManager.h:136
DtUUID myNewUUID
Definition: localObjectManager.h:130
std::vector< DtFilename > SearchPaths
Definition: readerWriter.h:92
const int DtSimMaxForceTypes
The enumeration in DIS only specifies 4 types, but it goes across the network in an 8-bit field...
Definition: localObjectManager.h:114
DtCallbackList< const DtVrfObjectNameChangedCallbackInfo & >::DtCallbackFunctionType DtVrfObjectNameChangedCallbackFcn
Callback signature for DtLocalObjectManager::addNameChangedCallback().
Definition: localObjectManager.h:135
std::shared_ptr< DtModifyQueueEntry > DtModifyQueueEntryPtr
Object modification queue; objects which are ground clamped are only moved once the terrain at the re...
Definition: localObjectManager.h:1089
Definition: noArgumentCallbackList.h:90
std::shared_ptr< DtCreateQueueEntry > DtCreateQueueEntryPtr
Returns the objects to create queue.
Definition: localObjectManager.h:352
std::vector< DtEntityType > myStealthTypes
Definition: localObjectManager.h:1118
A utility class for use with DtConsoleCommandManager. This class takes ownership of an arbitrary numb...
Definition: consoleCommandManager.h:168
const DtSimObject * myVrfObject
Definition: localObjectManager.h:121
tbb::spin_rw_mutex mySimObjectListMutex
Hashlist of all DtLocalObject*s, keyed on DtUUID.
Definition: localObjectManager.h:1040
DtCommunicationManager * communicationManager() const
Definition: localObjectManager.h:298
DtVrfNameGenerator * vrfNameGenerator() const
Definition: localObjectManager.h:861
boost::signals2::signal< void(DtLocalObject *)> signal_localObjectCreated
Signal sent after a local object is created. Can aboid some timing issues with creating a network pub...
Definition: localObjectManager.h:278
bool myWasValid
Definition: localObjectManager.h:1116
bool removingAllObjects() const
Whether ot not all objects are being removed.
Definition: localObjectManager.h:315
PostInitParamsConnections myPostInitParamsConnections
Definition: localObjectManager.h:1173
DtCommunicationManager * myCommunicationManager
Definition: localObjectManager.h:1134
Definition: echelonId.h:13
DtSimObjectListActivityCallbackList mySimObjectConvertedToRemoteCallbacks
List of DtSimObjectListActivityCallbackFcn*s for objects that have been converted to a remote object...
Definition: localObjectManager.h:1070
std::atomic< int > myNumLocalPublished
Entity Identifier to be consistent with current DtIfVrfObjectDeleted message.
Definition: localObjectManager.h:1140
DtUUIDChangedCallbackList myObjectUUIDChangedCallbackList
Definition: localObjectManager.h:1106
tbb::spin_mutex myCompleteObjectAdditionMutex
Definition: localObjectManager.h:1125
The DtVrfObjectPlanAdministrator performs plan-related tasks that must be done in a centralized manne...
Definition: vrfObjectPlanAdministrator.h:44
DtImGuiLocalObjectList * myImGuiLocalObjectList
Definition: localObjectManager.h:1184
The DtNetworkInterfaceManager manages all network interfaces utilized by the sim engine. Often there is only one, but it is possible for there to be multiple. Each network interface is an instance of a subclass of DtNetworkManagerInterface. As state data is created or removed, the DtNetworkInterfaceManager will notify each of its network interfaces, so that they may create object network interfaces to output required state data to the network.
Definition: networkInterfaceManager.h:47
DtSimObjectListActivityCallbackList myAddedSimObjectCallbackList
List of DtSimObjectListActivityCallbackFcn*s. Clients register callback functions on this list for no...
Definition: localObjectManager.h:1059
std::map< DtString, DtRwStringAttributeList * > VisualMarkings
Definition: localObjectManager.h:1178
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:96
DtConsoleCommandOwner * myConsoleCommands
Definition: localObjectManager.h:1108
This class is the central access point for all current-frame state of all objects in the simulation i...
Definition: simObjectManager.h:32
DtCallbackList< bool >::DtCallbackFunctionType DtValidStateChangedCallbackFcn
Definition: localObjectManager.h:138
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: simObject.h:80
PendingSetSuperior myPendingSetSuperior
Definition: localObjectManager.h:1165
class DtCreateQueueEntry:
Definition: createQueueEntry.h:25
DtSimObjectListActivityCallbackList myAboutToBeAddedSimObjectCallbackList
List of DtSimObjectListActivityCallbackFcn*s. Clients register callback functions on this list for no...
Definition: localObjectManager.h:1054
DtManagedObjectListConstPtr myForceLevelNodes
Definition: localObjectManager.h:1151
Definition: modifyQueueEntry.h:24
std::vector< DtEntityType > & stealthTypes()
Definition: localObjectManager.h:856
const std::map< int, DtUUID > & forceLevelNodes() const
Definition: localObjectManager.h:653
std::list< DtCreateQueueEntryPtr > DtVrfObjectCreateQueue
Definition: localObjectManager.h:353
const Coordinate_System * myCoordinateSystemPtr
Definition: localObjectManager.h:1093
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtCallbackList< const DtVrfObjectUUIDChangedCallbackInfo & > DtUUIDChangedCallbackList
Definition: localObjectManager.h:1105
bool myCanSimulate
Definition: localObjectManager.h:1115
std::map< DtUUID, PendingStruct > PendingSetSuperior
Definition: localObjectManager.h:1164
tbb::spin_mutex myObjectsCreatedThisTickMutex
Definition: localObjectManager.h:1141
DtCallbackList< const DtLocalObject * > DtObjectQueuedForRemovalCallbackList
Definition: localObjectManager.h:1102
DtRemoteComponentAttachmentManager * remoteComponentAttachmentManager()
Returns the remote component attachment manager.
Definition: localObjectManager.h:1204
bool myCreatedCharacterManager
Definition: localObjectManager.h:1113
DtOwnershipTransferManager * myOwnershipTransferManager
Definition: localObjectManager.h:1147
tbb::spin_mutex myRemovalQueueMutex
Definition: localObjectManager.h:1131
std::map< DtUUID, std::set< DtUUID > > PendingSuperiorsToSet
Definition: localObjectManager.h:1167
std::vector< DtLocalObject * > myVrfObjectsToDelete
Definition: localObjectManager.h:1120
const DtLocalObject * myVrfObject
Definition: localObjectManager.h:131
Definition: simInterfaceContent.h:45
PendingStruct(const DtUUID &sup, int des)
Definition: localObjectManager.h:1156
int designator
Definition: localObjectManager.h:1161
tbb::spin_rw_mutex myObjectWasRemovedThisTickMutex
Definition: localObjectManager.h:1144
std::set< DtUUID > myObjectWasRemovedThisTick
Definition: localObjectManager.h:1145
boost::signals2::scoped_connection myPlaceObjectEventConnection
Definition: localObjectManager.h:1170
This is the FIXED length portion of a DtIfAggregateAs message content when placed on the network...
Definition: ifAggregateAs.h:39
DtVrfParameterDb * myParameterDatabase
Parameter database used in creation and initialization of DtLocalObjects.
Definition: localObjectManager.h:1044
Arguments passed by the DtLocalObjectManager::addNameChangedCallback callbacks.
Definition: localObjectManager.h:117
DtSimObjectListActivityCallbackList mySimObjectConvertedToLocalCallbacks
List of DtSimObjectListActivityCallbackFcn*s for objects that have been converted to a local object...
Definition: localObjectManager.h:1067
DtCallbackList< bool > DtValidStateChangedCallbackList
Definition: localObjectManager.h:1110
#define VRF4API_METHOD
Include this header file to allow for the definition/usage of the ability to mark something as deprec...
Definition: vrf4XAPI.h:23
tbb::spin_mutex myObjectPublisherMutex
Definition: localObjectManager.h:1130
A DtRwActivities list will contain a list of activities (key/value pair) by entity type that will sup...
Definition: rwActivities.h:20
DtAggregateCreationMode
Defines how the initial DtAggregateState should be set upon creation of an aggregate entity...
Definition: createObjectServiceInterface.h:23
DtUUID myOldUUID
Definition: localObjectManager.h:127
std::map< DtUUID, bool > myObjectsToRemoveQueue
Objects queued for removal; processed each tick by removeObjectsQueuedForRemoval. ...
Definition: localObjectManager.h:1081
DtString myOldName
Definition: localObjectManager.h:119
class DtRwStringAttributeList:
Definition: rwStringAttributeList.h:29
The DtVrfNameGenerator class will generate a unique name by object type.
Definition: vrfNameGenerator.h:20
tbb::spin_rw_mutex myQueueSetSuperiorMutex
Definition: localObjectManager.h:1149
class DtIfCreateVrfObject:
Definition: ifCreateVrfObject.h:77
A locally simulated VRF object.
Definition: localObject.h:98
tbb::spin_rw_mutex myObjectsToRemoveQueueMutex
Definition: localObjectManager.h:1142
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73

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)