/** Creates a kart, having a certain position, starting location, and local * and global player id (if applicable). * \param kart_ident Identifier of the kart to create. * \param index Index of the kart. * \param local_player_id If the kart is a player kart this is the index of * this player on the local machine. * \param global_player_id If the kart is a player kart this is the index of * this player globally (i.e. including network players). */ AbstractKart *World::createKart(const std::string &kart_ident, int index, int local_player_id, int global_player_id, RaceManager::KartType kart_type) { int position = index+1; btTransform init_pos = m_track->getStartTransform(index); AbstractKart *new_kart = new Kart(kart_ident, index, position, init_pos); new_kart->init(race_manager->getKartType(index)); Controller *controller = NULL; switch(kart_type) { case RaceManager::KT_PLAYER: controller = new PlayerController(new_kart, StateManager::get()->getActivePlayer(local_player_id), local_player_id); m_num_players ++; break; case RaceManager::KT_NETWORK_PLAYER: controller = new NetworkPlayerController(new_kart, StateManager::get()->getActivePlayer(local_player_id)); m_num_players++; break; case RaceManager::KT_AI: controller = loadAIController(new_kart); break; case RaceManager::KT_GHOST: break; case RaceManager::KT_LEADER: break; } new_kart->setController(controller); return new_kart; } // createKart
//----------------------------------------------------------------------------- AbstractKart *SoccerWorld::createKart(const std::string &kart_ident, int index, int local_player_id, int global_player_id, RaceManager::KartType kart_type, PerPlayerDifficulty difficulty) { int posIndex = index; int position = index+1; if(race_manager->getLocalKartInfo(index).getSoccerTeam() == SOCCER_TEAM_RED) { if(index % 2 != 1) posIndex += 1; } else { if(index % 2 != 0) posIndex += 1; } btTransform init_pos = getStartTransform(posIndex); AbstractKart *new_kart = new Kart(kart_ident, index, position, init_pos, difficulty); new_kart->init(race_manager->getKartType(index)); Controller *controller = NULL; switch(kart_type) { case RaceManager::KT_PLAYER: controller = new LocalPlayerController(new_kart, StateManager::get()->getActivePlayer(local_player_id), local_player_id); m_num_players ++; break; case RaceManager::KT_NETWORK_PLAYER: break; // Avoid compiler warning about enum not handled. //controller = new NetworkController(kart_ident, position, init_pos, // global_player_id); //m_num_players++; //break; case RaceManager::KT_AI: controller = loadAIController(new_kart); break; case RaceManager::KT_GHOST: break; case RaceManager::KT_LEADER: break; } new_kart->setController(controller); return new_kart; } // createKart
/** Creates a kart, having a certain position, starting location, and local * and global player id (if applicable). * \param kart_ident Identifier of the kart to create. * \param index Index of the kart. * \param local_player_id If the kart is a player kart this is the index of * this player on the local machine. * \param global_player_id If the kart is a player kart this is the index of * this player globally (i.e. including network players). */ AbstractKart *World::createKart(const std::string &kart_ident, int index, int local_player_id, int global_player_id, RaceManager::KartType kart_type, PerPlayerDifficulty difficulty) { unsigned int gk = 0; if (race_manager->hasGhostKarts()) gk = ReplayPlay::get()->getNumGhostKart(); int position = index+1; btTransform init_pos = getStartTransform(index - gk); AbstractKart *new_kart; if (RewindManager::get()->isEnabled()) new_kart = new KartRewinder(kart_ident, index, position, init_pos, difficulty); else new_kart = new Kart(kart_ident, index, position, init_pos, difficulty); new_kart->init(race_manager->getKartType(index)); Controller *controller = NULL; switch(kart_type) { case RaceManager::KT_PLAYER: controller = new LocalPlayerController(new_kart, StateManager::get()->getActivePlayer(local_player_id)); m_num_players ++; break; case RaceManager::KT_NETWORK_PLAYER: controller = new NetworkPlayerController(new_kart); m_num_players++; break; case RaceManager::KT_AI: controller = loadAIController(new_kart); break; case RaceManager::KT_GHOST: break; case RaceManager::KT_LEADER: break; case RaceManager::KT_SPARE_TIRE: break; } new_kart->setController(controller); return new_kart; } // createKart
/** Creates a kart, having a certain position, starting location, and local * and global player id (if applicable). * \param kart_ident Identifier of the kart to create. * \param index Index of the kart. * \param local_player_id If the kart is a player kart this is the index of * this player on the local machine. * \param global_player_id If the akrt is a player kart this is the index of * this player globally (i.e. including network players). * \param init_pos The start XYZ coordinates. */ AbstractKart *ProfileWorld::createKart(const std::string &kart_ident, int index, int local_player_id, int global_player_id, RaceManager::KartType type, PerPlayerDifficulty difficulty) { btTransform init_pos = getStartTransform(index); Kart *new_kart = new KartWithStats(kart_ident, /*world kart id*/ index, /*position*/ index+1, init_pos, difficulty); new_kart->init(RaceManager::KT_AI); Controller *controller = loadAIController(new_kart); new_kart->setController(controller); // Create a camera for the last kart (since this way more of the // karts can be seen. if (index == (int)race_manager->getNumberOfKarts()-1) { // The camera keeps track of all cameras and will free them Camera::createCamera(new_kart); } return new_kart; } // createKart
//----------------------------------------------------------------------------- AbstractKart *SoccerWorld::createKart(const std::string &kart_ident, int index, int local_player_id, int global_player_id, RaceManager::KartType kart_type, PerPlayerDifficulty difficulty) { int cur_red = getTeamNum(SOCCER_TEAM_RED); int cur_blue = getTeamNum(SOCCER_TEAM_BLUE); int pos_index = 0; int position = index + 1; SoccerTeam team = SOCCER_TEAM_BLUE; if (kart_type == RaceManager::KT_AI) { if (index < m_red_ai) team = SOCCER_TEAM_RED; else team = SOCCER_TEAM_BLUE; m_kart_team_map[index] = team; } else { int rm_id = index - (race_manager->getNumberOfKarts() - race_manager->getNumPlayers()); assert(rm_id >= 0); team = race_manager->getKartInfo(rm_id).getSoccerTeam(); m_kart_team_map[index] = team; } // Notice: In blender, please set 1,3,5,7... for blue starting position; // 2,4,6,8... for red. if (team == SOCCER_TEAM_BLUE) { pos_index = 1 + 2 * cur_blue; } else { pos_index = 2 + 2 * cur_red; } btTransform init_pos = getStartTransform(pos_index - 1); m_kart_position_map[index] = (unsigned)(pos_index - 1); AbstractKart *new_kart = new Kart(kart_ident, index, position, init_pos, difficulty); //difficulty, team == SOCCER_TEAM_BLUE ? //video::ERT_BLUE : video::ERT_RED); new_kart->init(race_manager->getKartType(index)); Controller *controller = NULL; switch(kart_type) { case RaceManager::KT_PLAYER: controller = new LocalPlayerController(new_kart, StateManager::get()->getActivePlayer(local_player_id)); m_num_players ++; break; case RaceManager::KT_NETWORK_PLAYER: break; // Avoid compiler warning about enum not handled. //controller = new NetworkController(kart_ident, position, init_pos, // global_player_id); //m_num_players++; //break; case RaceManager::KT_AI: controller = loadAIController(new_kart); break; case RaceManager::KT_GHOST: break; case RaceManager::KT_LEADER: break; } new_kart->setController(controller); return new_kart; } // createKart