Add difficulty to karts
This commit is contained in:
parent
bcf7690809
commit
a84094e55e
@ -336,22 +336,92 @@
|
|||||||
</ai>
|
</ai>
|
||||||
|
|
||||||
<!-- The per-player difficulties in multiplayer games.
|
<!-- The per-player difficulties in multiplayer games.
|
||||||
These values are multiplied with the current values of a car. (except ai) -->
|
These values are multiplied with the current values of a car. -->
|
||||||
<difficulties>
|
<difficulties>
|
||||||
<easiest>
|
<easiest>
|
||||||
<engine power="4.0" max-speed="4.0"/>
|
<mass value="1.0"/>
|
||||||
|
<engine brake-factor="2.5" max-speed-reverse-ratio="1.0" power="1.5" max-speed="1.5"/>
|
||||||
|
<nitro consumption="0.7" max-speed-increase="1.3" duration="1.0" fade-out-time="1.0"/>
|
||||||
|
<bubblegum time="0.5" speed-fraction="0.5" torque="0.5" fade-in-time="1.0"/>
|
||||||
|
<rescue time="0.5"/>
|
||||||
|
<explosion time="0.5" invulnerability-time="1.5"/>
|
||||||
|
<slipstream length="1.5" width="1.5" collect-time="0.5" use-time="2.0"
|
||||||
|
add-power="1.5" min-speed="1.5" max-speed-increase="1.5" duration="1.5"
|
||||||
|
fade-out-time="1.0"/>
|
||||||
|
<plunger band-max-length="1.5" band-force="1.0" band-duration="1.0"
|
||||||
|
band-speed-increase="1.5" band-fade-out-time="1.0" in-face-time="0.5"/>
|
||||||
|
<zipper time="1.3" force="1.3" speed-gain="1.3" max-speed-increase="1.3"
|
||||||
|
fade-out-time="1.0"/>
|
||||||
|
<swatter duration="1.5" squash-duration="0.7" squash-slowdown="0.5"/>
|
||||||
|
<startup time="2.0 2.0" boost="1.5 1.5"/>
|
||||||
</easiest>
|
</easiest>
|
||||||
<easy>
|
<easy>
|
||||||
<engine power="2.0" max-speed="2.0"/>
|
<mass value="1.0"/>
|
||||||
|
<engine brake-factor="1.7" max-speed-reverse-ratio="1.0" power="1.2" max-speed="1.2"/>
|
||||||
|
<nitro consumption="0.9" max-speed-increase="1.1" duration="1.0" fade-out-time="1.0"/>
|
||||||
|
<bubblegum time="0.7" speed-fraction="0.7" torque="0.7" fade-in-time="1.0"/>
|
||||||
|
<rescue time="0.7"/>
|
||||||
|
<explosion time="0.7" invulnerability-time="1.2"/>
|
||||||
|
<slipstream length="1.2" width="1.2" collect-time="0.7" use-time="1.5"
|
||||||
|
add-power="1.3" min-speed="1.3" max-speed-increase="1.3" duration="1.3"
|
||||||
|
fade-out-time="1.0"/>
|
||||||
|
<plunger band-max-length="1.2" band-force="1.0" band-duration="1.0"
|
||||||
|
band-speed-increase="1.2" band-fade-out-time="1.0" in-face-time="0.7"/>
|
||||||
|
<zipper time="1.2" force="1.1" speed-gain="1.1" max-speed-increase="1.1"
|
||||||
|
fade-out-time="1.0"/>
|
||||||
|
<swatter duration="1.2" squash-duration="0.8" squash-slowdown="0.7"/>
|
||||||
|
<startup time="1.5 1.5" boost="1.2 1.2"/>
|
||||||
</easy>
|
</easy>
|
||||||
<normal>
|
<normal>
|
||||||
<engine power="1.0" max-speed="1.0"/>
|
<mass value="1.0"/>
|
||||||
|
<engine brake-factor="1.0" max-speed-reverse-ratio="1.0" power="1.0" max-speed="1.0"/>
|
||||||
|
<nitro consumption="1.0" max-speed-increase="1.0" duration="1.0" fade-out-time="1.0"/>
|
||||||
|
<bubblegum time="1.0" speed-fraction="1.0" torque="1.0" fade-in-time="1.0"/>
|
||||||
|
<rescue time="1.0"/>
|
||||||
|
<explosion time="1.0" radius="1.0" invulnerability-time="1.0"/>
|
||||||
|
<slipstream length="1.0" width="1.0" collect-time="1.0" use-time="1.0"
|
||||||
|
add-power="1.0" min-speed="1.0" max-speed-increase="1.0" duration="1.0"
|
||||||
|
fade-out-time="1.0"/>
|
||||||
|
<plunger band-max-length="1.0" band-force="1.0" band-duration="1.0"
|
||||||
|
band-speed-increase="1.0" band-fade-out-time="1.0" in-face-time="1.0"/>
|
||||||
|
<zipper time="1.0" force="1.0" speed-gain="1.0" max-speed-increase="1.0"
|
||||||
|
fade-out-time="1.0"/>
|
||||||
|
<swatter duration="1.0" squash-duration="1.0" squash-slowdown="1.0"/>
|
||||||
|
<startup time="1.0 1.0" boost="1.0 1.0"/>
|
||||||
</normal>
|
</normal>
|
||||||
<hard>
|
<hard>
|
||||||
<engine power="0.5" max-speed="0.5"/>
|
<mass value="1.0"/>
|
||||||
|
<engine brake-factor="0.8" max-speed-reverse-ratio="0.8" power="0.8" max-speed="0.8"/>
|
||||||
|
<nitro consumption="1.1" max-speed-increase="0.9" duration="1.0" fade-out-time="1.0"/>
|
||||||
|
<bubblegum time="1.5" speed-fraction="1.5" torque="1.5" fade-in-time="1.0"/>
|
||||||
|
<rescue time="1.5"/>
|
||||||
|
<explosion time="1.3" invulnerability-time="0.7"/>
|
||||||
|
<slipstream length="0.8" width="0.8" collect-time="1.5" use-time="0.8"
|
||||||
|
add-power="0.8" min-speed="0.8" max-speed-increase="0.9" duration="0.8"
|
||||||
|
fade-out-time="1.0"/>
|
||||||
|
<plunger band-max-length="0.8" band-force="1.0" band-duration="1.0"
|
||||||
|
band-speed-increase="0.8" band-fade-out-time="1.0" in-face-time="1.3"/>
|
||||||
|
<zipper time="0.8" force="0.8" speed-gain="0.8" max-speed-increase="0.8"
|
||||||
|
fade-out-time="1.0"/>
|
||||||
|
<swatter duration="0.8" squash-duration="1.5" squash-slowdown="1.8"/>
|
||||||
|
<startup time="0.8 0.8" boost="0.8 0.8"/>
|
||||||
</hard>
|
</hard>
|
||||||
<hardest>
|
<hardest>
|
||||||
<engine power="0.25" max-speed="0.25"/>
|
<mass value="1.0"/>
|
||||||
|
<engine brake-factor="0.5" max-speed-reverse-ratio="0.6" power="0.6" max-speed="0.6"/>
|
||||||
|
<nitro consumption="1.2" max-speed-increase="0.8" duration="1.0" fade-out-time="1.0"/>
|
||||||
|
<bubblegum time="2.0" speed-fraction="2.0" torque="2.0" fade-in-time="1.0"/>
|
||||||
|
<rescue time="2.0"/>
|
||||||
|
<explosion time="1.5" invulnerability-time="0.5"/>
|
||||||
|
<slipstream length="0.6" width="0.6" collect-time="1.5" use-time="0.6"
|
||||||
|
add-power="0.6" min-speed="0.6" max-speed-increase="0.8" duration="0.6"
|
||||||
|
fade-out-time="1.0"/>
|
||||||
|
<plunger band-max-length="0.6" band-force="1.0" band-duration="1.0"
|
||||||
|
band-speed-increase="0.6" band-fade-out-time="1.0" in-face-time="1.5"/>
|
||||||
|
<zipper time="0.6" force="0.6" speed-gain="0.6" max-speed-increase="0.6"
|
||||||
|
fade-out-time="1.0"/>
|
||||||
|
<swatter duration="0.6" squash-duration="1.5" squash-slowdown="1.8"/>
|
||||||
|
<startup time="0.6 0.6" boost="0.6 0.6"/>
|
||||||
</hardets>
|
</hardets>
|
||||||
</difficulties>
|
</difficulties>
|
||||||
|
|
||||||
|
@ -97,6 +97,17 @@ void PlayerDifficulty::load(const std::string &filename, const std::string &node
|
|||||||
*/
|
*/
|
||||||
void PlayerDifficulty::getAllData(const XMLNode * root)
|
void PlayerDifficulty::getAllData(const XMLNode * root)
|
||||||
{
|
{
|
||||||
|
if(const XMLNode *mass_node = root->getNode("mass"))
|
||||||
|
mass_node->get("value", &m_mass);
|
||||||
|
|
||||||
|
if(const XMLNode *engine_node = root->getNode("engine"))
|
||||||
|
{
|
||||||
|
engine_node->get("brake-factor", &m_brake_factor);
|
||||||
|
engine_node->get("max-speed-reverse-ratio", &m_max_speed_reverse_ratio);
|
||||||
|
engine_node->get("power", &m_engine_power);
|
||||||
|
engine_node->get("max-speed", &m_max_speed);
|
||||||
|
}
|
||||||
|
|
||||||
if(const XMLNode *nitro_node = root->getNode("nitro"))
|
if(const XMLNode *nitro_node = root->getNode("nitro"))
|
||||||
{
|
{
|
||||||
nitro_node->get("consumption", &m_nitro_consumption );
|
nitro_node->get("consumption", &m_nitro_consumption );
|
||||||
@ -110,14 +121,12 @@ void PlayerDifficulty::getAllData(const XMLNode * root)
|
|||||||
{
|
{
|
||||||
bubble_node->get("time", &m_bubblegum_time );
|
bubble_node->get("time", &m_bubblegum_time );
|
||||||
bubble_node->get("speed-fraction", &m_bubblegum_speed_fraction);
|
bubble_node->get("speed-fraction", &m_bubblegum_speed_fraction);
|
||||||
bubble_node->get("fade-in-time", &m_bubblegum_fade_in_time );
|
|
||||||
bubble_node->get("torque", &m_bubblegum_torque );
|
bubble_node->get("torque", &m_bubblegum_torque );
|
||||||
|
bubble_node->get("fade-in-time", &m_bubblegum_fade_in_time );
|
||||||
}
|
}
|
||||||
|
|
||||||
if(const XMLNode *rescue_node = root->getNode("rescue"))
|
if(const XMLNode *rescue_node = root->getNode("rescue"))
|
||||||
{
|
|
||||||
rescue_node->get("time", &m_rescue_time);
|
rescue_node->get("time", &m_rescue_time);
|
||||||
}
|
|
||||||
|
|
||||||
if(const XMLNode *explosion_node = root->getNode("explosion"))
|
if(const XMLNode *explosion_node = root->getNode("explosion"))
|
||||||
{
|
{
|
||||||
@ -140,14 +149,6 @@ void PlayerDifficulty::getAllData(const XMLNode * root)
|
|||||||
slipstream_node->get("fade-out-time", &m_slipstream_fade_out_time );
|
slipstream_node->get("fade-out-time", &m_slipstream_fade_out_time );
|
||||||
}
|
}
|
||||||
|
|
||||||
if(const XMLNode *engine_node = root->getNode("engine"))
|
|
||||||
{
|
|
||||||
engine_node->get("brake-factor", &m_brake_factor);
|
|
||||||
engine_node->get("max-speed-reverse-ratio", &m_max_speed_reverse_ratio);
|
|
||||||
engine_node->get("power", &m_engine_power);
|
|
||||||
engine_node->get("max-speed", &m_max_speed);
|
|
||||||
} // if getNode("engine")
|
|
||||||
|
|
||||||
if(const XMLNode *plunger_node= root->getNode("plunger"))
|
if(const XMLNode *plunger_node= root->getNode("plunger"))
|
||||||
{
|
{
|
||||||
plunger_node->get("band-max-length", &m_rubber_band_max_length );
|
plunger_node->get("band-max-length", &m_rubber_band_max_length );
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#define GAME_SETUP_HPP
|
#define GAME_SETUP_HPP
|
||||||
|
|
||||||
#include "network/race_config.hpp"
|
#include "network/race_config.hpp"
|
||||||
|
#include "network/remote_kart_info.hpp"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -43,6 +44,7 @@ class NetworkPlayerProfile
|
|||||||
std::string kart_name; //!< The selected kart.
|
std::string kart_name; //!< The selected kart.
|
||||||
Online::OnlineProfile* user_profile; //!< Pointer to the lobby profile
|
Online::OnlineProfile* user_profile; //!< Pointer to the lobby profile
|
||||||
uint8_t world_kart_id; //!< the kart id in the World class (pointer to AbstractKart)
|
uint8_t world_kart_id; //!< the kart id in the World class (pointer to AbstractKart)
|
||||||
|
PerPlayerDifficulty difficulty;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! \class GameSetup
|
/*! \class GameSetup
|
||||||
|
@ -112,6 +112,7 @@ void StartGameProtocol::update()
|
|||||||
NetworkPlayerProfile* profile = players[i];
|
NetworkPlayerProfile* profile = players[i];
|
||||||
RemoteKartInfo rki(profile->race_id, profile->kart_name,
|
RemoteKartInfo rki(profile->race_id, profile->kart_name,
|
||||||
profile->user_profile->getUserName(), profile->race_id, !is_me);
|
profile->user_profile->getUserName(), profile->race_id, !is_me);
|
||||||
|
rki.setDifficulty(profile->difficulty);
|
||||||
rki.setGlobalPlayerId(profile->race_id);
|
rki.setGlobalPlayerId(profile->race_id);
|
||||||
rki.setLocalPlayerId(is_me?0:1);
|
rki.setLocalPlayerId(is_me?0:1);
|
||||||
rki.setHostId(profile->race_id);
|
rki.setHostId(profile->race_id);
|
||||||
@ -140,6 +141,7 @@ void StartGameProtocol::update()
|
|||||||
NetworkPlayerProfile* profile = players[i];
|
NetworkPlayerProfile* profile = players[i];
|
||||||
RemoteKartInfo rki(profile->race_id, profile->kart_name,
|
RemoteKartInfo rki(profile->race_id, profile->kart_name,
|
||||||
profile->user_profile->getUserName(), profile->race_id, !is_me);
|
profile->user_profile->getUserName(), profile->race_id, !is_me);
|
||||||
|
rki.setDifficulty(profile->difficulty);
|
||||||
rki.setGlobalPlayerId(profile->race_id);
|
rki.setGlobalPlayerId(profile->race_id);
|
||||||
// on the server, the race id must be the local one.
|
// on the server, the race id must be the local one.
|
||||||
rki.setLocalPlayerId(m_listener->isServer()?profile->race_id:(is_me?0:1));
|
rki.setLocalPlayerId(m_listener->isServer()?profile->race_id:(is_me?0:1));
|
||||||
|
@ -161,6 +161,16 @@ void RaceManager::setLocalKartSoccerTeam(unsigned int player_id, SoccerTeam team
|
|||||||
m_local_player_karts[player_id].setSoccerTeam(team);
|
m_local_player_karts[player_id].setSoccerTeam(team);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
/** Sets the per-player difficulty for a player.
|
||||||
|
*/
|
||||||
|
void RaceManager::setPlayerDifficulty(unsigned int player_id, PerPlayerDifficulty difficulty)
|
||||||
|
{
|
||||||
|
assert(player_id < m_local_player_karts.size());
|
||||||
|
|
||||||
|
m_local_player_karts[player_id].setDifficulty(difficulty);
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
/** Returns a pointer to the kart which has a given GP rank.
|
/** Returns a pointer to the kart which has a given GP rank.
|
||||||
* \param n The rank (1 to number of karts) to look for.
|
* \param n The rank (1 to number of karts) to look for.
|
||||||
|
@ -374,6 +374,10 @@ public:
|
|||||||
*/
|
*/
|
||||||
void setLocalKartSoccerTeam(unsigned int player_id, SoccerTeam team);
|
void setLocalKartSoccerTeam(unsigned int player_id, SoccerTeam team);
|
||||||
|
|
||||||
|
/** Sets the per-player difficulty for a player.
|
||||||
|
*/
|
||||||
|
void setPlayerDifficulty(unsigned int player_id, PerPlayerDifficulty difficulty);
|
||||||
|
|
||||||
/** Sets the number of local players playing on this computer (including
|
/** Sets the number of local players playing on this computer (including
|
||||||
* split screen).
|
* split screen).
|
||||||
* \param n Number of local players.
|
* \param n Number of local players.
|
||||||
|
@ -146,7 +146,41 @@ EventPropagation FocusDispatcher::focused(const int playerID)
|
|||||||
return GUIEngine::EVENT_LET;
|
return GUIEngine::EVENT_LET;
|
||||||
} // focused
|
} // focused
|
||||||
|
|
||||||
|
FocusDispatcher2::FocusDispatcher2(KartSelectionScreen *parent) :
|
||||||
|
FocusDispatcher(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
GUIEngine::EventPropagation FocusDispatcher2::focused(const int playerID)
|
||||||
|
{
|
||||||
|
if (!m_is_initialised) return EVENT_LET;
|
||||||
|
|
||||||
|
if(UserConfigParams::logGUI())
|
||||||
|
Log::info("KartSelectionScreen", "FocusDispatcher2 focused by player %u",
|
||||||
|
playerID);
|
||||||
|
|
||||||
|
// since this screen is multiplayer, redirect focus to the right widget
|
||||||
|
const int amount = m_parent->m_kart_widgets.size();
|
||||||
|
for (int n=0; n<amount; n++)
|
||||||
|
{
|
||||||
|
if (m_parent->m_kart_widgets[n].getPlayerID() == playerID)
|
||||||
|
{
|
||||||
|
// If player is done, don't do anything with focus
|
||||||
|
if (m_parent->m_kart_widgets[n].isReady())
|
||||||
|
return GUIEngine::EVENT_BLOCK;
|
||||||
|
|
||||||
|
m_parent->m_kart_widgets[n].m_difficulty
|
||||||
|
->setFocusForPlayer(playerID);
|
||||||
|
|
||||||
|
return GUIEngine::EVENT_BLOCK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return GUIEngine::EVENT_LET;
|
||||||
|
} // focused
|
||||||
|
|
||||||
static FocusDispatcher *g_dispatcher = NULL;
|
static FocusDispatcher *g_dispatcher = NULL;
|
||||||
|
static FocusDispatcher2 *g_dispatcher2 = NULL;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
@ -235,6 +269,7 @@ KartSelectionScreen* KartSelectionScreen::getRunningInstance()
|
|||||||
void KartSelectionScreen::loadedFromFile()
|
void KartSelectionScreen::loadedFromFile()
|
||||||
{
|
{
|
||||||
g_dispatcher = new FocusDispatcher(this);
|
g_dispatcher = new FocusDispatcher(this);
|
||||||
|
g_dispatcher2 = new FocusDispatcher2(this);
|
||||||
m_first_widget = g_dispatcher;
|
m_first_widget = g_dispatcher;
|
||||||
m_game_master_confirmed = false;
|
m_game_master_confirmed = false;
|
||||||
m_multiplayer_message = NULL;
|
m_multiplayer_message = NULL;
|
||||||
@ -307,6 +342,7 @@ void KartSelectionScreen::init()
|
|||||||
// FIXME : The reserved id value is -1 when we switch from KSS to NKSS and vice-versa
|
// FIXME : The reserved id value is -1 when we switch from KSS to NKSS and vice-versa
|
||||||
|
|
||||||
g_dispatcher->setRootID(placeholder->m_reserved_id);
|
g_dispatcher->setRootID(placeholder->m_reserved_id);
|
||||||
|
g_dispatcher2->setRootID(placeholder->m_reserved_id);
|
||||||
|
|
||||||
g_root_id = placeholder->m_reserved_id;
|
g_root_id = placeholder->m_reserved_id;
|
||||||
if (!m_widgets.contains(g_dispatcher))
|
if (!m_widgets.contains(g_dispatcher))
|
||||||
@ -318,6 +354,15 @@ void KartSelectionScreen::init()
|
|||||||
// other widgets.
|
// other widgets.
|
||||||
g_dispatcher->add();
|
g_dispatcher->add();
|
||||||
}
|
}
|
||||||
|
if (!m_widgets.contains(g_dispatcher2))
|
||||||
|
{
|
||||||
|
m_widgets.push_back(g_dispatcher2);
|
||||||
|
|
||||||
|
// this is only needed if the dispatcher wasn't already in
|
||||||
|
// the list of widgets. If it already was, it was added along
|
||||||
|
// other widgets.
|
||||||
|
g_dispatcher2->add();
|
||||||
|
}
|
||||||
|
|
||||||
m_game_master_confirmed = false;
|
m_game_master_confirmed = false;
|
||||||
|
|
||||||
@ -417,6 +462,7 @@ void KartSelectionScreen::unloaded()
|
|||||||
{
|
{
|
||||||
// these pointers are no more valid (have been deleted along other widgets)
|
// these pointers are no more valid (have been deleted along other widgets)
|
||||||
g_dispatcher = NULL;
|
g_dispatcher = NULL;
|
||||||
|
g_dispatcher2 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -428,6 +474,7 @@ bool KartSelectionScreen::joinPlayer(InputDevice* device, bool first_player)
|
|||||||
if (!m_multiplayer && !first_player) return false;
|
if (!m_multiplayer && !first_player) return false;
|
||||||
|
|
||||||
assert (g_dispatcher != NULL);
|
assert (g_dispatcher != NULL);
|
||||||
|
assert (g_dispatcher2 != NULL);
|
||||||
|
|
||||||
DynamicRibbonWidget* w = getWidget<DynamicRibbonWidget>("karts");
|
DynamicRibbonWidget* w = getWidget<DynamicRibbonWidget>("karts");
|
||||||
if (w == NULL)
|
if (w == NULL)
|
||||||
@ -1179,6 +1226,8 @@ void KartSelectionScreen::allPlayersDone()
|
|||||||
// std::cout << "selection=" << selection.c_str() << std::endl;
|
// std::cout << "selection=" << selection.c_str() << std::endl;
|
||||||
|
|
||||||
race_manager->setLocalKartInfo(n, selected_kart);
|
race_manager->setLocalKartInfo(n, selected_kart);
|
||||||
|
race_manager->setPlayerDifficulty(n,
|
||||||
|
(PerPlayerDifficulty) m_kart_widgets[n].m_difficulty->getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---- Switch to assign mode
|
// ---- Switch to assign mode
|
||||||
|
@ -48,6 +48,7 @@ class KartSelectionScreen : public GUIEngine::Screen
|
|||||||
friend class KartHoverListener;
|
friend class KartHoverListener;
|
||||||
friend class PlayerNameSpinner;
|
friend class PlayerNameSpinner;
|
||||||
friend class FocusDispatcher;
|
friend class FocusDispatcher;
|
||||||
|
friend class FocusDispatcher2;
|
||||||
protected:
|
protected:
|
||||||
/** Contains the custom widget shown for every player. (ref only since
|
/** Contains the custom widget shown for every player. (ref only since
|
||||||
* we're adding them to a Screen, and the Screen will take ownership
|
* we're adding them to a Screen, and the Screen will take ownership
|
||||||
@ -172,6 +173,7 @@ public:
|
|||||||
way?) */
|
way?) */
|
||||||
class FocusDispatcher : public GUIEngine::Widget
|
class FocusDispatcher : public GUIEngine::Widget
|
||||||
{
|
{
|
||||||
|
protected:
|
||||||
KartSelectionScreen* m_parent;
|
KartSelectionScreen* m_parent;
|
||||||
int m_reserved_id;
|
int m_reserved_id;
|
||||||
|
|
||||||
@ -194,6 +196,13 @@ public:
|
|||||||
virtual GUIEngine::EventPropagation focused(const int playerID);
|
virtual GUIEngine::EventPropagation focused(const int playerID);
|
||||||
}; // FocusDispatcher
|
}; // FocusDispatcher
|
||||||
|
|
||||||
|
class FocusDispatcher2 : public FocusDispatcher
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FocusDispatcher2(KartSelectionScreen *parent);
|
||||||
|
|
||||||
|
virtual GUIEngine::EventPropagation focused(const int playerID);
|
||||||
|
};
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------
|
//!----------------------------------------------------------------------------
|
||||||
//! KartHoverListener :
|
//! KartHoverListener :
|
||||||
|
Loading…
x
Reference in New Issue
Block a user