Started implementing GP info dialog
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@4699 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
a2f03f2a0b
commit
cc4e1357ba
@ -262,16 +262,18 @@ supertuxkart_SOURCES = \
|
||||
states_screens/dialogs/confirm_resolution_dialog.hpp \
|
||||
states_screens/dialogs/enter_player_name_dialog.cpp \
|
||||
states_screens/dialogs/enter_player_name_dialog.hpp \
|
||||
states_screens/dialogs/gp_info_dialog.cpp \
|
||||
states_screens/dialogs/gp_info_dialog.hpp \
|
||||
states_screens/dialogs/player_info_dialog.hpp \
|
||||
states_screens/dialogs/press_a_key_dialog.hpp \
|
||||
states_screens/dialogs/track_info_dialog.cpp \
|
||||
states_screens/dialogs/track_info_dialog.hpp \
|
||||
states_screens/dialogs/player_info_dialog.cpp \
|
||||
states_screens/dialogs/press_a_key_dialog.hpp \
|
||||
states_screens/dialogs/press_a_key_dialog.cpp \
|
||||
states_screens/dialogs/race_over_dialog.cpp \
|
||||
states_screens/dialogs/race_over_dialog.hpp \
|
||||
states_screens/dialogs/race_paused_dialog.hpp \
|
||||
states_screens/dialogs/race_paused_dialog.cpp \
|
||||
states_screens/dialogs/track_info_dialog.cpp \
|
||||
states_screens/dialogs/track_info_dialog.hpp \
|
||||
states_screens/arenas_screen.cpp \
|
||||
states_screens/arenas_screen.hpp \
|
||||
states_screens/feature_unlocked.cpp \
|
||||
|
@ -242,6 +242,7 @@
|
||||
9553823A10FD4FEC00737979 /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9553823910FD4FEC00737979 /* constants.cpp */; };
|
||||
955DE88310042701006A4F3C /* check_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955DE88110042701006A4F3C /* check_manager.cpp */; };
|
||||
955DE88C1004273B006A4F3C /* check_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955DE8871004273B006A4F3C /* check_structure.cpp */; };
|
||||
95634EF21126272C009C145D /* gp_info_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95634EF01126272C009C145D /* gp_info_dialog.cpp */; };
|
||||
956541BB10DD5F0A00C83E99 /* arenas_screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956541B910DD5F0A00C83E99 /* arenas_screen.cpp */; };
|
||||
956541E110DD628C00C83E99 /* add_device_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956541DF10DD628C00C83E99 /* add_device_dialog.cpp */; };
|
||||
956D36A710095035007FCB95 /* player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956D36A610095035007FCB95 /* player.cpp */; };
|
||||
@ -436,6 +437,8 @@
|
||||
955DE88210042701006A4F3C /* check_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = check_manager.hpp; path = ../../tracks/check_manager.hpp; sourceTree = SOURCE_ROOT; };
|
||||
955DE8871004273B006A4F3C /* check_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = check_structure.cpp; path = ../../tracks/check_structure.cpp; sourceTree = SOURCE_ROOT; };
|
||||
955DE8881004273B006A4F3C /* check_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = check_structure.hpp; path = ../../tracks/check_structure.hpp; sourceTree = SOURCE_ROOT; };
|
||||
95634EF01126272C009C145D /* gp_info_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gp_info_dialog.cpp; path = ../../states_screens/dialogs/gp_info_dialog.cpp; sourceTree = SOURCE_ROOT; };
|
||||
95634EF11126272C009C145D /* gp_info_dialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = gp_info_dialog.hpp; path = ../../states_screens/dialogs/gp_info_dialog.hpp; sourceTree = SOURCE_ROOT; };
|
||||
956541B910DD5F0A00C83E99 /* arenas_screen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = arenas_screen.cpp; path = ../../states_screens/arenas_screen.cpp; sourceTree = SOURCE_ROOT; };
|
||||
956541BA10DD5F0A00C83E99 /* arenas_screen.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = arenas_screen.hpp; path = ../../states_screens/arenas_screen.hpp; sourceTree = SOURCE_ROOT; };
|
||||
956541DF10DD628C00C83E99 /* add_device_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = add_device_dialog.cpp; path = ../../states_screens/dialogs/add_device_dialog.cpp; sourceTree = SOURCE_ROOT; };
|
||||
@ -1325,6 +1328,8 @@
|
||||
95E246BD111A2959000C965D /* confirm_resolution_dialog.hpp */,
|
||||
95833237101243ED00C5137E /* enter_player_name_dialog.cpp */,
|
||||
95833238101243ED00C5137E /* enter_player_name_dialog.hpp */,
|
||||
95634EF01126272C009C145D /* gp_info_dialog.cpp */,
|
||||
95634EF11126272C009C145D /* gp_info_dialog.hpp */,
|
||||
95833239101243ED00C5137E /* player_info_dialog.cpp */,
|
||||
9583323A101243ED00C5137E /* player_info_dialog.hpp */,
|
||||
9583323B101243ED00C5137E /* press_a_key_dialog.cpp */,
|
||||
@ -2599,6 +2604,7 @@
|
||||
95DFC5021106933B00A043A9 /* slip_stream.cpp in Sources */,
|
||||
95E246BE111A2959000C965D /* confirm_resolution_dialog.cpp in Sources */,
|
||||
9574F17C11206881008D202E /* world_status.cpp in Sources */,
|
||||
95634EF21126272C009C145D /* gp_info_dialog.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
169
src/states_screens/dialogs/gp_info_dialog.cpp
Normal file
169
src/states_screens/dialogs/gp_info_dialog.cpp
Normal file
@ -0,0 +1,169 @@
|
||||
// SuperTuxKart - a fun racing game with go-kart
|
||||
// Copyright (C) 2009 Marianne Gagnon
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; either version 3
|
||||
// of the License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
#include "guiengine/engine.hpp"
|
||||
#include "guiengine/screen.hpp"
|
||||
#include "guiengine/widget.hpp"
|
||||
#include "race/grand_prix_manager.hpp"
|
||||
#include "race/race_manager.hpp"
|
||||
#include "states_screens/dialogs/gp_info_dialog.hpp"
|
||||
#include "states_screens/state_manager.hpp"
|
||||
#include "states_screens/tracks_screen.hpp"
|
||||
#include "utils/translation.hpp"
|
||||
|
||||
|
||||
#include "irrlicht.h"
|
||||
|
||||
using namespace irr::gui;
|
||||
using namespace irr::video;
|
||||
using namespace irr::core;
|
||||
using namespace GUIEngine;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------
|
||||
|
||||
GPInfoDialog::GPInfoDialog(const std::string& gpIdent, const float w, const float h) : ModalDialog(w, h)
|
||||
{
|
||||
const int y1 = m_area.getHeight()/7;
|
||||
const int y2 = m_area.getHeight()*5/7;
|
||||
const int y3 = m_area.getHeight()*6/7;
|
||||
|
||||
m_gp_ident = gpIdent;
|
||||
|
||||
const GrandPrixData* gp = grand_prix_manager->getGrandPrix(gpIdent);
|
||||
if (gp == NULL)
|
||||
{
|
||||
assert(false);
|
||||
std::cerr << "ERROR at " << __FILE__ << " : " << __LINE__ << "; trying to continue\n";
|
||||
ModalDialog::dismiss();
|
||||
return;
|
||||
}
|
||||
|
||||
// ---- GP Name
|
||||
core::rect< s32 > area_top(0, 0, m_area.getWidth(), y1);
|
||||
IGUIStaticText* title = GUIEngine::getGUIEnv()->addStaticText( gp->getName().c_str(),
|
||||
area_top, false, true, // border, word warp
|
||||
m_irrlicht_window);
|
||||
title->setTabStop(false);
|
||||
title->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER);
|
||||
|
||||
|
||||
/*
|
||||
// ---- Track screenshot
|
||||
IconButtonWidget* screenshotWidget = new IconButtonWidget(IconButtonWidget::SCALE_MODE_KEEP_CUSTOM_ASPECT_RATIO,
|
||||
false, false);
|
||||
// images are saved squared, but must be stretched to 4:
|
||||
screenshotWidget->setCustomAspectRatio(4.0f / 3.0f); 3
|
||||
core::rect< s32 > area_right(m_area.getWidth()/2, y1, m_area.getWidth(), y2-10);
|
||||
|
||||
screenshotWidget->x = area_right.UpperLeftCorner.X;
|
||||
screenshotWidget->y = area_right.UpperLeftCorner.Y;
|
||||
screenshotWidget->w = area_right.getWidth();
|
||||
screenshotWidget->h = area_right.getHeight();
|
||||
|
||||
// temporary icon, will replace it just after
|
||||
screenshotWidget->m_properties[PROP_ICON] = "gui/main_help.png";
|
||||
screenshotWidget->setParent(m_irrlicht_window);
|
||||
screenshotWidget->add();
|
||||
screenshotWidget->setImage(screenshot);
|
||||
m_children.push_back(screenshotWidget);
|
||||
|
||||
a->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER);
|
||||
b->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER);
|
||||
*/
|
||||
|
||||
// ---- Start button
|
||||
ButtonWidget* okBtn = new ButtonWidget();
|
||||
okBtn->m_properties[PROP_ID] = "start";
|
||||
okBtn->m_text = _("Start Grand Prix");
|
||||
okBtn->x = m_area.getWidth()/2 - 200;
|
||||
okBtn->y = y3;
|
||||
okBtn->w = 400;
|
||||
okBtn->h = m_area.getHeight() - y3 - 15;
|
||||
okBtn->setParent(m_irrlicht_window);
|
||||
m_children.push_back(okBtn);
|
||||
okBtn->add();
|
||||
okBtn->getIrrlichtElement()->setTabStop(true);
|
||||
okBtn->getIrrlichtElement()->setTabGroup(false);
|
||||
|
||||
okBtn->setFocusForPlayer( GUI_PLAYER_ID );
|
||||
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------
|
||||
|
||||
GPInfoDialog::~GPInfoDialog()
|
||||
{
|
||||
// Place focus back on selected GP, in case the dialog was cancelled and we're back to
|
||||
// the track selection screen after
|
||||
Screen* curr_screen = GUIEngine::getCurrentScreen();
|
||||
if (curr_screen->getName() == "tracks.stkgui")
|
||||
{
|
||||
((TracksScreen*)curr_screen)->setFocusOnGP(m_gp_ident);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------
|
||||
|
||||
// FIXME : this probably doesn't belong here
|
||||
void startGPGame(const GrandPrixData* gp)
|
||||
{
|
||||
assert(gp != NULL);
|
||||
ModalDialog::dismiss();
|
||||
|
||||
IVideoDriver* driver = GUIEngine::getDriver();
|
||||
|
||||
//TODO?: draw a loading screen
|
||||
driver->endScene();
|
||||
driver->beginScene(true, false);
|
||||
driver->endScene();
|
||||
|
||||
|
||||
StateManager::get()->enterGameState();
|
||||
//race_manager->setDifficulty(RaceManager::RD_HARD);
|
||||
race_manager->setGrandPrix(*gp);
|
||||
race_manager->setCoinTarget( 0 ); // Might still be set from a previous challenge
|
||||
//race_manager->setNumKarts( 1 );
|
||||
//network_manager->setupPlayerKartInfo();
|
||||
//race_manager->getKartType(1) = KT_PLAYER;
|
||||
|
||||
race_manager->startNew();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------
|
||||
|
||||
void GPInfoDialog::onEnterPressedInternal()
|
||||
{
|
||||
startGPGame(grand_prix_manager->getGrandPrix(m_gp_ident));
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------
|
||||
|
||||
GUIEngine::EventPropagation GPInfoDialog::processEvent(std::string& eventSource)
|
||||
{
|
||||
if (eventSource == "start" )
|
||||
{
|
||||
startGPGame(grand_prix_manager->getGrandPrix(m_gp_ident));
|
||||
return GUIEngine::EVENT_BLOCK;
|
||||
}
|
||||
|
||||
return GUIEngine::EVENT_LET;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------------
|
40
src/states_screens/dialogs/gp_info_dialog.hpp
Normal file
40
src/states_screens/dialogs/gp_info_dialog.hpp
Normal file
@ -0,0 +1,40 @@
|
||||
// SuperTuxKart - a fun racing game with go-kart
|
||||
// Copyright (C) 2009 Marianne Gagnon
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; either version 3
|
||||
// of the License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
#ifndef HEADER_GP_INFO_DIALOG_HPP
|
||||
#define HEADER_GP_INFO_DIALOG_HPP
|
||||
|
||||
#include "guiengine/modaldialog.hpp"
|
||||
|
||||
class GPInfoDialog : public GUIEngine::ModalDialog
|
||||
{
|
||||
std::string m_gp_ident;
|
||||
|
||||
|
||||
public:
|
||||
/**
|
||||
* Creates a modal dialog with given percentage of screen width and height
|
||||
*/
|
||||
GPInfoDialog(const std::string& gpIdent, const float percentWidth, const float percentHeight);
|
||||
virtual ~GPInfoDialog();
|
||||
|
||||
void onEnterPressedInternal();
|
||||
GUIEngine::EventPropagation processEvent(std::string& eventSource);
|
||||
};
|
||||
|
||||
#endif
|
@ -82,7 +82,7 @@ TrackInfoDialog::TrackInfoDialog(const std::string& trackIdent, const irr::core:
|
||||
IconButtonWidget* screenshotWidget = new IconButtonWidget(IconButtonWidget::SCALE_MODE_KEEP_CUSTOM_ASPECT_RATIO,
|
||||
false, false);
|
||||
// images are saved squared, but must be stretched to 4:
|
||||
screenshotWidget->setCustomAspectRatio(4.0f / 3.0f); 3
|
||||
screenshotWidget->setCustomAspectRatio(4.0f / 3.0f);
|
||||
core::rect< s32 > area_right(m_area.getWidth()/2, y1, m_area.getWidth(), y2-10);
|
||||
|
||||
screenshotWidget->x = area_right.UpperLeftCorner.X;
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "race/grand_prix_manager.hpp"
|
||||
#include "states_screens/state_manager.hpp"
|
||||
#include "states_screens/tracks_screen.hpp"
|
||||
#include "states_screens/dialogs/gp_info_dialog.hpp"
|
||||
#include "states_screens/dialogs/track_info_dialog.hpp"
|
||||
#include "tracks/track.hpp"
|
||||
#include "tracks/track_manager.hpp"
|
||||
@ -33,7 +34,7 @@ using namespace irr::video;
|
||||
|
||||
const char* ALL_TRACK_GROUPS_ID = "all";
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------------------------
|
||||
|
||||
TracksScreen::TracksScreen() : Screen("tracks.stkgui")
|
||||
{
|
||||
@ -62,7 +63,7 @@ TracksScreen::TracksScreen() : Screen("tracks.stkgui")
|
||||
tabs->m_children.push_back(item);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------------------------
|
||||
|
||||
void TracksScreen::eventCallback(Widget* widget, const std::string& name, const int playerID)
|
||||
{
|
||||
@ -101,20 +102,24 @@ void TracksScreen::eventCallback(Widget* widget, const std::string& name, const
|
||||
}
|
||||
else if (name == "gps")
|
||||
{
|
||||
RibbonWidget* tracks_widget = dynamic_cast<RibbonWidget*>(widget);
|
||||
if (tracks_widget != NULL)
|
||||
DynamicRibbonWidget* gps_widget = dynamic_cast<DynamicRibbonWidget*>(widget);
|
||||
if (gps_widget != NULL)
|
||||
{
|
||||
//TODO
|
||||
std::cout << "Clicked on GrandPrix "
|
||||
<< tracks_widget->getSelectionIDString(GUI_PLAYER_ID).c_str()
|
||||
<< std::endl;
|
||||
<< gps_widget->getSelectionIDString(GUI_PLAYER_ID).c_str()
|
||||
<< std::endl;
|
||||
|
||||
new GPInfoDialog( gps_widget->getSelectionIDString(GUI_PLAYER_ID), 0.8f, 0.7f );
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// -----------------------------------------------------------------------------------------------
|
||||
|
||||
void TracksScreen::init()
|
||||
{
|
||||
@ -197,13 +202,13 @@ void TracksScreen::init()
|
||||
tracks_widget->updateItemDisplay();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------------------------
|
||||
|
||||
void TracksScreen::tearDown()
|
||||
{
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------------------------
|
||||
|
||||
void TracksScreen::setFocusOnTrack(const std::string& trackName)
|
||||
{
|
||||
@ -214,5 +219,16 @@ void TracksScreen::setFocusOnTrack(const std::string& trackName)
|
||||
tracks_widget->setSelection(trackName, 0, true);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------------------------
|
||||
|
||||
void TracksScreen::setFocusOnGP(const std::string& gpName)
|
||||
{
|
||||
DynamicRibbonWidget* gps_widget = this->getWidget<DynamicRibbonWidget>("gps");
|
||||
assert( gps_widget != NULL );
|
||||
|
||||
// FIXME: don't hardcode player 0?
|
||||
gps_widget->setSelection(gpName, 0, true);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------
|
||||
|
||||
|
@ -35,6 +35,8 @@ public:
|
||||
void tearDown();
|
||||
|
||||
void setFocusOnTrack(const std::string& trackName);
|
||||
void setFocusOnGP(const std::string& gpName);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user