From: Keith F. <ven...@us...> - 2004-06-16 13:14:30
|
Update of /cvsroot/planeshift/planeshift/src/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25511 Modified Files: paladinjr.cpp npcmanager.cpp gem.h gem.cpp Log Message: Made several fixes to the way time deltas are handled in DR updating. The first update cannot update for 100's of seconds, because that large time interval leads to incredibly long update times due to the number of iterations. Also, fixed and clarified function name semantics as to what is expecting a time delta and what is expecting a clock ticks value. Index: paladinjr.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/paladinjr.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** paladinjr.cpp 21 May 2004 16:48:43 -0000 1.5 --- paladinjr.cpp 16 Jun 2004 13:14:21 -0000 1.6 *************** *** 90,94 **** // // Perform the extrapolation here: ! client->GetActor()->pcmove->UpdateDR(2000); // Find the extrapolated position --- 90,94 ---- // // Perform the extrapolation here: ! client->GetActor()->pcmove->UpdateDRDelta(2000); // Find the extrapolated position Index: npcmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/npcmanager.cpp,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** npcmanager.cpp 11 Jun 2004 07:31:11 -0000 1.39 --- npcmanager.cpp 16 Jun 2004 13:14:21 -0000 1.40 *************** *** 317,322 **** return; } ! ! Debug1(LOG_NPC,"Got NPC Command List:\n"); char cmd = list.msg->GetInt8(); --- 317,322 ---- return; } ! // static CmdListCount; ! // printf("Got NPC Command List %d:\n",CmdListCount++); char cmd = list.msg->GetInt8(); *************** *** 330,341 **** uint32_t len; void *data = list.msg->GetData(&len); - - // Debug2(LOG_NPC,"-->Got DR data for entity %d\n",id); - // Make sure we haven't run past the end of the buffer if (list.msg->overrun) { ! Debug2(LOG_NET,"Received incomplete CMD_DRDATA from NPC client %u.\n",me->clientnum); break; } --- 330,338 ---- uint32_t len; void *data = list.msg->GetData(&len); // Make sure we haven't run past the end of the buffer if (list.msg->overrun) { ! Error2("Received incomplete CMD_DRDATA from NPC client %u.\n",me->clientnum); break; } *************** *** 356,362 **** else { // Go ahead and update the server version actor->SetDRData(drmsg); - // Now multicast to other clients actor->UpdateProxList(); --- 353,362 ---- else { + // printf("-->Got DR data for entity %s\n",actor->GetName() ); + // printf(" (%1.2f,%1.2f,%1.2f) vel (%1.2f) angle %1.2f, %s\n", + // drmsg.pos.x, drmsg.pos.y, drmsg.pos.z, drmsg.vel.z, drmsg.yrot, drmsg.on_ground?"On Ground":"Not On Ground"); + // Go ahead and update the server version actor->SetDRData(drmsg); // Now multicast to other clients actor->UpdateProxList(); Index: gem.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/gem.h,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** gem.h 11 Jun 2004 07:31:11 -0000 1.36 --- gem.h 16 Jun 2004 13:14:21 -0000 1.37 *************** *** 102,107 **** }; - #define DEF_UPDATE_DIST 3 - /** * This class generically allows objects to be notified --- 102,105 ---- Index: gem.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/server/gem.cpp,v retrieving revision 1.70 retrieving revision 1.71 diff -C2 -d -r1.70 -r1.71 *** gem.cpp 11 Jun 2004 07:31:11 -0000 1.70 --- gem.cpp 16 Jun 2004 13:14:21 -0000 1.71 *************** *** 606,615 **** continue; ! ProximityList *nearlist = nearobj->GetProxList(); float range = proxlist->RangeTo(nearobj); if (SeesObject(nearobj, range)) { #ifdef PSPROXDEBUG // log.AppendFormat("-%s (client %i) can see %s\n",GetName(),GetClientID(),nearobj->GetName()); --- 606,621 ---- continue; ! // npcs and objects don't watch each other ! if (!GetClientID() && !nearobj->GetClientID()) ! continue; ! ! // ProximityList *nearlist = nearobj->GetProxList(); float range = proxlist->RangeTo(nearobj); + // printf("%s is %1.2fm away from %s",GetName(),range,nearobj->GetName() ); if (SeesObject(nearobj, range)) { + // printf(" and is seen.\n"); #ifdef PSPROXDEBUG // log.AppendFormat("-%s (client %i) can see %s\n",GetName(),GetClientID(),nearobj->GetName()); *************** *** 630,633 **** --- 636,643 ---- } } + else + { + // printf(" and is not seen.\n"); + } if (nearobj->SeesObject(this, range)) *************** *** 686,689 **** --- 696,704 ---- #endif CS_ASSERT(obj != this); + + // csVector3 pos; float yrot; iSector *sector; + // obj->GetPosition(pos,yrot,sector); + // printf("Removing %s at (%1.2f, %1.2f, %1.2f) in sector %s.\n",obj->GetName(),pos.x,pos.y,pos.z,sector->QueryObject()->GetName() ); + psRemoveObject msg( GetClientID(), obj->GetEntity()->GetID() ); psserver->GetMsgHandler()->SendMessage(msg.msg); *************** *** 1037,1041 **** (GetBaseAdvertiseRange() >= range) && ! (object->GetVisibility() || securityLevel>=24); } --- 1052,1056 ---- (GetBaseAdvertiseRange() >= range) && ! (object->GetVisibility() || securityLevel<24); } *************** *** 1343,1347 **** pcmesh->GetMesh()->GetMeshObject()->GetObjectModel()->GetObjectBoundingBox(box,CS_BBOX_ACCURATE); - float width = box.MaxX() - box.MinX(); float height = box.MaxY() - box.MinY(); --- 1358,1361 ---- *************** *** 1355,1359 **** bottom = csVector3(width-.1,height*(2.0/3.0),depth-.1); offset = csVector3(0,0,0); ! pcmove->InitCD(top, bottom,offset, NULL); SetPosition(pos,angle,sector); --- 1369,1379 ---- bottom = csVector3(width-.1,height*(2.0/3.0),depth-.1); offset = csVector3(0,0,0); ! /**************** ! THIS MAY BE NECESSARY FOR PALJR ! BUT IT RESULTS in CD BEING DONE 100% ! OF THE TIME WHICH TAKES 100% of the SERVER CPU ! ANOTHER SOLUTION WILL NEED TO BE FOUND IF PAL JR NEEDS THIS */ ! // pcmove->InitCD(top, bottom,offset, NULL); ! /*******************/ SetPosition(pos,angle,sector); |