Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Feb 1, 2006, 4:40:34 PM (18 years ago)
Author:
patrick
Message:

trunk: merged network branche into trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/world_entities/space_ships/space_ship.cc

    r6947 r6959  
    9696  {
    9797    //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    }
    99109  }
    100110
     
    275285{
    276286  Playable::collidesWith(entity, location);
     287
     288
    277289  if (entity->isA(CL_TURRET_POWER_UP) && entity != ref)
    278290  {
    279291    this->ADDWEAPON();
    280292    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  }
    282303//  PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getClassName(), entity->getClassName(), location.x, location.y, location.z);
    283304}
     
    320341
    321342  // spaceship controlled movement
    322   this->calculateVelocity(time);
     343  if (this->getOwner() == this->getHostID())
     344    this->calculateVelocity(time);
     345
    323346
    324347  Vector move = velocity*time;
     
    450473  }
    451474
    452   velocity += accel;
     475  velocity += accel*time*10;
    453476  //rot.normalize();
    454477  //this->setRelDirSoft(Quaternion(rotVal, rot), 5);
     
    526549#define DATA_velocity    5
    527550#define DATA_playables   6
     551#define DATA_collision   7
    528552
    529553int SpaceShip::writeBytes( const byte * data, int length, int sender )
     
    561585        bRollL = (flags & MASK_bRollL) != 0;
    562586        bRollR = (flags & MASK_bRollR) != 0;
    563        
     587
    564588      }
    565589      else
     
    603627        SYNCHELP_READ_FLOAT( velocity.y, NWT_SS_VELY );
    604628        SYNCHELP_READ_FLOAT( velocity.z, NWT_SS_VELZ );
    605       }     
     629      }
    606630      else
    607631        assert(false);
    608      
     632
    609633      continue;
    610634    }
    611    
     635
    612636    if ( b == DATA_playables )
    613637    {
     
    619643        assert(false);
    620644    }
     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    }
    621658  }
    622659
     
    651688  }
    652689
    653   *reciever = -this->getOwner();
     690  *reciever = 0 - this->getOwner();
     691  //TODO: implement with SYNCHELP_WRITE_SENT()
    654692  bool sentSomething = false;
    655693
    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");
    658697    SYNCHELP_WRITE_BYTE( DATA_sync, NWT_SS_B );
    659698    SYNCHELP_WRITE_FKT( PNode::readSync, NWT_SS_PN_SYNC );
     699    sentSomething = true;
    660700  }
    661701
     
    683723    {
    684724      oldMask = mask;
     725      PRINTF(0)("sending mask\n");
    685726      sentSomething = true;
    686727      SYNCHELP_WRITE_BYTE( DATA_flags, NWT_SS_B );
     
    705746    }
    706747#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
    719763    if ( Playable::needsReadSync() )
    720764    {
    721765      sentSomething = true;
     766      PRINTF(0)("SYNCHELP_WRITE_FKT( Playable::readSync, NWT_SS_PL_SYNC )\n");
    722767      SYNCHELP_WRITE_BYTE( DATA_playables, NWT_SS_B );
    723768      SYNCHELP_WRITE_FKT( Playable::readSync, NWT_SS_PL_SYNC );
     
    725770
    726771  }
    727  
     772
    728773  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  }
    730791
    731792  return SYNCHELP_WRITE_N;
    732793}
    733794
    734 
     795void SpaceShip::doCollideNetwork( float energy )
     796{
     797  this->decreaseHealth( energy );
     798}
     799
     800
     801
Note: See TracChangeset for help on using the changeset viewer.