diff --git a/src/graphics/camera.cpp b/src/graphics/camera.cpp index 3f26c6e9a..e908f46b4 100644 --- a/src/graphics/camera.cpp +++ b/src/graphics/camera.cpp @@ -53,10 +53,10 @@ Camera::CameraType Camera::m_default_type = Camera::CM_TYPE_NORMAL; * camera index (which determines which viewport to use in split screen) * is set. */ -Camera* Camera::createCamera(AbstractKart* kart) +Camera* Camera::createCamera(AbstractKart* kart, const int index) { - Camera *camera = createCamera((int)m_all_cameras.size(), - m_default_type, kart ); + + Camera *camera = createCamera(index, m_default_type, kart); m_all_cameras.push_back(camera); return camera; } // createCamera(kart) diff --git a/src/graphics/camera.hpp b/src/graphics/camera.hpp index 27f117557..fcdffb7d2 100644 --- a/src/graphics/camera.hpp +++ b/src/graphics/camera.hpp @@ -136,7 +136,7 @@ public: // ======================================================================== // Static functions - static Camera* createCamera(AbstractKart* kart); + static Camera* createCamera(AbstractKart* kart, const int index); static void resetAllCameras(); static void changeCamera(unsigned int camera_index, CameraType type); diff --git a/src/karts/controller/local_player_controller.cpp b/src/karts/controller/local_player_controller.cpp index 475ff5ad0..5d7b9894f 100644 --- a/src/karts/controller/local_player_controller.cpp +++ b/src/karts/controller/local_player_controller.cpp @@ -54,16 +54,19 @@ * \param init_pos The start coordinates and heading of the kart. */ LocalPlayerController::LocalPlayerController(AbstractKart *kart, - StateManager::ActivePlayer *player) + const int local_playerID) : PlayerController(kart), m_sky_particles_emitter(NULL) { - m_player = player; - if(player) - player->setKart(kart); + + m_player = StateManager::get()->getActivePlayer(local_playerID); + if(m_player) + m_player->setKart(kart); // Keep a pointer to the camera to remove the need to search for // the right camera once per frame later. - Camera *camera = Camera::createCamera(kart); + + Camera *camera = Camera::createCamera(kart, local_playerID); + m_camera_index = camera->getIndex(); m_wee_sound = SFXManager::get()->createSoundSource("wee"); m_bzzt_sound = SFXManager::get()->getBuffer("bzzt"); diff --git a/src/karts/controller/local_player_controller.hpp b/src/karts/controller/local_player_controller.hpp index fbe327030..e5bca05f4 100644 --- a/src/karts/controller/local_player_controller.hpp +++ b/src/karts/controller/local_player_controller.hpp @@ -58,7 +58,7 @@ private: virtual void displayPenaltyWarning() OVERRIDE; public: LocalPlayerController(AbstractKart *kart, - StateManager::ActivePlayer *player); + const int local_playerID); ~LocalPlayerController(); void update (float) OVERRIDE; void action (PlayerAction action, int value) OVERRIDE; diff --git a/src/modes/cutscene_world.cpp b/src/modes/cutscene_world.cpp index 514bf8629..d850a9cf2 100644 --- a/src/modes/cutscene_world.cpp +++ b/src/modes/cutscene_world.cpp @@ -79,7 +79,7 @@ void CutsceneWorld::init() m_duration = -1.0f; - Camera* stk_cam = Camera::createCamera(NULL); + Camera* stk_cam = Camera::createCamera(NULL, 0); m_camera = stk_cam->getCameraSceneNode(); m_camera->setFOV(stk_config->m_cutscene_fov); m_camera->bindTargetAndRotation(true); // no "look-at" diff --git a/src/modes/profile_world.cpp b/src/modes/profile_world.cpp index 25b1e1be8..3165e4e13 100644 --- a/src/modes/profile_world.cpp +++ b/src/modes/profile_world.cpp @@ -123,7 +123,7 @@ AbstractKart *ProfileWorld::createKart(const std::string &kart_ident, int index, if (index == (int)race_manager->getNumberOfKarts()-1) { // The camera keeps track of all cameras and will free them - Camera::createCamera(new_kart); + Camera::createCamera(new_kart, local_player_id); } return new_kart; } // createKart diff --git a/src/modes/soccer_world.cpp b/src/modes/soccer_world.cpp index ce2e750af..3a418a2ed 100644 --- a/src/modes/soccer_world.cpp +++ b/src/modes/soccer_world.cpp @@ -422,7 +422,7 @@ AbstractKart *SoccerWorld::createKart(const std::string &kart_ident, int index, { 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: diff --git a/src/modes/world.cpp b/src/modes/world.cpp index 6e09b5ab8..d0906c3e9 100644 --- a/src/modes/world.cpp +++ b/src/modes/world.cpp @@ -235,7 +235,7 @@ void World::init() { // In case that the server is running with gui or watching replay, // create a camera and attach it to the first kart. - Camera::createCamera(World::getWorld()->getKart(0)); + Camera::createCamera(World::getWorld()->getKart(0), 0); } } // init @@ -354,13 +354,16 @@ AbstractKart *World::createKart(const std::string &kart_ident, int index, case RaceManager::KT_PLAYER: { controller = new LocalPlayerController(new_kart, - StateManager::get()->getActivePlayer(local_player_id)); + + local_player_id); + const float hue = StateManager::get()->getActivePlayer(local_player_id) ->getConstProfile()->getDefaultKartColor(); if (hue > 0.0f) { ri->setHue(hue); } + m_num_players ++; break; }