Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 8096 in orxonox.OLD for branches/network/src/util


Ignore:
Timestamp:
Jun 1, 2006, 6:36:55 PM (18 years ago)
Author:
rennerc
Message:

teamchoice works now

Location:
branches/network/src/util
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/network/src/util/multiplayer_team_deathmatch.cc

    r8068 r8096  
    3737
    3838#include "network_game_manager.h"
     39
     40#include "event_handler.h"
     41
     42#include "glgui.h"
     43
     44#include "story_entity.h"
    3945
    4046
     
    5965  this->currentGameState = GAMESTATE_PRE_GAME;
    6066  this->gameStateTimer = 10.0f;
     67 
     68  this->box = NULL;
    6169
    6270  this->deathScreen = new ImagePlane();
     
    138146void MultiplayerTeamDeathmatch::tick(float dt)
    139147{
     148  //on client side hostId is -1 until hanshake finished
     149  if ( SharedNetworkData::getInstance()->getHostID() < 0 )
     150    return;
     151 
     152  if ( currentGameState == GAMESTATE_PRE_GAME )
     153  {
     154    if ( PlayerStats::getStats( SharedNetworkData::getInstance()->getHostID() )
     155         && PlayerStats::getStats( SharedNetworkData::getInstance()->getHostID() )->getPreferedTeamId() == TEAM_NOTEAM
     156         && box == NULL
     157       )
     158    {
     159      EventHandler::getInstance()->pushState( ES_MENU );
     160     
     161      OrxGui::GLGuiHandler::getInstance()->activateCursor();
     162     
     163      box = new OrxGui::GLGuiBox();
     164      box->setAbsCoor2D( 300, 100 );
     165     
     166      OrxGui::GLGuiPushButton * buttonSpectator = new OrxGui::GLGuiPushButton("Spectator");
     167      box->pack( buttonSpectator );
     168      buttonSpectator->connect(SIGNAL(buttonSpectator, released), this, SLOT(MultiplayerTeamDeathmatch, onButtonSpectator));
     169     
     170      OrxGui::GLGuiPushButton * buttonRandom = new OrxGui::GLGuiPushButton("Random");
     171      box->pack( buttonRandom );
     172      buttonRandom->connect(SIGNAL(buttonRandom, released), this, SLOT(MultiplayerTeamDeathmatch, onButtonRandom));
     173     
     174      OrxGui::GLGuiPushButton * buttonTeam0 = new OrxGui::GLGuiPushButton("Blue Team");
     175      box->pack( buttonTeam0 );
     176      buttonTeam0->connect(SIGNAL(buttonTeam0, released), this, SLOT(MultiplayerTeamDeathmatch, onButtonTeam0));
     177     
     178      OrxGui::GLGuiPushButton * buttonTeam1 = new OrxGui::GLGuiPushButton("Red Team");
     179      box->pack( buttonTeam1 );
     180      buttonTeam1->connect(SIGNAL(buttonTeam1, released), this, SLOT(MultiplayerTeamDeathmatch, onButtonTeam1));
     181     
     182      OrxGui::GLGuiPushButton * buttonExit = new OrxGui::GLGuiPushButton("Exit");
     183      box->pack( buttonExit );
     184      buttonExit->connect(SIGNAL(buttonExit, released), this, SLOT(MultiplayerTeamDeathmatch, onButtonExit));
     185     
     186      box->showAll();
     187    }
     188  }
     189
     190  if ( box != NULL
     191       && PlayerStats::getStats( SharedNetworkData::getInstance()->getHostID() )
     192       && PlayerStats::getStats( SharedNetworkData::getInstance()->getHostID() )->getPreferedTeamId() != TEAM_NOTEAM
     193     )
     194  {
     195    delete box;
     196    box = NULL;
     197     
     198    OrxGui::GLGuiHandler::getInstance()->deactivateCursor( true );
     199     
     200    EventHandler::getInstance()->popState();
     201  }
     202 
     203  if ( box != NULL )
     204  {
     205    OrxGui::GLGuiHandler::getInstance()->tick( dt );
     206  }
     207 
     208  assignPlayable();
     209 
    140210  if ( !SharedNetworkData::getInstance()->isGameServer() )
    141211    return;
    142212 
    143213  gameStateTimer -= dt;
    144   PRINTF(0)("TICK %f\n", gameStateTimer);
     214  //PRINTF(0)("TICK %f\n", gameStateTimer);
    145215 
    146216  if ( currentGameState != GAMESTATE_GAME && gameStateTimer < 0 )
     
    210280 * @return group id
    211281 */
    212 int MultiplayerTeamDeathmatch::getTeamForNewUser( )
     282int MultiplayerTeamDeathmatch::getTeamForNewUser()
    213283{
    214284  return TEAM_NOTEAM;
    215285}
    216286
    217 ClassID MultiplayerTeamDeathmatch::getPlayableClassId( int team )
    218 {
    219   return CL_SPECTATOR;
    220 }
    221 
    222 std::string MultiplayerTeamDeathmatch::getPlayableModelFileName( int team, ClassID classId )
    223 {
    224   return "";
     287ClassID MultiplayerTeamDeathmatch::getPlayableClassId( int userId, int team )
     288{
     289  if ( team == TEAM_NOTEAM || team == TEAM_SPECTATOR )
     290    return CL_SPECTATOR;
     291 
     292  if ( team == 0 || team == 1 )
     293    return CL_SPACE_SHIP;
     294 
     295  assert( false );
     296}
     297
     298std::string MultiplayerTeamDeathmatch::getPlayableModelFileName( int userId, int team, ClassID classId )
     299{
     300  if ( team == 0 )
     301    return "models/ships/reap_#.obj";
     302  else if ( team == 1 )
     303    return "models/ships/fighter.obj";
     304  else
     305    return "";
    225306}
    226307
     
    334415    if ( stats.getTeamId() != stats.getPreferedTeamId() )
    335416    {
    336       if ( stats.getPreferedTeamId() == TEAM_SPECTATOR || ( stats.getPreferedTeamId() <= 0 && stats.getPreferedTeamId() < numTeams ) )
     417      if ( stats.getPreferedTeamId() == TEAM_SPECTATOR || ( stats.getPreferedTeamId() >= 0 && stats.getPreferedTeamId() < numTeams ) )
    337418      {
    338419        teamChange( stats.getUserId() );
     
    362443  PlayerStats & stats = *(PlayerStats::getStats( userId ));
    363444 
    364   assert(false);
    365 }
    366 
    367 
    368 
    369 
    370 
    371 
     445  stats.setTeamId( stats.getPreferedTeamId() );
     446 
     447  Playable * oldPlayable = stats.getPlayable();
     448 
     449 
     450  ClassID playableClassId = getPlayableClassId( userId, stats.getPreferedTeamId() );
     451  std::string playableModel = getPlayableModelFileName( userId, stats.getPreferedTeamId(), playableClassId );
     452 
     453  BaseObject * bo = Factory::fabricate( playableClassId );
     454 
     455  assert( bo != NULL );
     456  assert( bo->isA( CL_PLAYABLE ) );
     457 
     458  Playable & playable = *(dynamic_cast<Playable*>(bo));
     459 
     460  playable.loadModel( playableModel );
     461  playable.setOwner( userId );
     462  playable.setUniqueID( SharedNetworkData::getInstance()->getNewUniqueID() );
     463  playable.setSynchronized( true );
     464 
     465  stats.setTeamId( stats.getPreferedTeamId() );
     466  stats.setPlayableClassId( playableClassId );
     467  stats.setPlayableUniqueId( playable.getUniqueID() );
     468  stats.setModelFileName( playableModel );
     469 
     470  if ( oldPlayable )
     471  {
     472    //if ( userId == SharedNetworkData::getInstance()->getHostID() )
     473    //  State::getPlayer()->setPlayable( NULL );
     474    delete oldPlayable;
     475  }
     476}
     477
     478void MultiplayerTeamDeathmatch::onButtonExit( )
     479{
     480  State::getCurrentStoryEntity()->stop();
     481}
     482
     483void MultiplayerTeamDeathmatch::onButtonRandom( )
     484{
     485  NetworkGameManager::getInstance()->prefereTeam( TEAM_RANDOM );
     486}
     487
     488void MultiplayerTeamDeathmatch::onButtonTeam0( )
     489{
     490  NetworkGameManager::getInstance()->prefereTeam( 0 );
     491}
     492
     493void MultiplayerTeamDeathmatch::onButtonTeam1( )
     494{
     495  NetworkGameManager::getInstance()->prefereTeam( 1 );
     496}
     497
     498void MultiplayerTeamDeathmatch::onButtonSpectator( )
     499{
     500  NetworkGameManager::getInstance()->prefereTeam( TEAM_SPECTATOR );
     501}
     502
     503void MultiplayerTeamDeathmatch::assignPlayable( )
     504{
     505  if ( PlayerStats::getStats( SharedNetworkData::getInstance()->getHostID() ) )
     506    PlayerStats::getStats( SharedNetworkData::getInstance()->getHostID() )->getPlayable();
     507}
     508
     509
     510
     511
     512
     513
  • branches/network/src/util/multiplayer_team_deathmatch.h

    r8068 r8096  
    1212#include "network_game_rules.h"
    1313
     14#include "glgui_box.h"
    1415
    1516class TiXmlElement;
     
    3637
    3738    virtual int getTeamForNewUser();
    38     virtual ClassID getPlayableClassId( int team );
    39     virtual std::string getPlayableModelFileName( int team, ClassID classId );
     39    virtual ClassID getPlayableClassId( int userId, int team );
     40    virtual std::string getPlayableModelFileName( int userId, int team, ClassID classId );
    4041
    4142    virtual void onPlayerSpawn();
     
    7374    float              gameStateTimer;             //!< if less than 0 -> change game state
    7475
     76    OrxGui::GLGuiBox* box;
     77
     78
    7579    void calculateTeamScore();
    7680    void nextGameState();
    7781    void handleTeamChanges();
    7882    void teamChange( int userId );
     83    void assignPlayable();
     84   
     85    void onButtonSpectator();
     86    void onButtonRandom();
     87    void onButtonTeam0();
     88    void onButtonTeam1();
     89    void onButtonExit();
    7990};
    8091
  • branches/network/src/util/network_game_rules.cc

    r8068 r8096  
    3838}
    3939
    40 std::string NetworkGameRules::getPlayableModelFileName( int team, ClassID classId )
     40std::string NetworkGameRules::getPlayableModelFileName( int uesrId, int team, ClassID classId )
    4141{
    4242  return "models/ships/reap_#.obj";
    4343}
    4444
    45 ClassID NetworkGameRules::getPlayableClassId( int team )
     45ClassID NetworkGameRules::getPlayableClassId( int userId, int team )
    4646{
    4747  return CL_SPACE_SHIP;
  • branches/network/src/util/network_game_rules.h

    r8068 r8096  
    2121   
    2222    virtual int getTeamForNewUser();
    23     virtual ClassID getPlayableClassId( int team );
    24     virtual std::string getPlayableModelFileName( int team, ClassID classId );
     23    virtual ClassID getPlayableClassId( int userId, int team );
     24    virtual std::string getPlayableModelFileName( int userId, int team, ClassID classId );
    2525   
    2626    virtual PlayerStats * getNewPlayerStats( int userId ){ return new PlayerStats( userId ); }
Note: See TracChangeset for help on using the changeset viewer.