adding a way to have a network kart selection screen inheriting the normal kart_selection_screen

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/hilnius@13363 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
hilnius
2013-07-27 23:13:03 +00:00
parent 6441c4548c
commit b737ad753a
11 changed files with 43 additions and 25 deletions

View File

@@ -223,9 +223,10 @@ src/states_screens/help_screen_3.cpp
src/states_screens/help_screen_4.cpp
src/states_screens/kart_selection.cpp
src/states_screens/main_menu_screen.cpp
src/states_screens/network_kart_selection.cpp
src/states_screens/networking_lobby.cpp
src/states_screens/networking_lobby_settings.cpp
src/states_screens/network_kart_selection.cpp
src/states_screens/offline_kart_selection.cpp
src/states_screens/online_screen.cpp
src/states_screens/options_screen_audio.cpp
src/states_screens/options_screen_input2.cpp
@@ -516,9 +517,10 @@ src/states_screens/help_screen_3.hpp
src/states_screens/help_screen_4.hpp
src/states_screens/kart_selection.hpp
src/states_screens/main_menu_screen.hpp
src/states_screens/network_kart_selection.hpp
src/states_screens/networking_lobby.hpp
src/states_screens/networking_lobby_settings.hpp
src/states_screens/network_kart_selection.hpp
src/states_screens/offline_kart_selection.hpp
src/states_screens/online_screen.hpp
src/states_screens/options_screen_audio.hpp
src/states_screens/options_screen_input2.hpp

View File

