Main Page | Class Hierarchy | Class List | Directories | File List | Class Members

DataBlock_Predict_Float.h

00001 /* START_LICENSE_HEADER
00002 
00003 Copyright (C) 2000 Martin Piper, original design and program code
00004 Copyright (C) 2001-2005 Replica Software
00005 
00006 This program file is copyright (C) Replica Software and can only be used under license.
00007 For more information visit: http://www.replicanet.com/
00008 Or email: info@replicanet.com
00009 
00010 END_LICENSE_HEADER */
00011 #ifndef __DATABLOCK_PREDICT_FLOAT_H__
00012 #define __DATABLOCK_PREDICT_FLOAT_H__
00013 #include "RNPlatform/Inc/DLLExportAPI.h"
00014 
00015 #include "RNReplicaNet/Inc/DataBlock.h"
00016 #include <list>
00017 
00018 namespace RNReplicaNet
00019 {
00020 
00028 class REPLICANETDLL_API DataBlock_Predict_Float : public DataBlock
00029 {
00030 public:
00034     DataBlock_Predict_Float();
00035 
00039     virtual ~DataBlock_Predict_Float();
00040 
00041     virtual void Poll(DataBlockReason *reason);
00042 
00043     virtual void ParseMessage(MessageHelper *message);
00044 
00045     virtual void GiveDeltaHint(void *pdata,int dataLen);
00046 
00047     virtual void GiveDeltaHint(const float delta);
00048 
00049     virtual void ContinuityBreak(unsigned char breakTypes);
00050 
00051     bool IsAttached(void *data);
00052 
00058     static DataBlock_Predict_Float *Register(float *data);
00059 
00064     void RegisterInClassPointer(float *data)
00065     {
00066         mData = data;
00067     }
00068 
00073     void SetMinError(float minerror = 0.1f);
00074 
00079     void SetMaxError(float maxerror = 1.0f);
00080 
00085     void SetMinDistance(float distance = 0.1f);
00086 
00091     void SetMaxDistance(float distance = 1.0f);
00092 
00099     void SetInterpolationFilter(float interpolation = 0.1f);
00100 
00104     void SetQuadratic(void)
00105     {
00106         mIsQuadratic = true;
00107     }
00108 
00112     void SetLinear(void)
00113     {
00114         mIsQuadratic = false;
00115     }
00116 
00117 private:
00118     float *mData;
00119     bool mContinuityBreak;
00120     bool mIsDistanceBased;
00121     float mMinDistance;
00122     float mMaxDistance;
00123     float mMinError;
00124     bool mIsQuadratic;
00125     bool mGotData;
00126     bool mImplementTeleport;
00127     bool mDoPrep;
00128     bool mCacheValid;
00129 
00130 
00131 
00132     float mTestData;
00133 
00134     float mMaxError;
00135     float mInterpolationFilter;
00136 
00137 
00138     struct SessionBlock_Predict_Float
00139     {
00140         SessionBlock_Predict_Float(int sessid);
00141 
00142         virtual ~SessionBlock_Predict_Float();
00143 
00144         int mSessionID;
00145         bool mContinuityBreak;
00146         float mTestData;
00147         float mDelta;
00148 
00149         float mSample;
00150         float mSampleTime;
00151 
00152         bool mImplementTeleport;
00153 
00154         // Forced updates
00155         // This works off local time, not network time
00156         float mLastUpdateSentLocalTime;
00157         int mNumForcedUpdates;
00158     };
00159 
00160     std::list<SessionBlock_Predict_Float *> mPerSessionData;
00161 
00162     struct ReplicaData
00163     {
00164         bool mFirstTime;
00165 
00166         float mDelta;
00167         float mSample;
00168         float mSampleTime;
00169     };
00170 
00171     ReplicaData mReplicaData;
00172 
00173     struct MasterData
00174     {
00175         float mDelta;
00176         float mSample;
00177         float mSampleTime;
00178         float mSampleHistory[2];
00179         float mSampleHistoryTime[2];            // This is the network time and is used as values to send off the any replicas
00180         float mSampleHistoryTimeLocal[2];       // This is the local time and is only used to calculate deltas
00181         bool mGotDeltaHint;
00182         float mTheDeltaHint;
00183     };
00184     MasterData mMasterData;
00185 
00186     std::list<SessionBlock_Predict_Float *>::iterator mCacheEntry;
00187 
00188     bool mDoneMasterPoll;
00189 };
00190 
00191 } // namespace RNReplicaNet
00192 
00193 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_VAR macro starts here */
00194 #define _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_VAR(x)   \
00195     {\
00196         RNReplicaNet::DataBlock_Predict_Float *datablock = 0;   \
00197         datablock = RNReplicaNet::DataBlock_Predict_Float::Register(&(basepoint->x));   \
00198         _RO_DO_SETDATABLOCKVARIABLENAME(x);
00199 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_VAR macro ends here */
00200 
00201 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMAXERROR macro starts here */
00202 #define _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMAXERROR(x)   \
00203         datablock->SetMaxError(x);
00204 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMAXERROR macro ends here */
00205 
00206 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMINERROR macro starts here */
00207 #define _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMINERROR(x)   \
00208         datablock->SetMinError(x);
00209 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMINERROR macro ends here */
00210 
00211 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETERROR macro starts here */
00212 #define _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETERROR(x)  \
00213         datablock->SetMinError(x);  \
00214         datablock->SetMaxError(x);
00215 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETERROR macro ends here */
00216 
00217 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMINDISTANCE macro starts here */
00218 #define _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMINDISTANCE(x)    \
00219         datablock->SetMinDistance(x);
00220 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMINDISTANCE macro ends here */
00221 
00222 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMAXDISTANCE macro starts here */
00223 #define _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMAXDISTANCE(x)    \
00224         datablock->SetMaxDistance(x);
00225 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETMAXDISTANCE macro ends here */
00226 
00227 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETINTERPOLATIONFILTER macro starts here */
00228 #define _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETINTERPOLATIONFILTER(x)    \
00229         datablock->SetInterpolationFilter(x);
00230 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETINTERPOLATIONFILTER macro ends here */
00231 
00232 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETLINEAR macro starts here */
00233 #define _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETLINEAR()  \
00234         datablock->SetLinear();
00235 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETLINEAR macro ends here */
00236 
00237 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETQUADRATIC macro starts here */
00238 #define _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETQUADRATIC()   \
00239         datablock->SetQuadratic();
00240 /* _RO_DO_REGISTERBLOCK_PREDICT_FLOAT_SETQUADRATIC macro ends here */
00241 
00242 #endif

Generated on Sun Oct 30 01:11:54 2005 for ReplicaNet by  doxygen 1.4.1