Changeset 540
- Timestamp:
- 02/28/10 22:45:14 (5 months ago)
- Location:
- branches/cpp-ode/src
- Files:
-
- 9 modified
-
libmmpong/netgame.cc (modified) (1 diff)
-
libmmpong/netgame.h (modified) (3 diffs)
-
libmmpong/netgame_ode.cc (modified) (1 diff)
-
libmmpong/netgame_ode.h (modified) (2 diffs)
-
libmmpong/netgame_ode_pong.cc (modified) (2 diffs)
-
libmmpong/netgame_ode_pong.h (modified) (1 diff)
-
libmmpong/ode_box.cc (modified) (1 diff)
-
libmmpong/ode_obj.h (modified) (4 diffs)
-
mmpong-gl/client_gl.cc (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/cpp-ode/src/libmmpong/netgame.cc
r526 r540 14 14 ent_reg<ODESphere>(); 15 15 ent_reg<Player>(); 16 world_time=boost::posix_time::microsec_clock::universal_time(); 16 17 }; 17 18 -
branches/cpp-ode/src/libmmpong/netgame.h
r538 r540 5 5 #include <set> 6 6 #include <boost/thread/mutex.hpp> 7 #include <boost/date_time/posix_time/posix_time.hpp> 7 8 #include "netent.h" 8 9 #include "netent_helper.h" … … 45 46 //override in derived Game class implementing the actual 46 47 //gameplay and physics 47 virtual void advance(double step_ms) = 0; 48 //ATTENTION: the method should return exactly after the given time has passed 49 virtual void advance(const boost::posix_time::ptime endtime = boost::posix_time::microsec_clock::universal_time()) = 0; 48 50 49 virtual double get_proposed_step_ms() { return 1.0/50; };51 //virtual double get_proposed_step_ms() { return 1.0/50; }; 50 52 51 53 //override in derived client class … … 116 118 return boost::dynamic_pointer_cast<CLASS>(get_ent(entid)); 117 119 }; 120 121 boost::posix_time::ptime world_time; //time of last advance() 118 122 119 123 //only server creates NetEnts -
branches/cpp-ode/src/libmmpong/netgame_ode.cc
r528 r540 12 12 }; 13 13 14 void NetGameODE::advance(double ms) { 14 #define STEPSIZE 0.001f 15 void NetGameODE::advance(const boost::posix_time::ptime endtime) { 16 lock(); 17 if (endtime < world_time) { 18 LOGWARN("endtime < world_time"); 19 unlock(); 20 return; 21 } 22 23 boost::posix_time::time_duration elapsed = endtime - world_time; 15 24 25 //TODO (if necessary): improve (naive) time stepping by measuring computation times 26 27 double seconds= ((double)elapsed.total_microseconds())/1.e6; 28 unsigned int step_count= seconds/STEPSIZE; 29 LOGDBG("step world "<<seconds<<" seconds with "<<step_count << " iterations"); 30 for (unsigned int i=0; i<step_count; i++) { 31 collide(); 32 step(STEPSIZE); 33 } 34 world_time=endtime; 35 36 unlock(); 16 37 } 17 38 -
branches/cpp-ode/src/libmmpong/netgame_ode.h
r526 r540 22 22 23 23 //(re-)implementation of virtual members 24 virtual void advance( double ms);24 virtual void advance(const boost::posix_time::ptime endtime); 25 25 26 26 virtual NetEnt::pointer cln_ent_new(NetMsg::pointer msg); … … 37 37 38 38 static void collideCallbackCaller /* ;) */ (void *data, dGeomID o1, dGeomID o2) { 39 NetGameODE *pthis = (NetGameODE *)data;39 NetGameODE *pthis = dynamic_cast<NetGameODE *>((NetGameODE *)data); 40 40 //disable RTTI if this is bottleneck 41 if ( typeid(pthis)!=typeid(NetGameODE))41 if (!pthis) 42 42 throw std::runtime_error("Given pointer in callback is not a NetGameODE object"); 43 43 pthis->collideCallback(NULL, o1, o2); -
branches/cpp-ode/src/libmmpong/netgame_ode_pong.cc
r539 r540 24 24 playerpad->geom.setLengths(0.05,0.5,0.05); 25 25 double ang=M_PI*(1.0+2.0*newteamid/srv_teamid_cur); 26 playerpad-> setPosition(cos(ang)*1.05, sin(ang)*1.05, 0.0);26 playerpad->geom.setPosition(cos(ang)*1.05, sin(ang)*1.05, 0.0); 27 27 uint16_t newpadid=playerpad->get_entid(); 28 28 player2pad[newplayerid]=newpadid; … … 274 274 boost::shared_ptr<ODEBox> pad=get_ent<ODEBox>(mypadid); 275 275 double ang=M_PI*(1.0+2.0*myteamid/srv_teamid_cur); 276 pad-> setPosition(cos(ang)*1.05, -1.0 + 2.0 * mypadpos, 0.0);276 pad->geom.setPosition(cos(ang)*1.05, -1.0 + 2.0 * mypadpos, 0.0); 277 277 NetMsg::pointer msg=NetMsg::create(NetMsg::CmdGameCustom); 278 278 msg->pack_begin(); -
branches/cpp-ode/src/libmmpong/netgame_ode_pong.h
r538 r540 55 55 barbot=srv_ent_create<ODEBox>(); 56 56 bartop->geom.setLengths(2.0,0.05,0.05); 57 bartop-> setPosition(0.0, 1.05, 0.0);57 bartop->geom.setPosition(0.0, 1.05, 0.0); 58 58 barbot->geom.setLengths(2.0,0.05,0.05); 59 barbot-> setPosition(0.0, -1.05, 0.0);59 barbot->geom.setPosition(0.0, -1.05, 0.0); 60 60 61 61 boost::shared_ptr<ODESphere> 62 62 ball=srv_ent_create<ODESphere>(); 63 63 ball->geom.setRadius(0.025); 64 ball->setLinearVel(-0.1, 0.0, 0.0); 64 65 }; 65 66 virtual void srv_con_start(NetCon::pointer con); -
branches/cpp-ode/src/libmmpong/ode_box.cc
r532 r540 7 7 { 8 8 geom.create(get_space(), 1.0, 1.0, 1.0); 9 geom.setBody(*this);9 //geom.setBody(*this); 10 10 classname="ODEBox"; 11 11 } -
branches/cpp-ode/src/libmmpong/ode_obj.h
r528 r540 37 37 virtual void update(NetMsg::pointer msg) { 38 38 if (msg->get_state()==NetMsg::StatPacking) { 39 const dReal *vals=ge tPosition();39 const dReal *vals=geom.getPosition(); 40 40 LOGDBG("Position==["<<vals[0]<<","<<vals[1]<<","<<vals[2]<<"]"); 41 41 for(unsigned int i=0; i<3; i++) … … 48 48 49 49 //check ODE alignment in dMatrix3 50 vals=ge tRotation();50 vals=geom.getRotation(); 51 51 LOGDBG("Rotation==["<<vals[0]<<","<<vals[1]<<","<<vals[2]<<";"<<vals[4]<<","<<vals[5]<<","<<vals[6]<<";"<<vals[8]<<","<<vals[9]<<","<<vals[10]<<"]"); 52 52 for(unsigned int i=0; i<3; i++) … … 66 66 msg->unpack_ode(vals[i]); 67 67 LOGDBG("Position==["<<vals[0]<<","<<vals[1]<<","<<vals[2]<<"]"); 68 setPosition(vals);68 geom.setPosition(vals[0], vals[1], vals[2]); 69 69 70 70 for(unsigned int i=0; i<3; i++) … … 80 80 msg->unpack_ode(vals[i]); 81 81 LOGDBG("Rotation==["<<vals[0]<<","<<vals[1]<<","<<vals[2]<<";"<<vals[4]<<","<<vals[5]<<","<<vals[6]<<";"<<vals[8]<<","<<vals[9]<<","<<vals[10]<<"]"); 82 setRotation(vals);82 geom.setRotation(vals); 83 83 84 84 for(unsigned int i=0; i<3; i++) -
branches/cpp-ode/src/mmpong-gl/client_gl.cc
r538 r540 111 111 112 112 renderer.begin(); 113 if (game) 113 if (game) { 114 game->advance(); 114 115 game->render(); 116 } 115 117 renderer.end(); 116 118
