VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
dynamicTerrainStateComponent.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
10 #include <vlpi/entityIdentifier.h>
12 
13 namespace makVrf
14 {
16  {
18  {
19  }
20 
22  : myObjectIdentifier(orig.myObjectIdentifier)
23  , myGeometryAndData(orig.myGeometryAndData)
24  {
25  }
26 
28  {
29  myObjectIdentifier = rhs.myObjectIdentifier;
30  myGeometryAndData = rhs.myGeometryAndData;
31 
32  return *this;
33  }
34 
35  DEFINE_ACCESSOR_MUTATOR(DtEntityIdentifier, objectIdentifier, ObjectIdentifier)
36  DEFINE_REF_ACCESSORS(DtTerrainGeometryAndDataList, geometryAndData, GeometryAndData)
37 
38  protected:
39  DtEntityIdentifier myObjectIdentifier;
40  DtTerrainGeometryAndDataList myGeometryAndData;
41  };
42 
46  {
47  public:
49 
51  : DtFrameStateInterface(storage)
52  {
53  }
54 
55  UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(DtEntityIdentifier, objectIdentifier, ObjectIdentifier)
57  virtual void addGeometryAndDataEntry(const DtTerrainGeometryAndData& val) { throw DtUnimplementedMethod("virtual void addGeometryAndDataEntry(const DtTerrainGeometryAndData& val) is unimplemented by this class."); }
58  virtual void setGeometryAndDataEntry(unsigned index, const DtTerrainGeometryAndData& val) { throw DtUnimplementedMethod("virtual void setGeometryAndDataEntry(unhsigned index, const DtTerrainGeometryAndData& val) is unimplemented by this class."); }
59  virtual void removeGeometryAndDataEntry(unsigned index) { throw DtUnimplementedMethod("virtual void removeGeometryAndDataEntry(unsigned index) is unimplemented by this class."); }
60  virtual void setDataForEntry(unsigned index, const DtKeyValuePairList& val,
61  DtU32 priority, DtU32 eventNumber) { throw DtUnimplementedMethod("virtual void setDataForEntry(unsigned index) is unimplemented by this class."); }
62  };
63 
66  {
67  public:
69 
71  const DtDynamicTerrainStateComponentData& frameState() const { return myData; };
73 
74  const DtEntityIdentifier& objectIdentifier() const;
75  void setObjectIdentifier(const DtEntityIdentifier& id);
76 
77  const DtTerrainGeometryAndDataList& geometryAndData() const;
78  DtTerrainGeometryAndDataList& geometryAndData();
79 
81  virtual void addGeometryAndDataEntry(const DtTerrainGeometryAndData& val);
82 
84  virtual void setGeometryAndDataEntry(unsigned index, const DtTerrainGeometryAndData& val);
85 
87  virtual void removeGeometryAndDataEntry(unsigned index);
88 
91  virtual void setDataForEntry(unsigned index, const DtKeyValuePairList& val,
92  DtU32 priority, DtU32 eventNumber);
93 
95  virtual void makeWritable() {};
96 
98  virtual void makeReadOnly() {};
99 
100  protected:
102  };
103 
106  {
107  public:
109 
111  const DtDynamicTerrainStateComponentData& frameState() const { return myData; };
112 
113  const DtEntityIdentifier& objectIdentifier() const;
114  const DtTerrainGeometryAndDataList& geometryAndData() const;
115 
116  protected:
119  {
120  myData = data;
121  }
122 
123  protected:
125  };
126 
130  {
131  public:
133 
134  bool isDoubleBuffered() { return true; };
135  const DtFrameStateInterface* currentFrameState() const { return &myCurrentFrameState; }
136  virtual DtFrameStateInterface* nextFrameState() { return &myNextFrameState; };
137  virtual const DtFrameStateInterface* nextFrameState() const { return &myNextFrameState; };
138 
140  {
141  if (myNextFrameState.isWritable())
142  {
143  myCurrentFrameState.advanceFrame(myNextFrameState.frameState());
144  }
145 
146  myCurrentFrameState.emitComponentUpdated();
147  }
148 
150  {
151  myCurrentFrameState.updateStateData(sd);
152  myNextFrameState.updateStateData(sd);
153  }
154 
155  virtual void aboutToBeDeleted() override
156  {
158  myCurrentFrameState.aboutToBeDeleted();
159  myNextFrameState.aboutToBeDeleted();
160  }
161 
162  protected:
165  };
166 
170 }
virtual void setDataForEntry(unsigned index, const DtKeyValuePairList &val, DtU32 priority, DtU32 eventNumber)
Definition: dynamicTerrainStateComponent.h:60
DtDynamicTerrainStateComponentData(const DtDynamicTerrainStateComponentData &orig)
Definition: dynamicTerrainStateComponent.h:21
Definition: stateDataTypes.h:23
virtual void setGeometryAndDataEntry(unsigned index, const DtTerrainGeometryAndData &val)
Definition: dynamicTerrainStateComponent.h:58
Definition: terrainGeometryAndData.h:24
DtDynamicTerrainStateComponentData()
Definition: dynamicTerrainStateComponent.h:17
DtDynamicTerrainStateComponentData & frameState()
Definition: dynamicTerrainStateComponent.h:72
Definition: keyValuePairList.h:18
const DtDynamicTerrainStateComponentData & frameState() const
Current frame state only can access current frame buffers. This ensures thread safety.
Definition: dynamicTerrainStateComponent.h:111
Definition: stateComponent.h:266
DtStateComponentCreator< DtDynamicTerrainStateComponentImplementation > DtDynamicTerrainStateComponentCreator
5) Define the creator. This will need to be registered with the REGISTER_STATE_COMPONENT macro in the...
Definition: dynamicTerrainStateComponent.h:169
const DtFrameStateInterface * currentFrameState() const
Definition: dynamicTerrainStateComponent.h:135
bool isDoubleBuffered()
Definition: dynamicTerrainStateComponent.h:134
void advanceFrame(const DtDynamicTerrainStateComponentData &data)
Definition: dynamicTerrainStateComponent.h:118
DtTerrainGeometryAndDataList myGeometryAndData
Definition: dynamicTerrainStateComponent.h:40
#define UNDEFINED_RETURNREF_ACCESSORS(ReturnType, Member)
Definition: doubleBufferedDataStorage.h:40
DtDynamicTerrainStateComponentCurrentFrame myCurrentFrameState
Definition: dynamicTerrainStateComponent.h:163
Definition: terrainGeometryAndDataList.h:23
virtual void makeWritable()
Override to make component writable.
Definition: dynamicTerrainStateComponent.h:95
virtual const DtFrameStateInterface * nextFrameState() const
Definition: dynamicTerrainStateComponent.h:137
DtDynamicTerrainStateComponentData & operator=(const DtDynamicTerrainStateComponentData &rhs)
Definition: dynamicTerrainStateComponent.h:27
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:339
#define DEFINE_STATE_COMPONENT_TYPE(CreatedComponent)
Definition: stateComponent.h:228
Subclass from this to indicate that this will be a double buffered state component.
Definition: stateComponent.h:379
void updateStateData(DtStateData *sd)
Implement to update data storage to the new state data.
Definition: dynamicTerrainStateComponent.h:149
const DtDynamicTerrainStateComponentData & frameState() const
Next frame access write access. Ensure this is only used in a single thread (i.e.a controller thread)...
Definition: dynamicTerrainStateComponent.h:71
virtual void aboutToBeDeleted()
Definition: dynamicTerrainStateComponent.h:15
DtDynamicTerrainStateComponentData myData
Definition: dynamicTerrainStateComponent.h:124
2) Define the next frame class. This will be used for write access.
Definition: dynamicTerrainStateComponent.h:65
#define UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(Type, Member, Set)
Definition: doubleBufferedDataStorage.h:57
#define DEFINE_REF_ACCESSORS(ReturnType, Method, Member)
Definition: doubleBufferedDataStorage.h:13
4) Define the state component that will contain the wrappers to the next and current frame states tha...
Definition: dynamicTerrainStateComponent.h:129
#define DEFINE_ACCESSOR_MUTATOR(ReturnType, Accessor, Mutator)
Definition: doubleBufferedDataStorage.h:23
void updateDataStorage()
Implement to update data storage. Called from advanceFrame.
Definition: dynamicTerrainStateComponent.h:139
#define DT_DLL_vrfStateData
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: vrfStateDataDefines.h:26
virtual DtFrameStateInterface * nextFrameState()
Definition: dynamicTerrainStateComponent.h:136
virtual void removeGeometryAndDataEntry(unsigned index)
Definition: dynamicTerrainStateComponent.h:59
DtDynamicTerrainStateComponentNextFrame myNextFrameState
Definition: dynamicTerrainStateComponent.h:164
Contains the DtStateComponent class declaration.
This is a simple base class that will be used to return a pointer to current or next frame state...
Definition: stateComponent.h:291
DtEntityIdentifier myObjectIdentifier
Definition: dynamicTerrainStateComponent.h:39
virtual void aboutToBeDeleted() override
Definition: dynamicTerrainStateComponent.h:155
3) Define the current frame class. This will be used for read access.
Definition: dynamicTerrainStateComponent.h:105
1) Define the interface class that will be used to represent the next and curent frames. The UNDEFINED_ macros are convenience macros that will define methods that throw exceptions (until they are implemented)
Definition: dynamicTerrainStateComponent.h:45

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)