Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef AESOP_OBJECT_SYNC_H__
00036 #define AESOP_OBJECT_SYNC_H__
00037
00038
00039 #include "map-dynamics/map-dynamics.h"
00040 #include "netrq/netrq.h"
00041
00042
00043 namespace aesop {
00044 class MapManager;
00045 };
00046
00047
00048
00049 namespace aesop {
00050
00052
00054
00055
00056
00057
00058
00059
00062
00063
00064 struct state_update_t {
00065
00066 state_update_t(void) throw() { this->clear(); }
00067 void clear(void) throw() {
00068 position.clear();
00069 orientation.clear();
00070 linear.clear();
00071 angular.clear();
00072 }
00073 void dump(IN const char * txt) const throw() {
00074 DPRINTF(" State Update: %s", txt);
00075 position.dump(" position");
00076 orientation.dump(" orientation");
00077 linear.dump(" linear velocity");
00078 angular.dump(" angular velocity");
00079 }
00080
00081
00082 point3d_t position;
00083 quaternion_t orientation;
00084 point3d_t linear;
00085 point3d_t angular;
00086 };
00087
00088
00089
00091 struct object_state_t : public state_update_t {
00092
00093 object_state_t(void) throw() { this->clear(); }
00094 void clear(void) throw() {
00095 state_update_t::clear();
00096 typeId.clear();
00097 physicsObject = NULL;
00098 dyn = 0;
00099 }
00100 void dump(IN const char * txt) const throw() {
00101 DPRINTF("Object state: %s", txt);
00102 state_update_t::dump(txt);
00103 DPRINTF(" type: '%s'", (const char *) typeId);
00104 if (!physicsObject) {
00105 DPRINTF(" <no physics object>");
00106 } else {
00107 physicsObject->dump(txt);
00108 }
00109 }
00110
00111
00112 AESOPIdBuffer typeId;
00113 smart_ptr<MapDynamics> dyn;
00114 smart_ptr<PhysicsObject> physicsObject;
00115 };
00116
00117
00118
00121 class ObjectSync {
00122 public:
00123
00124 virtual ~ObjectSync(void) throw();
00125
00126
00127
00131 virtual void serverUpdate(IN dword_t id,
00132 IN dword_t lastClientClock,
00133 IN const state_update_t& state) = 0;
00134
00138 virtual void clientUpdate(IN dword_t clientClock) = 0;
00139
00144 virtual bool clientMoveRequest(IN dword_t id,
00145 IN const point3d_t& delta,
00146 IN float dt,
00147 OUT point3d_t& newPosition) = 0;
00148
00149 virtual bool getState(IN dword_t id,
00150 OUT object_state_t& state) = 0;
00151
00152 virtual bool setTypeId(IN dword_t id,
00153 IN const char * typeId) = 0;
00154
00155 virtual bool setMapId(IN dword_t id,
00156 IN const char * mapId) = 0;
00157
00158 virtual void addRequests(IN netrq::Queue * queue,
00159 IN dword_t clock) = 0;
00160
00161 virtual void removeObject(IN dword_t id) = 0;
00162
00163
00164 static smart_ptr<ObjectSync> create(IN smart_ptr<MapManager> mapMgr);
00165 };
00166
00167
00168
00169 };
00170
00171 #endif // AESOP_OBJECT_SYNC_H__
00172