- Timestamp:
- Feb 1, 2006, 4:40:34 PM (19 years ago)
- Location:
- trunk/src
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/coord/p_node.cc
r6873 r6959 1253 1253 SYNCHELP_WRITE_BEGIN(); 1254 1254 1255 if ( this->getHostID()!= this->getOwner() )1255 if ( this->getHostID()!=0 && this->getHostID()!=this->getOwner() ) 1256 1256 { 1257 1257 return SYNCHELP_WRITE_N; … … 1259 1259 1260 1260 byte flags = 0; 1261 if ( fabs( coorx - relCoordinate.x ) > __OFFSET_POS ||1262 fabs( coory - relCoordinate.y ) > __OFFSET_POS ||1263 fabs( coorz - relCoordinate.z ) > __OFFSET_POS )1261 if ( fabs( coorx - relCoordinate.x ) > __OFFSET_POS*0.05*this->velocity.len() || 1262 fabs( coory - relCoordinate.y ) > __OFFSET_POS*0.05*this->velocity.len() || 1263 fabs( coorz - relCoordinate.z ) > __OFFSET_POS*0.05*this->velocity.len() ) 1264 1264 flags |= __FLAG_COOR; 1265 1265 … … 1272 1272 1273 1273 SYNCHELP_WRITE_BYTE( flags, NWT_PN_FLAGS ); 1274 //PRINTF(0)("FLAGS = %d\n", flags);1274 PRINTF(0)("FLAGS = %d\n", flags); 1275 1275 1276 1276 if ( flags & __FLAG_COOR ) 1277 1277 { 1278 1278 1279 //PRINTF(0)("SEND COOR: %f %f %f\n", this->relCoordinate.x, this->relCoordinate.y, this->relCoordinate.z);1279 PRINTF(0)("SEND COOR: %f %f %f\n", this->relCoordinate.x, this->relCoordinate.y, this->relCoordinate.z); 1280 1280 1281 1281 SYNCHELP_WRITE_FLOAT( this->relCoordinate.x, NWT_PN_SCOORX ); … … 1291 1291 { 1292 1292 1293 //PRINTF(0)("SEND QUAT: %f %f %f %f\n", this->absDirection.w, this->absDirection.v.x, this->absDirection.v.y, this->absDirection.v.z);1293 PRINTF(0)("SEND QUAT: %f %f %f %f\n", this->absDirection.w, this->absDirection.v.x, this->absDirection.v.y, this->absDirection.v.z); 1294 1294 1295 1295 SYNCHELP_WRITE_FLOAT( this->absDirection.w, NWT_PN_SROTV ); … … 1309 1309 bool PNode::needsReadSync( ) 1310 1310 { 1311 if ( fabs( coorx - relCoordinate.x ) > __OFFSET_POS ||1312 fabs( coory - relCoordinate.y ) > __OFFSET_POS ||1313 fabs( coorz - relCoordinate.z ) > __OFFSET_POS )1311 if ( fabs( coorx - relCoordinate.x ) > __OFFSET_POS*0.05*this->velocity.len() || 1312 fabs( coory - relCoordinate.y ) > __OFFSET_POS*0.05*this->velocity.len() || 1313 fabs( coorz - relCoordinate.z ) > __OFFSET_POS*0.05*this->velocity.len() ) 1314 1314 return true; 1315 1315 -
trunk/src/lib/network/converter.cc
r6753 r6959 90 90 * @return: The number of written bytes 91 91 */ 92 int Converter:: intToByteArray(int x, byte* a, int length)92 int Converter::_intToByteArray(int x, byte* a, int length) 93 93 { 94 94 if (length < INTSIZE) … … 127 127 * @return: The number of read bytes 128 128 */ 129 int Converter:: byteArrayToInt(const byte* a, int* x)129 int Converter::_byteArrayToInt(const byte* a, int* x) 130 130 { 131 131 int mult = 1; … … 146 146 *x += a[INTSIZE - 1] * mult; 147 147 148 return INTSIZE; 149 } 150 151 int Converter::byteArrayToInt(const byte* a, int* x) 152 { 153 memcpy( x, a, INTSIZE ); 154 return INTSIZE; 155 } 156 157 int Converter::intToByteArray(int x, byte* a, int length) 158 { 159 if ( length< INTSIZE ) 160 { 161 PRINTF(1)("Byte Array to small\n"); 162 return 0; 163 } 164 memcpy(a, &x, INTSIZE); 148 165 return INTSIZE; 149 166 } -
trunk/src/lib/network/converter.h
r6753 r6959 30 30 static int intToByteArray(int x, byte* a, int length); 31 31 static int byteArrayToInt(const byte* a, int* x); 32 33 static int _intToByteArray(int x, byte* a, int length); 34 static int _byteArrayToInt(const byte* a, int* x); 32 35 33 36 static int stringToByteArray(const char* s, byte* a, int length, int maxLength); -
trunk/src/lib/network/network_game_manager.cc
r6868 r6959 29 29 #include "world_entity.h" 30 30 #include "playable.h" 31 #include "space_ships/space_ship.h" 31 32 #include "player.h" 32 #include " network_manager.h"33 #include "shared_network_data.h" 33 34 34 35 #include "class_list.h" … … 541 542 if ( b->isA(CL_WORLD_ENTITY) && !b->isA(CL_PLAYABLE) ) 542 543 { 543 if ( NetworkManager::getInstance()->getHostID()!=0 )544 if ( SharedNetworkData::getInstance()->getHostID()!=0 ) 544 545 { 545 546 static Vector pos = Vector(1000.0, 1000.0, 1000.0); … … 550 551 } 551 552 } 553 ///HACK this is only for network multiplayer games. 554 if( b->isA(CL_SPACE_SHIP)) 555 { 556 SpaceShip* ss = dynamic_cast<SpaceShip*>(b); 557 if( owner%2 == 0) 558 { 559 560 ss->loadModel("models/ships/reap_#.obj"); 561 ss->toList(OM_GROUP_00); 562 } 563 else 564 { 565 ss->loadModel( "models/ships/fighter.obj" ); 566 ss->toList(OM_GROUP_01); 567 } 568 } 552 569 553 570 return b; … … 576 593 { 577 594 assert((*it)->isA(CL_WORLD_ENTITY)); 595 dynamic_cast<WorldEntity*>(*it)->leaveWorld(); 578 596 dynamic_cast<WorldEntity*>(*it)->toList(OM_DEAD); 579 597 break; … … 895 913 i += Converter::byteArrayToInt( &data[i], &uniqueID ); 896 914 915 PRINTF(0)("handleRequestSync %d %d\n", uniqueID, sender); 897 916 doRequestSync( uniqueID, sender ); 898 917 … … 980 999 void NetworkGameManager::executeRequestSync( int uniqueID, int user ) 981 1000 { 1001 PRINTF(0)("executeRequestSync %d %d\n", uniqueID, user); 982 1002 if ( user >= outBuffer.size() ) 983 1003 resizeBufferVector( user ); -
trunk/src/lib/network/network_socket.cc
r6695 r6959 172 172 173 173 if (!tcpSocket || data==NULL || nbytes<=0) 174 return 0; 174 { 175 assert(_OUTGOING_BUFFER_SIZE - outgoingBufferLength > 0); 176 return 0; 177 } 175 178 176 179 SDL_mutexP(outgoingBufferMutex); … … 324 327 325 328 329 #ifdef DONTEXITTHREADS 330 while ( true ) 331 { 332 SDL_Delay(1000); 333 } 334 #endif 335 326 336 PRINTF(0)("QUIT READ THREAD\n"); 337 327 338 return 0; 328 339 } … … 392 403 } 393 404 405 #ifdef DONTEXITTHREADS 406 while ( true ) 407 { 408 SDL_Delay(1000); 409 } 410 #endif 394 411 395 412 PRINTF(0)("QUIT WRITE THREAD\n"); 413 396 414 return 0; 415 397 416 } 398 417 … … 426 445 { 427 446 PRINTF(1)("Buffersize is too small (%d) for packet (%d)\n", maxLength, blen); 447 assert(false); 428 448 return 0; 429 449 } -
trunk/src/lib/network/network_socket.h
r6695 r6959 8 8 #define _NETWORK_SOCKET 9 9 10 //HACK else gdb will not work on server 11 #define DONTEXITTHREADS 12 10 13 //if you want to use outgoing buffer define _USE_OUTGOING_BUFFER 11 14 #define _USE_OUTGOING_BUFFER 12 15 13 #define _INCOMING_BUFFER_SIZE 1024016 #define _INCOMING_BUFFER_SIZE 2024000 14 17 #define _OUTGOING_BUFFER_SIZE 2024000 15 18 #define _LOCAL_BUFFER_SIZE 1024 -
trunk/src/lib/network/network_stream.cc
r6868 r6959 26 26 #include "connection_monitor.h" 27 27 #include "synchronizeable.h" 28 #include "network_manager.h"29 28 #include "network_game_manager.h" 29 #include "shared_network_data.h" 30 30 31 31 #include "debug.h" … … 195 195 { 196 196 SharedNetworkData::getInstance()->setHostID( handshakes[i]->getHostId() ); 197 myHostId = NetworkManager::getInstance()->getHostID();197 myHostId = SharedNetworkData::getInstance()->getHostID(); 198 198 199 199 this->networkGameManager = NetworkGameManager::getInstance(); … … 231 231 int reciever; 232 232 Header header; 233 int counter; 234 233 235 for (SynchronizeableList::iterator it = synchronizeables.begin(); it!=synchronizeables.end(); it++) 234 236 { 237 counter = 0; 238 235 239 if ( (*it)!=NULL && (*it)->beSynchronized() /*&& (*it)->getOwner() == myHostId*/ ) 236 240 { 237 241 do { 242 counter++; 243 244 //check for endless loop 245 if ( counter > 50 ) 246 { 247 PRINTF(1)("there seems to be an error in readBytes of %s\n", (*it)->getClassName()); 248 assert(false); 249 } 250 238 251 reciever = 0; 239 252 dataLength = (*it)->readBytes(downBuffer, DATA_STREAM_BUFFER_SIZE, &reciever); 240 241 253 242 254 if ( dataLength<=0 ){ … … 267 279 for ( int i = 0; i<networkSockets.size(); i++) 268 280 { 269 if ( i!= -reciever&& networkSockets[i] != NULL )281 if ( i!=abs(reciever) && networkSockets[i] != NULL ) 270 282 { 271 PRINTF( 5)("write %d bytes to socket %d\n", dataLength, i);283 PRINTF(0)("write %d bytes to socket %d uniqueid %d reciever %d\n", dataLength, i, (*it)->getUniqueID(), reciever); 272 284 networkSockets[i]->writePacket(downBuffer, dataLength); 273 285 } -
trunk/src/lib/network/synchronizeable.h
r6868 r6959 34 34 NWT_SS_VELZ, 35 35 NWT_SS_PL_SYNC, 36 36 NWT_SS_CO_N, 37 NWT_SS_CO_CLID, 38 37 39 NWT_HS_HOST_ID, 38 40 NWT_HS_NGM_ID, 39 41 42 NWT_PL_B, 40 43 NWT_PL_FLAGS, 41 44 NWT_PL_SCORE, 45 42 46 NWT_PN_BO_WRITESTATE, 43 47 NWT_PN_PARENTMODE, … … 49 53 NWT_PN_ROTZ, 50 54 NWT_PN_ROTV, 51 55 52 56 NWT_PN_FLAGS, 53 57 NWT_PN_SCOORX, … … 58 62 NWT_PN_SROTZ, 59 63 NWT_PN_SROTV, 60 64 61 65 NWT_BO_NAME, 62 66 63 67 NWT_WE_PN_WRITESTATE, 64 68 NWT_WE_PN_MODELFILENAME, 65 69 NWT_WE_PN_SCALING, 66 70 67 71 NWT_GT_WE_STATE, 68 72 69 73 NWT_SB_WE_STATE, 70 74 NWT_SB_SIZE, 71 75 NWT_SB_TEXTURENAME, 72 76 73 77 NWT_TER_WE_STATE, 74 78 75 79 NWT_PU_WE_STATE, 76 80 77 81 NWT_TPU_WE_STATE, 78 82 79 83 NWT_LPU_WE_STATE, 80 84 81 85 NWT_WPU_WE_STATE, 82 86 83 87 NWT_PPU_WE_STATE, 84 88 NWT_PPU_TYPE, … … 133 137 * delete[] textureName; 134 138 * textureName = NULL; 135 * SYNCHELP_READ_STRINGM( texturename ); //this will call new char[strlen()+1] 139 * SYNCHELP_READ_STRINGM( texturename ); //this will call new char[strlen()+1] 136 140 * 137 141 * Example 2: … … 142 146 * 143 147 */ 144 148 145 149 #define SYNCHELP_WRITE_DEBUG(n) {\ 146 150 __synchelp_write_n = Converter::intToByteArray( n, data+__synchelp_write_i, maxLength-__synchelp_write_i ); \ -
trunk/src/world_entities/planet.h
r6634 r6959 22 22 virtual ~Planet(); 23 23 24 v oid loadParams(const TiXmlElement* root);24 virtual void loadParams(const TiXmlElement* root); 25 25 26 26 void setSize(float size); -
trunk/src/world_entities/playable.cc
r6871 r6959 28 28 29 29 30 #include "dot_emitter.h" 31 #include "sprite_particles.h" 32 33 30 34 Playable::Playable() 31 35 { … … 43 47 44 48 this->setSynchronized(true); 49 50 this->score = 0; 51 this->oldScore = 0; 52 53 54 this->emitter = new DotEmitter(100, 5, M_2_PI); 55 this->emitter->setParent(this); 56 this->emitter->setSpread(M_PI, M_PI); 57 this->emitter->setEmissionRate(300.0); 58 this->emitter->setEmissionVelocity(50.0); 59 60 this->explosionParticles = new SpriteParticles(1000); 61 this->explosionParticles->setName("LaserExplosionParticles"); 62 this->explosionParticles->setLifeSpan(.5, .3); 63 this->explosionParticles->setRadius(0.0, 10.0); 64 this->explosionParticles->setRadius(.5, 6.0); 65 this->explosionParticles->setRadius(1.0, 3.0); 66 this->explosionParticles->setColor(0.0, 1,1,0,.9); 67 this->explosionParticles->setColor(0.5, .8,.8,0,.5); 68 this->explosionParticles->setColor(1.0, .8,.8,.7,.0); 45 69 } 46 70 … … 101 125 void Playable::collidesWith(WorldEntity* entity, const Vector& location) 102 126 { 103 if (entity->isA(CL_PROJECTILE) )127 if (entity->isA(CL_PROJECTILE) && !State::isOnline() ) 104 128 this->decreaseHealth(entity->getHealth()); 105 129 106 130 // EXTREME HACK 107 131 if (this->getHealth() == 0.0f) 108 this->deactivateNode(); 132 { 133 //this->deactivateNode(); 134 this->emitter->setSystem(explosionParticles); 135 this->setAbsCoor(0, 0, 0); 136 //this->setAbsDir(Vector(1,0,0), 0); 137 this->emitter->setSystem(NULL); 138 } 109 139 } 110 140 … … 248 278 } 249 279 280 #define DATA_FLAGS 1 281 #define DATA_SCORE 2 282 250 283 #define FLAGS_bFire 1 251 284 … … 281 314 bool Playable::needsReadSync( ) 282 315 { 316 //if ( score != oldScore ) 317 // return true; 318 283 319 byte flags = 0; 284 320 -
trunk/src/world_entities/playable.h
r6871 r6959 15 15 16 16 class Weapon; 17 17 class DotEmitter; 18 18 class Player; 19 class SpriteParticles; 19 20 20 21 //! Basic controllable WorldEntity … … 58 59 int readSync(byte* data, int maxLength ); 59 60 bool needsReadSync(); 61 62 inline void setScore( int score ) { this->score = score; } 63 inline int getScore() { return this->score; } 60 64 61 65 protected: … … 73 77 bool bFire; //!< If the Ship is firing. 74 78 int oldFlags; //!< Used for synchronisation 79 80 int score; 81 int oldScore; 75 82 83 //HACK: explosion emitter 84 DotEmitter* emitter; 85 SpriteParticles* explosionParticles; 76 86 }; 77 87 -
trunk/src/world_entities/space_ships/space_ship.cc
r6947 r6959 96 96 { 97 97 //this->loadModel("models/ships/reap_#.obj"); 98 this->loadModel( "models/ships/fighter.obj" ); 98 ///HACK this is only for network multiplayer games. 99 if( this->getOwner()%2 == 0) 100 { 101 this->loadModel("models/ships/reap_#.obj"); 102 this->toList(OM_GROUP_00); 103 } 104 else 105 { 106 this->loadModel( "models/ships/fighter.obj" ); 107 this->toList(OM_GROUP_01); 108 } 99 109 } 100 110 … … 275 285 { 276 286 Playable::collidesWith(entity, location); 287 288 277 289 if (entity->isA(CL_TURRET_POWER_UP) && entity != ref) 278 290 { 279 291 this->ADDWEAPON(); 280 292 ref = entity; 281 } 293 } 294 295 if( entity->isA(CL_PROJECTILE) && entity != ref) 296 { 297 if ( isServer() ) 298 { 299 networkCollisionList.push_back( entity->getHealth() ); 300 doCollideNetwork( entity->getHealth() ); 301 } 302 } 282 303 // PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getClassName(), entity->getClassName(), location.x, location.y, location.z); 283 304 } … … 320 341 321 342 // spaceship controlled movement 322 this->calculateVelocity(time); 343 if (this->getOwner() == this->getHostID()) 344 this->calculateVelocity(time); 345 323 346 324 347 Vector move = velocity*time; … … 450 473 } 451 474 452 velocity += accel ;475 velocity += accel*time*10; 453 476 //rot.normalize(); 454 477 //this->setRelDirSoft(Quaternion(rotVal, rot), 5); … … 526 549 #define DATA_velocity 5 527 550 #define DATA_playables 6 551 #define DATA_collision 7 528 552 529 553 int SpaceShip::writeBytes( const byte * data, int length, int sender ) … … 561 585 bRollL = (flags & MASK_bRollL) != 0; 562 586 bRollR = (flags & MASK_bRollR) != 0; 563 587 564 588 } 565 589 else … … 603 627 SYNCHELP_READ_FLOAT( velocity.y, NWT_SS_VELY ); 604 628 SYNCHELP_READ_FLOAT( velocity.z, NWT_SS_VELZ ); 605 } 629 } 606 630 else 607 631 assert(false); 608 632 609 633 continue; 610 634 } 611 635 612 636 if ( b == DATA_playables ) 613 637 { … … 619 643 assert(false); 620 644 } 645 646 if ( b == DATA_collision ) 647 { 648 int n; 649 float energy; 650 SYNCHELP_READ_INT( n, NWT_SS_CO_N ); 651 652 for ( int i = 0; i<n; i++ ) 653 { 654 SYNCHELP_READ_FLOAT( energy, NWT_SS_CO_CLID ); 655 doCollideNetwork( energy ); 656 } 657 } 621 658 } 622 659 … … 651 688 } 652 689 653 *reciever = -this->getOwner(); 690 *reciever = 0 - this->getOwner(); 691 //TODO: implement with SYNCHELP_WRITE_SENT() 654 692 bool sentSomething = false; 655 693 656 if ( ( this->getHostID()==0 || this->getOwner() == this->getHostID() ) && PNode::needsReadSync() ) 657 { 694 if ( PNode::needsReadSync() && ( this->getHostID()==0 || this->getOwner() == this->getHostID() ) ) 695 { 696 PRINTF(0)("sending PNode::readSync\n"); 658 697 SYNCHELP_WRITE_BYTE( DATA_sync, NWT_SS_B ); 659 698 SYNCHELP_WRITE_FKT( PNode::readSync, NWT_SS_PN_SYNC ); 699 sentSomething = true; 660 700 } 661 701 … … 683 723 { 684 724 oldMask = mask; 725 PRINTF(0)("sending mask\n"); 685 726 sentSomething = true; 686 727 SYNCHELP_WRITE_BYTE( DATA_flags, NWT_SS_B ); … … 705 746 } 706 747 #define __OFFSET_VEL 0.05 707 if ( fabs( oldVelocity.x - velocity.x ) > __OFFSET_VEL*velocity.x || 708 fabs( oldVelocity.y - velocity.y ) > __OFFSET_VEL*velocity.y || 709 fabs( oldVelocity.z - velocity.z ) > __OFFSET_VEL*velocity.z ) 710 { 711 oldVelocity = velocity; 712 //PRINTF(0)("SENDING velocity\n"); 713 //SYNCHELP_WRITE_BYTE( DATA_velocity, NWT_SS_B ); 714 //SYNCHELP_WRITE_FLOAT( velocity.x, NWT_SS_VELX ); 715 //SYNCHELP_WRITE_FLOAT( velocity.y, NWT_SS_VELY ); 716 //SYNCHELP_WRITE_FLOAT( velocity.z, NWT_SS_VELZ ); 717 } 718 748 if ( fabs( oldVelocity.x - velocity.x ) > __OFFSET_VEL*fabs(oldVelocity.x)+0.1 || 749 fabs( oldVelocity.y - velocity.y ) > __OFFSET_VEL*fabs(oldVelocity.y)+0.1 || 750 fabs( oldVelocity.z - velocity.z ) > __OFFSET_VEL*fabs(oldVelocity.z)+0.1 ) 751 { 752 oldVelocity.x = velocity.x; 753 oldVelocity.y = velocity.y; 754 oldVelocity.z = velocity.z; 755 PRINTF(0)("SENDING velocity\n"); 756 sentSomething = true; 757 SYNCHELP_WRITE_BYTE( DATA_velocity, NWT_SS_B ); 758 SYNCHELP_WRITE_FLOAT( velocity.x, NWT_SS_VELX ); 759 SYNCHELP_WRITE_FLOAT( velocity.y, NWT_SS_VELY ); 760 SYNCHELP_WRITE_FLOAT( velocity.z, NWT_SS_VELZ ); 761 } 762 719 763 if ( Playable::needsReadSync() ) 720 764 { 721 765 sentSomething = true; 766 PRINTF(0)("SYNCHELP_WRITE_FKT( Playable::readSync, NWT_SS_PL_SYNC )\n"); 722 767 SYNCHELP_WRITE_BYTE( DATA_playables, NWT_SS_B ); 723 768 SYNCHELP_WRITE_FKT( Playable::readSync, NWT_SS_PL_SYNC ); … … 725 770 726 771 } 727 772 728 773 if ( !sentSomething ) 729 reciever = 0; 774 { 775 *reciever = 0; 776 777 if ( networkCollisionList.size()>0 ) 778 { 779 SYNCHELP_WRITE_BYTE( DATA_collision, NWT_SS_B ); 780 781 SYNCHELP_WRITE_INT( networkCollisionList.size(), NWT_SS_CO_N ); 782 783 for ( std::list<float>::iterator it = networkCollisionList.begin(); it!=networkCollisionList.end(); it++ ) 784 { 785 SYNCHELP_WRITE_FLOAT( *it, NWT_SS_CO_CLID ); 786 } 787 788 networkCollisionList.clear(); 789 } 790 } 730 791 731 792 return SYNCHELP_WRITE_N; 732 793 } 733 794 734 795 void SpaceShip::doCollideNetwork( float energy ) 796 { 797 this->decreaseHealth( energy ); 798 } 799 800 801 -
trunk/src/world_entities/space_ships/space_ship.h
r6868 r6959 47 47 void calculateVelocity(float time); 48 48 49 void doCollideNetwork( float energy ); 50 49 51 // !! temporary !! 50 52 void ADDWEAPON(); … … 84 86 ParticleEmitter* burstEmitter; 85 87 ParticleSystem* burstSystem; 88 89 std::list<float> networkCollisionList; 86 90 }; 87 91 -
trunk/src/world_entities/world_entity.cc
r6815 r6959 280 280 281 281 /** 282 * this method is called by the world if the WorldEntity leaves valid gamespace 283 * 284 * For free entities this means it left the Track boundaries. With bound entities it means its Location adresses a 285 * place that is not in the world anymore. In both cases you might have to take extreme measures (a.k.a. call destroy). 286 * 287 * NOT YET IMPLEMENTED 288 */ 289 void WorldEntity::leftWorld () 282 * this method is called by the world if the WorldEntity leaves the game 283 */ 284 void WorldEntity::leaveWorld () 290 285 {} 291 286 -
trunk/src/world_entities/world_entity.h
r6700 r6959 54 54 55 55 virtual void postSpawn (); 56 virtual void le ftWorld ();56 virtual void leaveWorld (); 57 57 58 58 virtual void tick (float time);
Note: See TracChangeset
for help on using the changeset viewer.