Cleaning up kart selection. Assigns karts correctly in multiplayer. included some null pointer and bounds checks that were causing some
crashes, etc. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3856 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
3119dec5c2
commit
7a84273ec5
@ -534,6 +534,10 @@ void NetworkManager::worldLoaded()
|
|||||||
*/
|
*/
|
||||||
void NetworkManager::setupPlayerKartInfo()
|
void NetworkManager::setupPlayerKartInfo()
|
||||||
{
|
{
|
||||||
|
// Not sure if this should be here, but without it extra uncontrolled
|
||||||
|
// human players accumulate after each race.
|
||||||
|
m_kart_info.clear();
|
||||||
|
|
||||||
// Get the local kart info
|
// Get the local kart info
|
||||||
for(unsigned int i=0; i<race_manager->getNumLocalPlayers(); i++)
|
for(unsigned int i=0; i<race_manager->getNumLocalPlayers(); i++)
|
||||||
m_kart_info.push_back(race_manager->getLocalKartInfo(i));
|
m_kart_info.push_back(race_manager->getLocalKartInfo(i));
|
||||||
|
@ -152,7 +152,7 @@ namespace KartSelectionScreen
|
|||||||
this->modelView->addModel( kartModel->getWheelModel(3), kartModel->getWheelGraphicsPosition(3) );
|
this->modelView->addModel( kartModel->getWheelModel(3), kartModel->getWheelGraphicsPosition(3) );
|
||||||
|
|
||||||
kartName = new LabelWidget();
|
kartName = new LabelWidget();
|
||||||
kartName->m_properties[PROP_TEXT] = _("Tux");
|
kartName->m_properties[PROP_TEXT] = default_kart;
|
||||||
kartName->m_properties[PROP_TEXT_ALIGN] = "center";
|
kartName->m_properties[PROP_TEXT_ALIGN] = "center";
|
||||||
kartName->m_properties[PROP_ID] = StringUtils::insert_values("@p%i_kartname", playerID);
|
kartName->m_properties[PROP_ID] = StringUtils::insert_values("@p%i_kartname", playerID);
|
||||||
kartName->x = kart_name_x;
|
kartName->x = kart_name_x;
|
||||||
@ -409,6 +409,7 @@ class KartHoverListener : public RibbonGridHoverListener
|
|||||||
ModelViewWidget* w3 = g_player_karts[pKartIndex].modelView;
|
ModelViewWidget* w3 = g_player_karts[pKartIndex].modelView;
|
||||||
assert( w3 != NULL );
|
assert( w3 != NULL );
|
||||||
|
|
||||||
|
printf("%s\n", selectionID.c_str());
|
||||||
const KartProperties* kart = kart_properties_manager->getKart(selectionID);
|
const KartProperties* kart = kart_properties_manager->getKart(selectionID);
|
||||||
if(kart == NULL) return;
|
if(kart == NULL) return;
|
||||||
KartModel* kartModel = kart->getKartModel();
|
KartModel* kartModel = kart->getKartModel();
|
||||||
@ -421,8 +422,8 @@ class KartHoverListener : public RibbonGridHoverListener
|
|||||||
w3->addModel( kartModel->getWheelModel(3), kartModel->getWheelGraphicsPosition(3) );
|
w3->addModel( kartModel->getWheelModel(3), kartModel->getWheelGraphicsPosition(3) );
|
||||||
w3->update(0);
|
w3->update(0);
|
||||||
|
|
||||||
|
g_player_karts[pKartIndex].kartName->m_properties[PROP_TEXT] = selectionID;
|
||||||
g_player_karts[pKartIndex].kartName->setText( kart->getName().c_str() );
|
g_player_karts[pKartIndex].kartName->setText( selectionID.c_str() );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
KartHoverListener* karthoverListener = NULL;
|
KartHoverListener* karthoverListener = NULL;
|
||||||
@ -489,6 +490,13 @@ bool playerQuit(ActivePlayer* player)
|
|||||||
{
|
{
|
||||||
int playerID = -1;
|
int playerID = -1;
|
||||||
|
|
||||||
|
RibbonGridWidget* w = getCurrentScreen()->getWidget<RibbonGridWidget>("karts");
|
||||||
|
if (w == NULL )
|
||||||
|
{
|
||||||
|
std::cout << "playerQuit() called outside of kart selection screen.\n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// If last player quits, return to main menu
|
// If last player quits, return to main menu
|
||||||
if (g_player_karts.size() <= 1) return false;
|
if (g_player_karts.size() <= 1) return false;
|
||||||
|
|
||||||
@ -550,7 +558,7 @@ void menuEventKarts(Widget* widget, const std::string& name)
|
|||||||
if(name == "tearDown")
|
if(name == "tearDown")
|
||||||
{
|
{
|
||||||
//g_player_karts.clearWithoutDeleting();
|
//g_player_karts.clearWithoutDeleting();
|
||||||
//g_player_karts.clearAndDeleteAll();
|
g_player_karts.clearAndDeleteAll();
|
||||||
}
|
}
|
||||||
else if(name == "init")
|
else if(name == "init")
|
||||||
{
|
{
|
||||||
@ -650,14 +658,13 @@ void menuEventKarts(Widget* widget, const std::string& name)
|
|||||||
race_manager->setNumLocalPlayers( players.size() );
|
race_manager->setNumLocalPlayers( players.size() );
|
||||||
|
|
||||||
//g_player_karts.clearAndDeleteAll();
|
//g_player_karts.clearAndDeleteAll();
|
||||||
race_manager->setLocalKartInfo(0, w->getSelectionIDString());
|
//race_manager->setLocalKartInfo(0, w->getSelectionIDString());
|
||||||
|
for (int n = 0; n < g_player_karts.size(); n++)
|
||||||
// TODO : assign karts to other players too
|
|
||||||
for(int n=1; n<players.size(); n++)
|
|
||||||
{
|
{
|
||||||
race_manager->setLocalKartInfo(n, "tux");
|
race_manager->setLocalKartInfo(n, g_player_karts[n].kartName->m_properties[PROP_TEXT]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Return to assign mode
|
||||||
input_manager->getDeviceList()->setAssignMode(ASSIGN);
|
input_manager->getDeviceList()->setAssignMode(ASSIGN);
|
||||||
|
|
||||||
StateManager::get()->pushMenu("racesetup.stkgui");
|
StateManager::get()->pushMenu("racesetup.stkgui");
|
||||||
|
@ -249,8 +249,13 @@ void RaceGUI::drawPlayerIcons (const KartIconDisplayInfo* info)
|
|||||||
video::ITexture *icon = kart->getKartProperties()->getIconMaterial()->getTexture();
|
video::ITexture *icon = kart->getKartProperties()->getIconMaterial()->getTexture();
|
||||||
int w = kart->isPlayerKart() ? ICON_PLAYER_WIDTH : ICON_WIDTH;
|
int w = kart->isPlayerKart() ? ICON_PLAYER_WIDTH : ICON_WIDTH;
|
||||||
const core::rect<s32> pos(x, y, x+w, y+w);
|
const core::rect<s32> pos(x, y, x+w, y+w);
|
||||||
const core::rect<s32> rect(core::position2d<s32>(0,0), icon->getOriginalSize());
|
|
||||||
irr_driver->getVideoDriver()->draw2DImage(icon, pos, rect, NULL, NULL, true);
|
// Fixes crash bug, why are certain icons not showing up?
|
||||||
|
if (icon != NULL)
|
||||||
|
{
|
||||||
|
const core::rect<s32> rect(core::position2d<s32>(0,0), icon->getOriginalSize());
|
||||||
|
irr_driver->getVideoDriver()->draw2DImage(icon, pos, rect, NULL, NULL, true);
|
||||||
|
}
|
||||||
|
|
||||||
} // next kart
|
} // next kart
|
||||||
|
|
||||||
|
@ -62,7 +62,16 @@ ptr_vector<ActivePlayer, HOLD>& StateManager::getActivePlayers()
|
|||||||
}
|
}
|
||||||
ActivePlayer* StateManager::getActivePlayer(const int id)
|
ActivePlayer* StateManager::getActivePlayer(const int id)
|
||||||
{
|
{
|
||||||
return m_active_players.get(id);
|
ActivePlayer *returnPlayer = NULL;
|
||||||
|
if (id < m_active_players.size() && id >= 0)
|
||||||
|
{
|
||||||
|
returnPlayer = m_active_players.get(id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "getActivePlayer(): id out of bounds\n");
|
||||||
|
}
|
||||||
|
return returnPlayer;
|
||||||
}
|
}
|
||||||
void StateManager::addActivePlayer(ActivePlayer* p)
|
void StateManager::addActivePlayer(ActivePlayer* p)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user