@@ -61,6 +61,7 @@ namespace GUIEngine
template<typename SCREEN>
class ScreenSingleton
{
protected:
static SCREEN* singleton;
public:

View File

@@ -164,12 +164,12 @@ void InputManager::handleStaticAction(int key, int value)
if (UserConfigParams::m_artist_debug_mode && world)
{
AbstractKart* kart = world->getLocalPlayerKart(0);
if (control_is_pressed)
kart->setPowerup(PowerupManager::POWERUP_SWATTER, 10000);
else
kart->setPowerup(PowerupManager::POWERUP_RUBBERBALL, 10000);
#ifdef FORCE_RESCUE_ON_FIRST_KART
// Can be useful for debugging places where the AI gets into
// a rescue loop: rescue, drive, crash, rescue to same place
@@ -181,7 +181,7 @@ void InputManager::handleStaticAction(int key, int value)
if (UserConfigParams::m_artist_debug_mode && world)
{
AbstractKart* kart = world->getLocalPlayerKart(0);
kart->setPowerup(PowerupManager::POWERUP_PLUNGER, 10000);
}
break;
@@ -556,7 +556,7 @@ void InputManager::dispatchInput(Input::InputType type, int deviceID,
action == PA_MENU_CANCEL ) )
{
// returns true if the event was handled
if (KartSelectionScreen::getInstance()->playerQuit( player ))
if (KartSelectionScreen::getRunningInstance()->playerQuit( player ))
{
return; // we're done here
}
@@ -591,7 +591,7 @@ void InputManager::dispatchInput(Input::InputType type, int deviceID,
if (device != NULL)
{
KartSelectionScreen::getInstance()->playerJoin(device,
KartSelectionScreen::getRunningInstance()->playerJoin(device,
false );
}
}

View File

@@ -35,7 +35,7 @@
#include "physics/physics.hpp"
#include "states_screens/credits.hpp"
#include "states_screens/cutscene_gui.hpp"
#include "states_screens/kart_selection.hpp"
#include "states_screens/offline_kart_selection.hpp"
#include "states_screens/main_menu_screen.hpp"
#include "tracks/track.hpp"
#include "tracks/track_object.hpp"
@@ -384,7 +384,7 @@ void CutsceneWorld::enterRaceOverState()
slot->setFirstTime(false);
unlock_manager->save();
KartSelectionScreen* s = KartSelectionScreen::getInstance();
KartSelectionScreen* s = OfflineKartSelectionScreen::getInstance();
s->setMultiplayer(false);
s->setGoToOverworldNext();
StateManager::get()->pushScreen( s );

View File

@@ -28,7 +28,7 @@
#include "modes/overworld.hpp"
#include "physics/physics.hpp"
#include "states_screens/dialogs/select_challenge.hpp"
#include "states_screens/kart_selection.hpp"
#include "states_screens/offline_kart_selection.hpp"
#include "states_screens/race_gui_overworld.hpp"
#include "tracks/track.hpp"
@@ -128,7 +128,7 @@ void OverWorld::update(float dt)
m_return_to_garage = false;
delayedSelfDestruct();
race_manager->exitRace(false);
KartSelectionScreen* s = KartSelectionScreen::getInstance();
KartSelectionScreen* s = OfflineKartSelectionScreen::getInstance();
s->setMultiplayer(false);
s->setFromOverworld(true);
StateManager::get()->resetAndGoToScreen(s);

View File

@@ -119,9 +119,11 @@ void ClientLobbyRoomProtocol::update()
case CONNECTED:
break;
case KART_SELECTION:
StateManager::get()->pushScreen(NetworkKartSelectionScreen::getInstance());
{
NetworkKartSelectionScreen* screen = NetworkKartSelectionScreen::getInstance();
StateManager::get()->pushScreen(screen);
m_state = SELECTING_KARTS;
break;
} break;
case SELECTING_KARTS:
break;
case PLAYING:

View File

@@ -58,8 +58,8 @@ static const char ID_DONT_USE[] = "x";
// Use '/' as special character to avoid that someone creates
// a kart called 'locked'
static const char ID_LOCKED[] = "locked/";
DEFINE_SCREEN_SINGLETON( KartSelectionScreen );
KartSelectionScreen* KartSelectionScreen::m_instance_ptr = NULL;
//DEFINE_SCREEN_SINGLETON( KartSelectionScreen );
class PlayerKartWidget;
@@ -490,7 +490,7 @@ public:
{
assert(m_magic_number == 0x33445566);
assert(KartSelectionScreen::getInstance()
assert(KartSelectionScreen::getRunningInstance()
->m_kart_widgets.contains(this));
bool mineInList = false;
for (int p=0; p<StateManager::get()->activePlayerCount(); p++)
@@ -835,7 +835,7 @@ public:
/** \brief Event callback from ISpinnerConfirmListener */
virtual EventPropagation onSpinnerConfirmed()
{
KartSelectionScreen::getInstance()->playerConfirm(m_playerID);
KartSelectionScreen::getRunningInstance()->playerConfirm(m_playerID);
return EVENT_BLOCK;
} // onSpinnerConfirmed
}; // PlayerKartWidget
@@ -988,6 +988,13 @@ KartSelectionScreen::KartSelectionScreen() : Screen("karts.stkgui")
m_go_to_overworld_next = false;
} // KartSelectionScreen
// ============================================================================
KartSelectionScreen* KartSelectionScreen::getRunningInstance()
{
return m_instance_ptr;
}
// ----------------------------------------------------------------------------
void KartSelectionScreen::loadedFromFile()

View File

@@ -33,8 +33,7 @@ class KartHoverListener;
* \brief screen where players can choose their kart
* \ingroup states_screens
*/
class KartSelectionScreen : public GUIEngine::Screen,
public GUIEngine::ScreenSingleton<KartSelectionScreen>
class KartSelectionScreen : public GUIEngine::Screen
{
friend class KartHoverListener;
friend class PlayerNameSpinner;
@@ -92,7 +91,11 @@ protected:
void playerConfirm(const int playerID);
/** Stores a pointer to the current selection screen */
static KartSelectionScreen* m_instance_ptr;
public:
/** Returns the current instance */
static KartSelectionScreen* getRunningInstance();
/** \brief implement callback from parent class GUIEngine::Screen */
virtual void loadedFromFile() OVERRIDE;

View File

@@ -41,7 +41,7 @@
#include "states_screens/addons_screen.hpp"
#include "states_screens/credits.hpp"
#include "states_screens/help_screen_1.hpp"
#include "states_screens/kart_selection.hpp"
#include "states_screens/offline_kart_selection.hpp"
#include "states_screens/options_screen_video.hpp"
#include "states_screens/state_manager.hpp"
@@ -271,14 +271,14 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name,
#endif
if (selection == "new")
{
KartSelectionScreen* s = KartSelectionScreen::getInstance();
KartSelectionScreen* s = OfflineKartSelectionScreen::getInstance();
s->setMultiplayer(false);
s->setFromOverworld(false);
StateManager::get()->pushScreen( s );
}
else if (selection == "multiplayer")
{
KartSelectionScreen* s = KartSelectionScreen::getInstance();
KartSelectionScreen* s = OfflineKartSelectionScreen::getInstance();
s->setMultiplayer(true);
s->setFromOverworld(false);
StateManager::get()->pushScreen( s );
@@ -358,7 +358,7 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name,
const std::string default_kart = UserConfigParams::m_default_kart;
if (slot->isLocked(default_kart))
{
KartSelectionScreen *next = KartSelectionScreen::getInstance();
KartSelectionScreen *next = OfflineKartSelectionScreen::getInstance();
next->setGoToOverworldNext();
next->setMultiplayer(false);
StateManager::get()->resetAndGoToScreen(next);

View File

@@ -6,6 +6,7 @@ DEFINE_SCREEN_SINGLETON( NetworkKartSelectionScreen );
NetworkKartSelectionScreen::NetworkKartSelectionScreen() : KartSelectionScreen()
{
KartSelectionScreen::m_instance_ptr = this;
}
NetworkKartSelectionScreen::~NetworkKartSelectionScreen()

View File

@@ -2,15 +2,17 @@
#define NETWORK_KART_SELECTION_HPP
#include "states_screens/kart_selection.hpp"
#include "guiengine/screen.hpp"
class NetworkKartSelectionScreen : public KartSelectionScreen
class NetworkKartSelectionScreen : public KartSelectionScreen, public GUIEngine::ScreenSingleton<NetworkKartSelectionScreen>
{
friend class GUIEngine::ScreenSingleton<NetworkKartSelectionScreen>;
protected:
NetworkKartSelectionScreen();
virtual ~NetworkKartSelectionScreen();
public:
static bool isRunning() { return singleton!=NULL; }
virtual void init() OVERRIDE;
virtual void eventCallback(GUIEngine::Widget* widget, const std::string& name,
const int playerID) OVERRIDE;