Introduction Manual Class Reference Header Reference

zoidcom_replicator_movement.h

Go to the documentation of this file.
00001 /****************************************
00002 * zoidcom_replicator_movement.h
00003 * extrapolating replicator
00004 *
00005 * This file is part of the "Zoidcom Automated Networking System" application library.
00006 * Copyright (C)2002-2007 by Joerg Rueppel. See documentation for copyright and licensing details.
00007 *****************************************/
00008 
00009 
00010 #ifndef _ZOIDREPLICATORMOVEMENT_H_
00011 #define _ZOIDREPLICATORMOVEMENT_H_
00012 
00016 #include "zoidcom.h"
00017 #include "zoidcom_typehelper.h"
00018 
00019 // forward
00020 template <typename T, int SIZE> class ZCom_ReplicateMovementPrivate;
00021 
00027 
00028 
00029 #define ZCOM_REPMOVE_USE_ERROR_FUNC                   (1L << 2)
00030 
00031 
00033 // Replicator parameter class
00035 
00038 template <typename T>
00039 class ZCOM_API ZCom_RSetupMovement : public ZCom_RSetupNumeric
00040 {
00041 public:
00043   ZCOM_TAPI ZCom_RSetupMovement(zU8 _rbits, zU8 _flags, zU8 _rules, zU8 _intercept_id = 0,
00044                                   zS16 _mindelay = -1, zS16 _maxdelay = -1)
00045   : ZCom_RSetupNumeric(_rbits, _flags, _rules, _intercept_id, _mindelay, _maxdelay)
00046   {
00047     m_inputsizebits = 8;
00048     m_extflags = 0;
00049     m_interpolation_time = 100;
00050     m_error.constant = 25;
00051   }
00052 
00053   ZCOM_TAPI ZCom_ReplicatorSetup* Duplicate();
00054 
00062   void setInputsizeBits(zU8 _inputbits) { m_inputsizebits = _inputbits; }
00066   zU8 getInputsizeBits() const { return m_inputsizebits; }
00067 
00069   zU8 getExtendedFlags() const { return m_extflags; }
00070 
00072   void setConstantErrorThreshold(zFloat _threshold) { m_error.constant = _threshold; }
00074   zFloat getConstantErrorThreshold() const { return m_error.constant; }
00075 
00077   zU32 getInterpolationTime() const { return m_interpolation_time; }
00078 
00080   void setInterpolationTime(zU32 _time) { m_interpolation_time = _time; }
00081 
00082 protected:
00083   zU8   m_extflags;
00084   zU8   m_inputsizebits;
00085   zU32  m_interpolation_time;
00086 
00087   // constant error threshold or error function
00088   union {
00089     zFloat constant;
00090   } m_error;
00091 };
00092 
00094 // Movement replicator callbacks
00096 
00100 template <typename T>
00101 class ZCOM_API ZCom_MoveUpdateListener
00102 {
00103 public:
00108   virtual void 
00109     inputUpdated(ZCom_BitStream& _inputstream, bool _inputchanged, zU32 _client_time, zU32 _estimated_time_sent) = 0;
00110 
00115   virtual void 
00116     inputSent(ZCom_BitStream& _inputstream) = 0;
00117 
00126   virtual void 
00127     correctionReceived(T *_pos, zFloat* _vel, zFloat *_acc, bool _teleport, zU32 _estimated_time_sent) = 0;
00128 
00132   virtual void 
00133     updateReceived(ZCom_BitStream& _inputstream, T *_pos, zFloat* _vel, zFloat *_acc, zU32 _estimated_time_sent) = 0;
00134 };
00135 
00136 
00138 // Movement replicator implementation
00140 
00155 template <typename T, int SIZE>
00156 class ZCOM_API ZCom_Replicate_Movement : public ZCom_ReplicatorAdvanced
00157 {
00158   // make T a non-pointer
00159   typedef typename ZCom_TypeHelper<T>::value_type TYPE;
00160 public:
00161   // forward
00162   class UpdateListener;
00163 public:
00165   ZCOM_TAPI ZCom_Replicate_Movement(ZCom_RSetupMovement<TYPE>* _setup);
00167   ZCOM_TAPI ZCom_Replicate_Movement(zU8 _rbits, zU8 _flags, zU8 _rules, zU8 _intercept_id = 0,
00168     zS16 _mindelay = -1, zS16 _maxdelay = -1);
00169   ZCOM_TAPI ~ZCom_Replicate_Movement();
00170 
00185   ZCOM_TAPI void setTimeScale(zFloat _scale);
00186 
00196   ZCOM_TAPI void setUpdateListener(ZCom_MoveUpdateListener<TYPE> *_listener);
00197 
00224   ZCOM_TAPI void updateInput(T *_pos, ZCom_BitStream *_inputstream);
00225 
00239   ZCOM_TAPI ZCom_BitStream* getNextInputHistoryEntry(zU32* _deltatime, void** _iter);
00240 
00260   ZCOM_TAPI void updateState(TYPE *_newpos, zFloat *_newvel, zFloat *_newaccel, bool _teleport);
00261 
00283   ZCOM_TAPI void overrideState(TYPE *_newpos, zFloat *_newvel, zFloat *_newaccel, zS32 _time = 0);
00284 
00300   ZCOM_TAPI void getExtrapolatedPosition(zS32 _attime, TYPE *_data);
00301 
00307   ZCOM_TAPI void getExtrapolatedVelocity(zS32 _attime, zFloat *_data);
00308 
00315   ZCOM_TAPI void getAcceleration(zFloat *_data);
00316 
00321   ZCOM_TAPI void getLastReceivedPosition(T *_data);
00322 
00327   ZCOM_TAPI void getLastReceivedVelocity(zFloat *_data);
00328 
00343   ZCOM_TAPI void getSplinePoint(zFloat t, TYPE *_data);
00344 
00350   ZCOM_TAPI void getSplineControlPoint(zU32 _idx, TYPE *_data);
00351 
00354 protected:
00355   ZCOM_TAPI virtual void onPreSendData(ZCom_ConnID _cid, eZCom_NodeRole _remoterole, zU32 *_lastupdate);
00356   ZCOM_TAPI virtual void onDataReceived(ZCom_ConnID _cid, eZCom_NodeRole _remoterole, ZCom_BitStream &_stream,
00357                                        bool _store, zU32 _estimated_time_sent);
00358   ZCOM_TAPI virtual void onDataLost(ZCom_ConnID _cid, zU32 _reference_id, ZCom_BitStream *_data);
00359   ZCOM_TAPI virtual void onDataAcked(ZCom_ConnID _cid, zU32 _reference_id, ZCom_BitStream *_data);
00360   ZCOM_TAPI virtual void onPacketReceived(ZCom_ConnID _cid);
00361   ZCOM_TAPI virtual void onConnectionAdded(ZCom_ConnID _cid, eZCom_NodeRole _remoterole);
00362   ZCOM_TAPI virtual void onConnectionRemoved(ZCom_ConnID _cid, eZCom_NodeRole _remoterole);
00363   ZCOM_TAPI virtual void onLocalRoleChanged(eZCom_NodeRole _oldrole, eZCom_NodeRole _newrole);
00364   ZCOM_TAPI virtual void onRemoteRoleChanged(ZCom_ConnID _cid, eZCom_NodeRole _oldrole, eZCom_NodeRole _newrole) {};
00365 
00366   ZCOM_TAPI virtual void  Process(eZCom_NodeRole _localrole, zU32 _simulation_time_passed);
00367   ZCOM_TAPI virtual void* peekData();
00368   ZCOM_TAPI virtual void  clearPeekData() {};
00369 protected:
00370   ZCom_ReplicateMovementPrivate<T, SIZE> *m_priv;
00371 };
00372 
00373 #endif

This file is part of the documentation for Zoidcom. Documentation copyright © 2004-2008 by Jörg Rüppel. Generated on Sat Aug 16 15:26:49 2008 for Zoidcom by doxygen 1.4.6-NO