[Orxonox-commit 2794] r7497 - in code/branches/network4: . src/libraries/network/packet src/libraries/network/synchronisable src/modules/weapons
scheusso at orxonox.net
scheusso at orxonox.net
Tue Sep 28 22:10:57 CEST 2010
Author: scheusso
Date: 2010-09-28 22:10:56 +0200 (Tue, 28 Sep 2010)
New Revision: 7497
Modified:
code/branches/network4/
code/branches/network4/src/libraries/network/packet/Gamestate.cc
code/branches/network4/src/libraries/network/packet/Gamestate.h
code/branches/network4/src/libraries/network/synchronisable/Synchronisable.cc
code/branches/network4/src/modules/weapons/MuzzleFlash.cc
Log:
merging network3 into network4 branch
Property changes on: code/branches/network4
___________________________________________________________________
Modified: svn:mergeinfo
- /code/branches/ai:6592-7033
/code/branches/buildsystem:1874-2276,2278-2400
/code/branches/buildsystem2:2506-2658
/code/branches/buildsystem3:2662-2708
/code/branches/ceguilua:1802-1808
/code/branches/chat:6527-6797
/code/branches/chat2:6836-6910
/code/branches/console:5941-6104
/code/branches/consolecommands2:6451-7178
/code/branches/consolecommands3:7178-7283
/code/branches/core3:1572-1739
/code/branches/core4:3221-3224,3227,3234-3238,3242,3244-3250,3252-3254,3256,3259-3261,3264-3265,3268-3275,3277-3278,3280,3284-3285,3287,3289-3294,3305,3309-3310
/code/branches/core5:5768-5928,6009
/code/branches/doc:7290-7400
/code/branches/dynamicmatch:6584-7030
/code/branches/fps:6591-7072
/code/branches/gamestate:6430-6572,6621-6661
/code/branches/gamestates2:6594-6745
/code/branches/gametypes:2826-3031
/code/branches/gcc43:1580
/code/branches/gui:1635-1723,2795-2894
/code/branches/hudelements:6584-6941
/code/branches/ingamemenu:6000-6023
/code/branches/input:1629-1636
/code/branches/ipv6:7293-7458
/code/branches/libraries:5612-5692
/code/branches/libraries2:5703-5737
/code/branches/lod:6586-6911
/code/branches/lodfinal:2372-2411
/code/branches/map:2801-3086,3089
/code/branches/menu:5941-6146,6148
/code/branches/miniprojects:2754-2824
/code/branches/netp2:2835-2988
/code/branches/netp3:2988-3082
/code/branches/netp6:3214-3302
/code/branches/network:2356
/code/branches/network2:6434-6465
/code/branches/network64:2210-2355
/code/branches/notifications:7314-7401
/code/branches/objecthierarchy:1911-2085,2100,2110-2169
/code/branches/objecthierarchy2:2171-2479
/code/branches/overlay:2117-2385
/code/branches/particles:2829-3085
/code/branches/particles2:6050-6106,6109
/code/branches/pch:3113-3194
/code/branches/physics:1912-2055,2107-2439
/code/branches/physics_merge:2436-2457
/code/branches/pickup2:5942-6405
/code/branches/pickup3:6418-6523
/code/branches/pickup4:6594-6710
/code/branches/pickups:1926-2086,2127,2827-2915
/code/branches/pickups2:2107-2497,2915-3071
/code/branches/png2:7262-7263
/code/branches/ppspickups1:6552-6708
/code/branches/ppspickups2:6527-6532,6554-6709
/code/branches/ppspickups3:6757-6997
/code/branches/ppspickups4:7003-7089
/code/branches/presentation:2369-2652,2654-2660
/code/branches/presentation2:6106-6416
/code/branches/presentation3:6913-7162
/code/branches/questsystem:1894-2088
/code/branches/questsystem2:2107-2259
/code/branches/questsystem5:2776-2905
/code/branches/resource:3327-3366
/code/branches/resource2:3372-5694
/code/branches/rocket:6523-6950
/code/branches/rocket2:6953-6970
/code/branches/script_trigger:1295-1953,1955
/code/branches/skybox2:6559-6989
/code/branches/sound:2829-3010
/code/branches/sound3:5941-6102
/code/branches/steering:5949-6091
/code/branches/weapon:1925-2094
/code/branches/weapon2:2107-2488
/code/branches/weapons:2897-3051
/code/branches/weaponsystem:2742-2890
+ /code/branches/ai:6592-7033
/code/branches/buildsystem:1874-2276,2278-2400
/code/branches/buildsystem2:2506-2658
/code/branches/buildsystem3:2662-2708
/code/branches/ceguilua:1802-1808
/code/branches/chat:6527-6797
/code/branches/chat2:6836-6910
/code/branches/console:5941-6104
/code/branches/consolecommands2:6451-7178
/code/branches/consolecommands3:7178-7283
/code/branches/core3:1572-1739
/code/branches/core4:3221-3224,3227,3234-3238,3242,3244-3250,3252-3254,3256,3259-3261,3264-3265,3268-3275,3277-3278,3280,3284-3285,3287,3289-3294,3305,3309-3310
/code/branches/core5:5768-5928,6009
/code/branches/doc:7290-7400
/code/branches/dynamicmatch:6584-7030
/code/branches/fps:6591-7072
/code/branches/gamestate:6430-6572,6621-6661
/code/branches/gamestates2:6594-6745
/code/branches/gametypes:2826-3031
/code/branches/gcc43:1580
/code/branches/gui:1635-1723,2795-2894
/code/branches/hudelements:6584-6941
/code/branches/ingamemenu:6000-6023
/code/branches/input:1629-1636
/code/branches/ipv6:7293-7458
/code/branches/libraries:5612-5692
/code/branches/libraries2:5703-5737
/code/branches/lod:6586-6911
/code/branches/lodfinal:2372-2411
/code/branches/map:2801-3086,3089
/code/branches/menu:5941-6146,6148
/code/branches/miniprojects:2754-2824
/code/branches/netp2:2835-2988
/code/branches/netp3:2988-3082
/code/branches/netp6:3214-3302
/code/branches/network:2356
/code/branches/network2:6434-6465
/code/branches/network3:7196-7344
/code/branches/network64:2210-2355
/code/branches/notifications:7314-7401
/code/branches/objecthierarchy:1911-2085,2100,2110-2169
/code/branches/objecthierarchy2:2171-2479
/code/branches/overlay:2117-2385
/code/branches/particles:2829-3085
/code/branches/particles2:6050-6106,6109
/code/branches/pch:3113-3194
/code/branches/physics:1912-2055,2107-2439
/code/branches/physics_merge:2436-2457
/code/branches/pickup2:5942-6405
/code/branches/pickup3:6418-6523
/code/branches/pickup4:6594-6710
/code/branches/pickups:1926-2086,2127,2827-2915
/code/branches/pickups2:2107-2497,2915-3071
/code/branches/png2:7262-7263
/code/branches/ppspickups1:6552-6708
/code/branches/ppspickups2:6527-6532,6554-6709
/code/branches/ppspickups3:6757-6997
/code/branches/ppspickups4:7003-7089
/code/branches/presentation:2369-2652,2654-2660
/code/branches/presentation2:6106-6416
/code/branches/presentation3:6913-7162
/code/branches/questsystem:1894-2088
/code/branches/questsystem2:2107-2259
/code/branches/questsystem5:2776-2905
/code/branches/resource:3327-3366
/code/branches/resource2:3372-5694
/code/branches/rocket:6523-6950
/code/branches/rocket2:6953-6970
/code/branches/script_trigger:1295-1953,1955
/code/branches/skybox2:6559-6989
/code/branches/sound:2829-3010
/code/branches/sound3:5941-6102
/code/branches/steering:5949-6091
/code/branches/weapon:1925-2094
/code/branches/weapon2:2107-2488
/code/branches/weapons:2897-3051
/code/branches/weaponsystem:2742-2890
Modified: code/branches/network4/src/libraries/network/packet/Gamestate.cc
===================================================================
--- code/branches/network4/src/libraries/network/packet/Gamestate.cc 2010-09-28 20:05:38 UTC (rev 7496)
+++ code/branches/network4/src/libraries/network/packet/Gamestate.cc 2010-09-28 20:10:56 UTC (rev 7497)
@@ -42,7 +42,7 @@
#define GAMESTATE_START(data) (data + GamestateHeader::getSize())
-#define PACKET_FLAG_GAMESTATE PacketFlag::Reliable
+#define PACKET_FLAG_GAMESTATE 0 //PacketFlag::Reliable
inline bool memzero( uint8_t* data, uint32_t datalength)
{
@@ -363,6 +363,112 @@
}
+inline void /*Gamestate::*/diffObject( uint8_t*& newData, uint8_t*& origData, uint8_t*& baseData, SynchronisableHeader& objectHeader, std::vector<uint32_t>::iterator& sizes )
+{
+ // COUT(4) << "dodiff" << endl;
+ // if(baseOffset==0)
+ // {
+ // assert(origOffset==0);
+ // }
+ uint32_t objectOffset = SynchronisableHeader::getSize(); // offset inside the object in the origData and baseData
+ // Check whether the whole object stayed the same
+ if( memcmp( origData+objectOffset, baseData+objectOffset, objectHeader.getDataSize()) == 0 )
+ {
+ // COUT(4) << "skip object" << Synchronisable::getSynchronisable(h.getObjectID())->getIdentifier()->getName() << endl;
+ origData += objectOffset + objectHeader.getDataSize(); // skip the whole object
+ baseData += objectOffset + objectHeader.getDataSize();
+ sizes += Synchronisable::getSynchronisable(objectHeader.getObjectID())->getNrOfVariables();
+ }
+ else
+ {
+ // if( Synchronisable::getSynchronisable(h.getObjectID())->getIdentifier()->getName() == "Bot" )
+ // COUT(0) << "blub" << endl;
+ // COUT(4) << "object diff: " << Synchronisable::getSynchronisable(h.getObjectID())->getIdentifier()->getName() << endl;
+ // COUT(4) << "diff " << h.getObjectID() << ":";
+ // Now start to diff the Object
+ SynchronisableHeaderLight h2(newData);
+ h2 = objectHeader; // copy over the objectheader
+ VariableID variableID = 0;
+ uint32_t newObjectOffset = SynchronisableHeaderLight::getSize();
+ // iterate through all variables
+ while( objectOffset < objectHeader.getDataSize()+SynchronisableHeader::getSize() )
+ {
+ // check whether variable changed and write id and copy over variable to the new stream
+ // otherwise skip variable
+// assert(sizes != this->sizes_.end());
+ uint32_t varSize = *sizes;
+ assert( varSize == Synchronisable::getSynchronisable(objectHeader.getObjectID())->getVarSize(variableID) );
+ if ( varSize != 0 )
+ {
+ if ( memcmp(origData+objectOffset, baseData+objectOffset, varSize) != 0 )
+ {
+ // COUT(4) << "copy variable" << endl;
+ *(VariableID*)(newData+newObjectOffset) = variableID; // copy over the variableID
+ newObjectOffset += sizeof(VariableID);
+ memcpy( newData+newObjectOffset, origData+objectOffset, varSize );
+ newObjectOffset += varSize;
+ objectOffset += varSize;
+ }
+ else
+ {
+ // COUT(4) << "skip variable" << endl;
+ objectOffset += varSize;
+ }
+ }
+// else
+// COUT(4) << "varsize 0" << endl;
+
+ ++variableID;
+ ++sizes;
+ }
+
+ if( Synchronisable::getSynchronisable(objectHeader.getObjectID())->getNrOfVariables() != variableID )
+ sizes += Synchronisable::getSynchronisable(objectHeader.getObjectID())->getNrOfVariables() - variableID;
+ // COUT(4) << endl;
+
+ h2.setDiffed(true);
+ h2.setDataSize(newObjectOffset-SynchronisableHeaderLight::getSize());
+ assert(objectOffset == objectHeader.getDataSize()+SynchronisableHeader::getSize());
+ assert(h2.getDataSize()>0);
+ origData += objectOffset;
+ // baseOffset += temp + h.getDataSize()+SynchronisableHeader::getSize() - baseData;
+ //baseOffset += objectOffset;
+ // SynchronisableHeader htemp(temp);
+ // baseOffset += SynchronisableHeader::getSize() + htemp.getDataSize();
+ // {
+ // SynchronisableHeader htemp2( baseData+(temp-baseData+objectOffset) );
+ // if( baseData+(temp-baseData+objectOffset) < baseData+baseLength )
+ // {
+ // assert(htemp2.getClassID()<500);
+ // assert(htemp2.getDataSize()!=0 && htemp2.getDataSize()<1000);
+ // assert(htemp2.isDiffed()==false);
+ // }
+ // }
+ baseData += objectOffset;
+ newData += newObjectOffset;
+ }
+}
+
+inline void /*Gamestate::*/copyObject( uint8_t*& newData, uint8_t*& origData, uint8_t*& baseData, SynchronisableHeader& objectHeader, std::vector<uint32_t>::iterator& sizes )
+{
+ // COUT(4) << "docopy" << endl;
+ // Just copy over the whole Object
+ memcpy( newData, origData, objectHeader.getDataSize()+SynchronisableHeader::getSize() );
+ newData += objectHeader.getDataSize()+SynchronisableHeader::getSize();
+ origData += objectHeader.getDataSize()+SynchronisableHeader::getSize();
+ SynchronisableHeader baseHeader( baseData );
+ baseData += baseHeader.getDataSize()+SynchronisableHeader::getSize();
+ // COUT(4) << "copy " << h.getObjectID() << endl;
+ // COUT(4) << "copy " << h.getObjectID() << ":";
+ sizes += Synchronisable::getSynchronisable(objectHeader.getObjectID())->getNrOfVariables();
+// for( unsigned int i = 0; i < Synchronisable::getSynchronisable(objectHeader.getObjectID())->getNrOfVariables(); ++i )
+// {
+// // COUT(4) << " " << *sizes;
+// ++sizes;
+// }
+ // COUT(4) << endl;
+}
+
Gamestate* Gamestate::diffVariables(Gamestate *base)
{
assert(this && base); assert(data_ && base->data_);
@@ -374,203 +480,113 @@
uint8_t *baseData = GAMESTATE_START(base->data_);
uint8_t *origData = GAMESTATE_START(this->data_);
- uint32_t origLength = header_->getDataSize();
- uint32_t baseLength = base->header_->getDataSize();
+ uint8_t *origDataEnd = origData + header_->getDataSize();
+ uint8_t *baseDataEnd = baseData + base->header_->getDataSize();
+// uint32_t origLength = header_->getDataSize();
+// uint32_t baseLength = base->header_->getDataSize();
- assert( origLength && baseLength );
+ assert( header_->getDataSize() && base->header_->getDataSize() );
+
+ uint32_t newDataSize = header_->getDataSize() + GamestateHeader::getSize() + sizeof(uint32_t)*this->nrOfVariables_;
+ uint8_t *newData = new uint8_t[newDataSize]; // this is the maximum size needed in the worst case
+ uint8_t *dest = GAMESTATE_START(newData);
- uint8_t *nData = new uint8_t[origLength + GamestateHeader::getSize() + sizeof(uint32_t)*this->nrOfVariables_]; // this is the maximum size needed in the worst case
- uint8_t *dest = GAMESTATE_START(nData);
-
- uint32_t baseOffset = 0; //offset in the diffed stream
- uint32_t origOffset = 0; //offset in the new stream with removed 0's
+// uint32_t baseOffset = 0; //offset in the diffed stream
+// uint32_t origOffset = 0; //offset in the new stream with removed 0's
std::vector<uint32_t>::iterator sizes = this->sizes_.begin();
- while( origOffset < origLength )
+ while( origData < origDataEnd )
{
//iterate through all objects
- SynchronisableHeader h(origData+origOffset);
+ SynchronisableHeader h(origData);
// Find (if possible) the current object in the datastream of the old gamestate
// Start at the current offset position
- if(baseOffset >= baseLength)
- baseOffset = 0;
- uint8_t* temp = baseData + baseOffset;
+ if(baseData >= baseDataEnd)
+ baseData = GAMESTATE_START(base->data_);
+// uint8_t* temp = baseData + baseOffset;
uint32_t objectID = h.getObjectID();
- assert(temp < baseData+baseLength);
- assert(dest < nData + origLength + GamestateHeader::getSize() + sizeof(uint32_t)*this->nrOfVariables_);
+ assert(baseData < baseDataEnd);
+ assert(dest < newData + newDataSize);
assert(sizes != this->sizes_.end());
- while ( temp < baseData+baseLength )
+ bool diffedObject = false;
+ while ( baseData < baseDataEnd )
{
- SynchronisableHeader htemp(temp);
+ SynchronisableHeader htemp(baseData);
assert( htemp.getDataSize()!=0 );
if ( htemp.getObjectID() == objectID )
{
assert( h.getClassID() == htemp.getClassID() );
- goto DODIFF;
+// goto DODIFF;
+ diffObject(dest, origData, baseData, h, sizes);
+ diffedObject = true;
+ break;
}
-// {
-// SynchronisableHeader htemp2(temp+htemp.getDataSize()+SynchronisableHeader::getSize());
-// if( temp+htemp.getDataSize()+SynchronisableHeader::getSize() < baseData+baseLength )
-// {
-// assert(htemp2.getClassID()<500);
-// assert(htemp2.getDataSize()!=0 && htemp2.getDataSize()<1000);
-// assert(htemp2.isDiffed()==false);
-// }
-// }
- temp += htemp.getDataSize()+SynchronisableHeader::getSize();
-
+ {
+ SynchronisableHeader htemp2(baseData+htemp.getDataSize()+SynchronisableHeader::getSize());
+ if( baseData+htemp.getDataSize()+SynchronisableHeader::getSize() < baseDataEnd )
+ {
+ assert(htemp2.getClassID()<500);
+ assert(htemp2.getDataSize()!=0 && htemp2.getDataSize()<1000);
+ assert(htemp2.isDiffed()==false);
+ }
+ }
+ baseData += htemp.getDataSize()+SynchronisableHeader::getSize();
+// assert( baseData+htemp.getDataSize()+SynchronisableHeader::getSize() <=baseData+baseLength );
+// temp += htemp.getDataSize()+SynchronisableHeader::getSize();
+
}
// If not found start looking at the beginning
- assert( temp==baseData+baseLength );
- temp = baseData;
-// {
-// SynchronisableHeader htemp2(temp);
-// if( temp < baseData+baseLength )
-// {
-// assert(htemp2.getClassID()<500);
-// assert(htemp2.getDataSize()!=0 && htemp2.getDataSize()<1000);
-// assert(htemp2.isDiffed()==false);
-// }
-// }
- while ( temp < baseData+baseOffset )
+ assert( diffedObject || baseData == baseDataEnd );
+ baseData = GAMESTATE_START(base->data_);
{
- SynchronisableHeader htemp(temp);
+ SynchronisableHeader htemp2(baseData);
+ if( baseData < baseDataEnd )
+ {
+ assert(htemp2.getClassID()<500);
+ assert(htemp2.getDataSize()!=0 && htemp2.getDataSize()<1000);
+ assert(htemp2.isDiffed()==false);
+ }
+ }
+ while ( !diffedObject && baseData < baseDataEnd )
+ {
+ SynchronisableHeader htemp(baseData);
if ( htemp.getObjectID() == objectID )
{
assert( h.getClassID() == htemp.getClassID() );
- goto DODIFF;
+// goto DODIFF;
+ diffObject(dest, origData, baseData, h, sizes);
+ break;
}
// {
-// SynchronisableHeader htemp2(temp+htemp.getDataSize()+SynchronisableHeader::getSize());
-// if( temp+htemp.getDataSize()+SynchronisableHeader::getSize() < baseData+baseLength )
+// SynchronisableHeader htemp2(baseData+htemp.getDataSize()+SynchronisableHeader::getSize());
+// if( baseData+htemp.getDataSize()+SynchronisableHeader::getSize() < baseDataEnd )
// {
// assert(htemp2.getClassID()<500);
// assert(htemp2.getDataSize()!=0 && htemp2.getDataSize()<1000);
// assert(htemp2.isDiffed()==false);
// }
// }
- temp += htemp.getDataSize()+SynchronisableHeader::getSize();
+ baseData += htemp.getDataSize()+SynchronisableHeader::getSize();
}
// Object is new, thus never transmitted -> just copy over
- goto DOCOPY;
-
-
-DODIFF:
+// goto DOCOPY;
+ if ( baseData >= baseDataEnd )
{
-// COUT(4) << "dodiff" << endl;
-// if(baseOffset==0)
-// {
-// assert(origOffset==0);
-// }
- uint32_t objectOffset = SynchronisableHeader::getSize(); // offset inside the object in the origData and baseData
- // Check whether the whole object stayed the same
- if( memcmp( origData+origOffset+objectOffset, temp+objectOffset, h.getDataSize()) == 0 )
- {
-// COUT(4) << "skip object" << Synchronisable::getSynchronisable(h.getObjectID())->getIdentifier()->getName() << endl;
- origOffset += objectOffset+ h.getDataSize(); // skip the whole object
- baseOffset = temp + h.getDataSize()+SynchronisableHeader::getSize() - baseData;
- sizes += Synchronisable::getSynchronisable(h.getObjectID())->getNrOfVariables();
- }
- else
- {
-// if( Synchronisable::getSynchronisable(h.getObjectID())->getIdentifier()->getName() == "Bot" )
-// COUT(0) << "blub" << endl;
-// COUT(4) << "object diff: " << Synchronisable::getSynchronisable(h.getObjectID())->getIdentifier()->getName() << endl;
-// COUT(4) << "diff " << h.getObjectID() << ":";
- // Now start to diff the Object
- SynchronisableHeaderLight h2(dest);
- h2 = h; // copy over the objectheader
- VariableID variableID = 0;
- uint32_t newObjectOffset = SynchronisableHeaderLight::getSize();
- // iterate through all variables
- while( objectOffset < h.getDataSize()+SynchronisableHeader::getSize() )
- {
- // check whether variable changed and write id and copy over variable to the new stream
- // otherwise skip variable
- assert(sizes != this->sizes_.end());
- uint32_t varSize = *sizes;
- assert( varSize == Synchronisable::getSynchronisable(h.getObjectID())->getVarSize(variableID) );
- if ( varSize != 0 )
- {
- if ( memcmp(origData+origOffset+objectOffset, temp+objectOffset, varSize) != 0 )
- {
-// COUT(4) << "copy variable" << endl;
- *(VariableID*)(dest+newObjectOffset) = variableID; // copy over the variableID
- newObjectOffset += sizeof(VariableID);
- memcpy( dest+newObjectOffset, origData+origOffset+objectOffset, varSize );
- newObjectOffset += varSize;
- objectOffset += varSize;
- }
- else
- {
-// COUT(4) << "skip variable" << endl;
- objectOffset += varSize;
- }
- }
-// else
-// COUT(4) << "varsize 0" << endl;
-
- ++variableID;
- ++sizes;
- }
-
- if( Synchronisable::getSynchronisable(h.getObjectID())->getNrOfVariables() != variableID )
- sizes += Synchronisable::getSynchronisable(h.getObjectID())->getNrOfVariables() - variableID;
-// COUT(4) << endl;
- h2.setDiffed(true);
- h2.setDataSize(newObjectOffset-SynchronisableHeaderLight::getSize());
- assert(objectOffset == h.getDataSize()+SynchronisableHeader::getSize());
- origOffset += objectOffset;
-// baseOffset += temp + h.getDataSize()+SynchronisableHeader::getSize() - baseData;
- //baseOffset += objectOffset;
-// SynchronisableHeader htemp(temp);
-// baseOffset += SynchronisableHeader::getSize() + htemp.getDataSize();
-// {
-// SynchronisableHeader htemp2( baseData+(temp-baseData+objectOffset) );
-// if( baseData+(temp-baseData+objectOffset) < baseData+baseLength )
-// {
-// assert(htemp2.getClassID()<500);
-// assert(htemp2.getDataSize()!=0 && htemp2.getDataSize()<1000);
-// assert(htemp2.isDiffed()==false);
-// }
-// }
- baseOffset = temp-baseData + objectOffset;
- dest += newObjectOffset;
- }
-
- continue;
+ assert(baseData == baseDataEnd);
+ copyObject(dest, origData, baseData, h, sizes);
+ assert(sizes != this->sizes_.end() || origData>=origDataEnd);
}
-
-DOCOPY:
- {
-// COUT(4) << "docopy" << endl;
- // Just copy over the whole Object
- memcpy( dest, origData+origOffset, h.getDataSize()+SynchronisableHeader::getSize() );
- dest += h.getDataSize()+SynchronisableHeader::getSize();
- origOffset += h.getDataSize()+SynchronisableHeader::getSize();
- assert( Synchronisable::getSynchronisable(h.getObjectID()) );
-// COUT(4) << "copy " << h.getObjectID() << endl;
-// COUT(4) << "copy " << h.getObjectID() << ":";
- //sizes += Synchronisable::getSynchronisable(h.getObjectID())->getNrOfVariables();
- for( unsigned int i = 0; i < Synchronisable::getSynchronisable(h.getObjectID())->getNrOfVariables(); ++i )
- {
-// COUT(4) << " " << *sizes;
- ++sizes;
- }
-// COUT(4) << endl;
- assert(sizes != this->sizes_.end() || origOffset>=origLength);
- continue;
- }
}
+ assert(sizes==this->sizes_.end());
- Gamestate *g = new Gamestate(nData, getClientID());
+ Gamestate *g = new Gamestate(newData, getClientID());
assert(g->header_);
*(g->header_) = *header_;
g->header_->setBaseID( base->getID() );
- g->header_->setDataSize(dest - nData - GamestateHeader::getSize());
+ g->header_->setDataSize(dest - newData - GamestateHeader::getSize());
g->flags_=flags_;
g->packetDirection_ = packetDirection_;
assert(!g->isCompressed());
Modified: code/branches/network4/src/libraries/network/packet/Gamestate.h
===================================================================
--- code/branches/network4/src/libraries/network/packet/Gamestate.h 2010-09-28 20:05:38 UTC (rev 7496)
+++ code/branches/network4/src/libraries/network/packet/Gamestate.h 2010-09-28 20:10:56 UTC (rev 7497)
@@ -129,6 +129,8 @@
virtual uint32_t getSize() const;
virtual inline bool process();
uint32_t calcGamestateSize(int32_t id, uint8_t mode=0x0);
+// inline void diffObject( uint8_t*& newData, uint8_t*& origData, uint8_t*& baseData, SynchronisableHeader& objectHeader, std::vector<uint32_t>::iterator& sizes );
+// inline void copyObject( uint8_t*& newData, uint8_t*& origData, uint8_t*& baseData, SynchronisableHeader& objectHeader, std::vector<uint32_t>::iterator& sizes );
std::list<obj> dataVector_;
GamestateHeader* header_;
Modified: code/branches/network4/src/libraries/network/synchronisable/Synchronisable.cc
===================================================================
--- code/branches/network4/src/libraries/network/synchronisable/Synchronisable.cc 2010-09-28 20:05:38 UTC (rev 7496)
+++ code/branches/network4/src/libraries/network/synchronisable/Synchronisable.cc 2010-09-28 20:10:56 UTC (rev 7497)
@@ -122,7 +122,12 @@
Synchronisable *Synchronisable::fabricate(uint8_t*& mem, uint8_t mode)
{
SynchronisableHeader header(mem);
- assert( !header.isDiffed() );
+ if( header.isDiffed() )
+ {
+ mem += header.getDataSize() + header.getSize();
+ return 0;
+ }
+// assert( !header.isDiffed() );
COUT(4) << "fabricating object with id: " << header.getObjectID() << std::endl;
Modified: code/branches/network4/src/modules/weapons/MuzzleFlash.cc
===================================================================
--- code/branches/network4/src/modules/weapons/MuzzleFlash.cc 2010-09-28 20:05:38 UTC (rev 7496)
+++ code/branches/network4/src/modules/weapons/MuzzleFlash.cc 2010-09-28 20:10:56 UTC (rev 7497)
@@ -41,6 +41,7 @@
RegisterObject(MuzzleFlash);
this->setScale(0.1f);
- this->delayTimer_.setTimer(0.1f, false, createExecutor(createFunctor(&MuzzleFlash::destroy, this)));
+ if( GameMode::isMaster() )
+ this->delayTimer_.setTimer(0.1f, false, createExecutor(createFunctor(&MuzzleFlash::destroy, this)));
}
}
More information about the Orxonox-commit
mailing list