From: <Kha...@us...> - 2009-12-01 13:59:13
|
Revision: 4851 http://planeshift.svn.sourceforge.net/planeshift/?rev=4851&view=rev Author: Khakilord Date: 2009-12-01 13:59:05 +0000 (Tue, 01 Dec 2009) Log Message: ----------- Fixed bugs where npcs run inside players and where npcs enter geometry. Modified Paths: -------------- trunk/src/npcclient/npcoperations.cpp Modified: trunk/src/npcclient/npcoperations.cpp =================================================================== --- trunk/src/npcclient/npcoperations.cpp 2009-12-01 10:29:17 UTC (rev 4850) +++ trunk/src/npcclient/npcoperations.cpp 2009-12-01 13:59:05 UTC (rev 4851) @@ -1956,6 +1956,8 @@ { offset = node->GetAttributeValueAsFloat("offset"); } + else + offset = 0.5f; LoadVelocity(node); LoadCheckMoveOk(node); @@ -2189,13 +2191,12 @@ float close = GetVelocity(npc)*timedelta; // Add 10 % to the distance moved in one tick. - if (Calc2DDistance(localDest, myPos) <= close) + if (Calc2DDistance(localDest, myPos) <= 0.5f) { - myPos.x = localDest.x; - myPos.z = localDest.z; npc->GetLinMove()->SetPosition(myPos,myRot,mySector); + npc->Printf(5,"Set position %g %g %g, sector %s\n", myPos.x, myPos.y, myPos.z, mySector->QueryObject()->GetName()); - if (Calc2DDistance(myPos,targetPos) <= close) + if (Calc2DDistance(myPos,targetPos) <= 0.5f) { npc->Printf(5, "We are done.."); npc->ResumeScript(npc->GetBrain()->GetCurrentBehavior() ); @@ -2213,9 +2214,12 @@ { TurnTo(npc, localDest, mySector, forward); } + // Limit time extrapolation so we arrive near the correct place. + if(Calc2DDistance(localDest, myPos) <= close) + timedelta = Calc2DDistance(localDest, myPos) / GetVelocity(npc); - npc->Printf(8, "advance: pos=(%f.2,%f.2,%f.2) rot=%.2f localDest=(%f.2,%f.2,%f.2) dist=%f", - myPos.x,myPos.y,myPos.z, myRot, + npc->Printf(8, "advance: pos=(%f.2,%f.2,%f.2) rot=%.2f %s localDest=(%f.2,%f.2,%f.2) dist=%f", + myPos.x,myPos.y,myPos.z, myRot, mySector->QueryObject()->GetName(), localDest.x,localDest.y,localDest.z, Calc2DDistance(localDest, myPos)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |