From: <phi...@us...> - 2007-05-26 11:15:52
|
Revision: 7269 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7269&view=rev Author: philippeqc Date: 2007-05-26 04:15:52 -0700 (Sat, 26 May 2007) Log Message: ----------- Fixed zones that went crazy on update Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/zone/zShape.cpp armagetronad/trunk/armagetronad/src/tron/zone/zShape.hpp armagetronad/trunk/armagetronad/src/tron/zone/zZone.cpp Modified: armagetronad/trunk/armagetronad/src/tron/zone/zShape.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zShape.cpp 2007-05-26 07:38:55 UTC (rev 7268) +++ armagetronad/trunk/armagetronad/src/tron/zone/zShape.cpp 2007-05-26 11:15:52 UTC (rev 7269) @@ -16,6 +16,7 @@ rotationExpr(), #endif createdtime_(0.0), + referencetime_(0.0), lasttime_(0.0), idZone_(idZone) {} @@ -27,8 +28,10 @@ REAL time; m >> time; - setCreatedtime(time); + setCreatedTime(time); + m >> time; + setReferenceTime(time); #ifdef DADA tString str; m >> str; @@ -74,7 +77,7 @@ } -void zShape::setCreatedtime(REAL time) +void zShape::setCreatedTime(REAL time) { createdtime_ = time; @@ -83,11 +86,16 @@ lasttime_ < createdtime_; } +void zShape::setReferenceTime(REAL time) +{ + referencetime_ = time; + // Do not update lasttime_, referencetime_ might be set in the future for ease of equation writing. +} void zShape::networkWrite(nMessage &m) { - m << createdtime_; + m << referencetime_; #ifdef DADA m << posxExpr; m << posyExpr; @@ -116,6 +124,8 @@ eNetGameObject::WriteCreate(m); m << tString("none"); + m << createdtime_; + networkWrite(m); } @@ -191,6 +201,8 @@ eNetGameObject::WriteCreate(m); m << tString("circle"); + m << createdtime_; + networkWrite(m); } @@ -205,7 +217,7 @@ #ifdef DADA REAL r = scale_->GetFloat(); #else - REAL r = scale_.Evaluate(lasttime_ - createdtime_); + REAL r = scale_.Evaluate(lasttime_ - referencetime_); #endif // Is the player inside or outside the zone if ( ( prey->Position() - Position() ).NormSquared() < r*r ) @@ -234,7 +246,7 @@ #ifdef DADA eCoord rot(cos(rotation_->GetFloat()) , sin(rotation_->GetFloat())); #else - eCoord rot(cos(rotation_.Evaluate(lasttime_ - createdtime_) ), sin(rotation_.Evaluate(lasttime_ - createdtime_))); + eCoord rot(cos(rotation_.Evaluate(lasttime_ - referencetime_) ), sin(rotation_.Evaluate(lasttime_ - referencetime_))); #endif GLfloat m[4][4]={{rot.x,rot.y,0,0}, @@ -243,7 +255,7 @@ #ifdef DADA {posx_->GetFloat(),posy_->GetFloat(),0,1}}; #else - {posx_.Evaluate(lasttime_ - createdtime_), posy_.Evaluate(lasttime_ - createdtime_), 0,1}}; + {posx_.Evaluate(lasttime_ - referencetime_), posy_.Evaluate(lasttime_ - referencetime_), 0,1}}; #endif ModelMatrix(); @@ -271,14 +283,14 @@ const REAL seglen = .2f; const REAL bot = 0.0f; - const REAL top = 5.0f; // + ( lastTime - createTime_ ) * .1f; + const REAL top = 5.0f; // + ( lastTime - referenceTime_ ) * .1f; color_.Apply(); #ifdef DADA REAL r = scale_->GetFloat(); #else - REAL r = scale_.Evaluate(lasttime_ - createdtime_); + REAL r = scale_.Evaluate(lasttime_ - referencetime_); #endif for ( int i = sg_segments - 1; i>=0; --i ) { @@ -361,6 +373,8 @@ eNetGameObject::WriteCreate(m); m << tString("polygon"); + m << createdtime_; + networkWrite(m); int numPoints; @@ -409,11 +423,11 @@ tCoord rotation = tCoord( cosf(rotation_->GetFloat()), sinf(rotation_->GetFloat()) ); tCoord previous = tCoord(x_, y_).Turn( rotation )*scale_->GetFloat() + centerPos; #else - REAL x_ = (*iter).first.Evaluate(lasttime_ - createdtime_); - REAL y_ = (*iter).second.Evaluate(lasttime_ - createdtime_); - tCoord centerPos = tCoord(posx_.Evaluate(lasttime_ - createdtime_), posy_.Evaluate(lasttime_ - createdtime_)); - tCoord rotation = tCoord( cosf(rotation_.Evaluate(lasttime_ - createdtime_)), sinf(rotation_.Evaluate(lasttime_ - createdtime_)) ); - tCoord previous = tCoord(x_, y_).Turn( rotation )*scale_.Evaluate(lasttime_ - createdtime_) + centerPos; + REAL x_ = (*iter).first.Evaluate(lasttime_ - referencetime_); + REAL y_ = (*iter).second.Evaluate(lasttime_ - referencetime_); + tCoord centerPos = tCoord(posx_.Evaluate(lasttime_ - referencetime_), posy_.Evaluate(lasttime_ - referencetime_)); + tCoord rotation = tCoord( cosf(rotation_.Evaluate(lasttime_ - referencetime_)), sinf(rotation_.Evaluate(lasttime_ - referencetime_)) ); + tCoord previous = tCoord(x_, y_).Turn( rotation )*scale_.Evaluate(lasttime_ - referencetime_) + centerPos; #endif REAL xpp = previous.x; REAL ypp = previous.y; @@ -427,9 +441,9 @@ y_ = (*iter).second->GetFloat(); tCoord current = tCoord(x_, y_).Turn( rotation )*scale_->GetFloat() + centerPos; #else - x_ = (*iter).first.Evaluate(lasttime_ - createdtime_); - y_ = (*iter).second.Evaluate(lasttime_ - createdtime_); - tCoord current = tCoord(x_, y_).Turn( rotation )*scale_.Evaluate(lasttime_ - createdtime_) + centerPos; + x_ = (*iter).first.Evaluate(lasttime_ - referencetime_); + y_ = (*iter).second.Evaluate(lasttime_ - referencetime_); + tCoord current = tCoord(x_, y_).Turn( rotation )*scale_.Evaluate(lasttime_ - referencetime_) + centerPos; #endif REAL xp = current.x; REAL yp = current.y; @@ -498,9 +512,9 @@ REAL r = scale_->GetFloat(); #else - glTranslatef(posx_.Evaluate(lasttime_ - createdtime_), posy_.Evaluate(lasttime_ - createdtime_), 0); + glTranslatef(posx_.Evaluate(lasttime_ - referencetime_), posy_.Evaluate(lasttime_ - referencetime_), 0); - REAL r = scale_.Evaluate(lasttime_ - createdtime_); + REAL r = scale_.Evaluate(lasttime_ - referencetime_); #endif glScalef(r, r, 1.0); @@ -508,7 +522,7 @@ #ifdef DADA glRotatef(rotation_->GetFloat()*180/M_PI, 0.0, 0.0, 1.0); #else - glRotatef(rotation_.Evaluate(lasttime_ - createdtime_)*180/M_PI, 0.0, 0.0, 1.0); + glRotatef(rotation_.Evaluate(lasttime_ - referencetime_)*180/M_PI, 0.0, 0.0, 1.0); #endif if ( sr_alphaBlend ) @@ -538,10 +552,10 @@ REAL xpp = (*prevIter).first->GetFloat() ; REAL ypp = (*prevIter).second->GetFloat() ; #else - REAL xp = (*iter).first.Evaluate( lasttime_ - createdtime_ ) ; - REAL yp = (*iter).second.Evaluate( lasttime_ - createdtime_ ) ; - REAL xpp = (*prevIter).first.Evaluate( lasttime_ - createdtime_ ) ; - REAL ypp = (*prevIter).second.Evaluate( lasttime_ - createdtime_ ) ; + REAL xp = (*iter).first.Evaluate( lasttime_ - referencetime_ ) ; + REAL yp = (*iter).second.Evaluate( lasttime_ - referencetime_ ) ; + REAL xpp = (*prevIter).first.Evaluate( lasttime_ - referencetime_ ) ; + REAL ypp = (*prevIter).second.Evaluate( lasttime_ - referencetime_ ) ; #endif glVertex3f(xp, yp, bot); Modified: armagetronad/trunk/armagetronad/src/tron/zone/zShape.hpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zShape.hpp 2007-05-26 07:38:55 UTC (rev 7268) +++ armagetronad/trunk/armagetronad/src/tron/zone/zShape.hpp 2007-05-26 11:15:52 UTC (rev 7269) @@ -46,6 +46,7 @@ void TimeStep( REAL time ) { lasttime_ = time; }; virtual bool isEmulatingOldZone() {return false;}; + void setReferenceTime(REAL time); protected: #ifdef DADA @@ -70,15 +71,16 @@ #ifdef DADA eCoord Position() { return eCoord(posx_->GetFloat(), posy_->GetFloat()); }; #else - eCoord Position() { return eCoord(posx_(lasttime_ - createdtime_), posy_(lasttime_ - createdtime_) ); }; + eCoord Position() { return eCoord(posx_(lasttime_ - referencetime_), posy_(lasttime_ - referencetime_) ); }; #endif static void networkRead(nMessage &m, zShape *aShape); void networkWrite(nMessage &m); - void setCreatedtime(REAL time); + void setCreatedTime(REAL time); REAL createdtime_; // The in-game time when this shape was first instantiated + REAL referencetime_; // The in-game time when this shape's data was updated, used for evaluation REAL lasttime_; // What is to be considered as the current time for this shape unsigned short idZone_; Modified: armagetronad/trunk/armagetronad/src/tron/zone/zZone.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/zone/zZone.cpp 2007-05-26 07:38:55 UTC (rev 7268) +++ armagetronad/trunk/armagetronad/src/tron/zone/zZone.cpp 2007-05-26 11:15:52 UTC (rev 7269) @@ -355,6 +355,7 @@ if (!m.End()) { m >> referenceTime_; + shape->setReferenceTime(referenceTime_); if (!m.End()) { tFunction aFunc; @@ -370,6 +371,7 @@ { // Uses values from the eNetGameObject referenceTime_ = createTime_; + shape->setReferenceTime(referenceTime_); tFunction aFunc; aFunc.SetOffset( pos.x ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |