From b63935ee83a5f5110219dfdb5a0c0fa486c9eb1e Mon Sep 17 00:00:00 2001 From: auria Date: Sun, 19 Jul 2009 00:51:14 +0000 Subject: [PATCH] How many files can I forget in a commit? git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3772 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- .../dialogs/enter_player_name_dialog.cpp | 113 +++++++++ .../dialogs/enter_player_name_dialog.hpp | 45 ++++ .../dialogs/player_info_dialog.cpp | 223 ++++++++++++++++++ .../dialogs/player_info_dialog.hpp | 48 ++++ .../dialogs/press_a_key_dialog.cpp | 65 +++++ .../dialogs/press_a_key_dialog.hpp | 34 +++ .../dialogs/track_info_dialog.cpp | 132 +++++++++++ .../dialogs/track_info_dialog.hpp | 35 +++ 8 files changed, 695 insertions(+) create mode 100644 src/states_screens/dialogs/enter_player_name_dialog.cpp create mode 100644 src/states_screens/dialogs/enter_player_name_dialog.hpp create mode 100644 src/states_screens/dialogs/player_info_dialog.cpp create mode 100644 src/states_screens/dialogs/player_info_dialog.hpp create mode 100644 src/states_screens/dialogs/press_a_key_dialog.cpp create mode 100644 src/states_screens/dialogs/press_a_key_dialog.hpp create mode 100644 src/states_screens/dialogs/track_info_dialog.cpp create mode 100644 src/states_screens/dialogs/track_info_dialog.hpp diff --git a/src/states_screens/dialogs/enter_player_name_dialog.cpp b/src/states_screens/dialogs/enter_player_name_dialog.cpp new file mode 100644 index 000000000..1b870b512 --- /dev/null +++ b/src/states_screens/dialogs/enter_player_name_dialog.cpp @@ -0,0 +1,113 @@ +// 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/widget.hpp" +#include "states_screens/dialogs/enter_player_name_dialog.hpp" +#include "states_screens/options_screen.hpp" +#include "utils/translation.hpp" + +using namespace GUIEngine; + +EnterPlayerNameDialog::EnterPlayerNameDialog(const float w, const float h) : + ModalDialog(w, h) +{ + //core::rect< s32 > area_top(0, 0, m_area.getWidth(), m_area.getHeight()/2); + //IGUIStaticText* label = GUIEngine::getGUIEnv()->addStaticText( stringw(_("Enter the new player's name")).c_str(), + // area_top, false /* border */, true /* word wrap */, + // m_irrlicht_window); + // label->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); + + LabelWidget* widget = new LabelWidget(); + widget->m_properties[PROP_TEXT] = _("Enter the new player's name"); + widget->m_properties[PROP_TEXT_ALIGN] = "center"; + widget->x = 0; + widget->y = 0; + widget->w = m_area.getWidth(); + widget->h = m_area.getHeight()/3; + widget->setParent(m_irrlicht_window); + + m_children.push_back(widget); + widget->add(); + + // ---- + + IGUIFont* font = GUIEngine::getFont(); + const int textHeight = font->getDimension(L"X").Height; + + const int textAreaYFrom = m_area.getHeight()/2 - textHeight/2; + + textCtrl = new TextBoxWidget(); + textCtrl->m_properties[PROP_TEXT] = ""; + textCtrl->x = 50; + textCtrl->y = textAreaYFrom - 10; + textCtrl->w = m_area.getWidth()-100; + textCtrl->h = textHeight + 5; + textCtrl->setParent(m_irrlicht_window); + m_children.push_back(textCtrl); + textCtrl->add(); + GUIEngine::getGUIEnv()->setFocus( textCtrl->getIrrlichtElement() ); + + // TODO : add Ok button + + cancelButton = new ButtonWidget(); + cancelButton->m_properties[PROP_ID] = "cancel"; + cancelButton->m_properties[PROP_TEXT] = _("Cancel"); + cancelButton->x = 15; + cancelButton->y = m_area.getHeight() - textHeight - 12; + cancelButton->w = m_area.getWidth() - 30; + cancelButton->h = textHeight + 6; + cancelButton->setParent(m_irrlicht_window); + + m_children.push_back(cancelButton); + cancelButton->add(); + +} +EnterPlayerNameDialog::~EnterPlayerNameDialog() +{ + textCtrl->getIrrlichtElement()->remove(); +} +void EnterPlayerNameDialog::processEvent(std::string& eventSource) +{ + if(eventSource == "cancel") + { + dismiss(); + return; + } +} +void EnterPlayerNameDialog::onEnterPressedInternal() +{ + // ---- Cancel button pressed + if( GUIEngine::getGUIEnv()->hasFocus(cancelButton->getIrrlichtElement()) ) + { + std::string fakeEvent = "cancel"; + processEvent(fakeEvent); + return; + } + + // ---- Otherwise, accept entered name + stringw playerName = textCtrl->getText(); + if(playerName.size() > 0) + OptionsScreen::gotNewPlayerName( playerName ); + + // irrLicht is too stupid to remove focus from deleted widgets + // so do it by hand + GUIEngine::getGUIEnv()->removeFocus( textCtrl->getIrrlichtElement() ); + GUIEngine::getGUIEnv()->removeFocus( m_irrlicht_window ); + + ModalDialog::dismiss(); +} diff --git a/src/states_screens/dialogs/enter_player_name_dialog.hpp b/src/states_screens/dialogs/enter_player_name_dialog.hpp new file mode 100644 index 000000000..8842ebfa1 --- /dev/null +++ b/src/states_screens/dialogs/enter_player_name_dialog.hpp @@ -0,0 +1,45 @@ +// 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_ENTERPLAYERNAME_DIALOG_HPP +#define HEADER_ENTERPLAYERNAME_DIALOG_HPP + +#include "guiengine/modaldialog.hpp" + +namespace GUIEngine +{ + class TextBoxWidget; + class ButtonWidget; +} + +class EnterPlayerNameDialog : public GUIEngine::ModalDialog +{ + GUIEngine::TextBoxWidget* textCtrl; + GUIEngine::ButtonWidget* cancelButton; +public: + /** + * Creates a modal dialog with given percentage of screen width and height + */ + EnterPlayerNameDialog(const float percentWidth, const float percentHeight); + ~EnterPlayerNameDialog(); + + void onEnterPressedInternal(); + void processEvent(std::string& eventSource); +}; + +#endif diff --git a/src/states_screens/dialogs/player_info_dialog.cpp b/src/states_screens/dialogs/player_info_dialog.cpp new file mode 100644 index 000000000..7ec938968 --- /dev/null +++ b/src/states_screens/dialogs/player_info_dialog.cpp @@ -0,0 +1,223 @@ +// 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 "config/player.hpp" +#include "guiengine/engine.hpp" +#include "guiengine/widget.hpp" +#include "states_screens/options_screen.hpp" +#include "states_screens/dialogs/player_info_dialog.hpp" +#include "utils/translation.hpp" + +using namespace GUIEngine; + + +PlayerInfoDialog::PlayerInfoDialog(PlayerProfile* player, const float w, const float h) : ModalDialog(w, h) +{ + m_player = player; + + showRegularDialog(); +} +void PlayerInfoDialog::showRegularDialog() +{ + clearWindow(); + + const int y1 = m_area.getHeight()/6; + const int y2 = m_area.getHeight()*2/6; + const int y3 = m_area.getHeight()*3/6; + const int y4 = m_area.getHeight()*5/6; + + IGUIFont* font = GUIEngine::getFont(); + const int textHeight = font->getDimension(L"X").Height; + const int buttonHeight = textHeight + 10; + + { + textCtrl = new TextBoxWidget(); + textCtrl->m_properties[PROP_ID] = "renameplayer"; + textCtrl->m_properties[PROP_TEXT] = m_player->getName(); + textCtrl->x = 50; + textCtrl->y = y1 - textHeight/2; + textCtrl->w = m_area.getWidth()-100; + textCtrl->h = textHeight + 5; + textCtrl->setParent(m_irrlicht_window); + m_children.push_back(textCtrl); + textCtrl->add(); + GUIEngine::getGUIEnv()->setFocus( textCtrl->getIrrlichtElement() ); + } + + { + ButtonWidget* widget = new ButtonWidget(); + widget->m_properties[PROP_ID] = "renameplayer"; + widget->m_properties[PROP_TEXT] = _("Rename"); + + const int textWidth = font->getDimension( stringw(widget->m_properties[PROP_TEXT].c_str()).c_str() ).Width + 40; + + widget->x = m_area.getWidth()/2 - textWidth/2; + widget->y = y2; + widget->w = textWidth; + widget->h = buttonHeight; + widget->setParent(m_irrlicht_window); + m_children.push_back(widget); + widget->add(); + } + { + ButtonWidget* widget = new ButtonWidget(); + widget->m_properties[PROP_ID] = "cancel"; + widget->m_properties[PROP_TEXT] = _("Cancel"); + + const int textWidth = font->getDimension( stringw(widget->m_properties[PROP_TEXT].c_str()).c_str() ).Width + 40; + + widget->x = m_area.getWidth()/2 - textWidth/2; + widget->y = y3; + widget->w = textWidth; + widget->h = buttonHeight; + widget->setParent(m_irrlicht_window); + m_children.push_back(widget); + widget->add(); + } + + { + ButtonWidget* widget = new ButtonWidget(); + widget->m_properties[PROP_ID] = "removeplayer"; + widget->m_properties[PROP_TEXT] = _("Remove"); + + const int textWidth = font->getDimension( stringw(widget->m_properties[PROP_TEXT].c_str()).c_str() ).Width + 40; + + widget->x = m_area.getWidth()/2 - textWidth/2; + widget->y = y4; + widget->w = textWidth; + widget->h = buttonHeight; + widget->setParent(m_irrlicht_window); + m_children.push_back(widget); + widget->add(); + } + +} + +void PlayerInfoDialog::showConfirmDialog() +{ + clearWindow(); + + + IGUIFont* font = GUIEngine::getFont(); + const int textHeight = font->getDimension(L"X").Height; + const int buttonHeight = textHeight + 10; + + + char message[256]; + sprintf(message, _("Do you really want to delete player '%s' ?"), m_player->getName()); + + core::rect< s32 > area_left(5, 0, m_area.getWidth()-5, m_area.getHeight()/2); + IGUIStaticText* a = GUIEngine::getGUIEnv()->addStaticText( stringw(message).c_str(), + area_left, false /* border */, true /* word wrap */, + m_irrlicht_window); + a->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); + + { + ButtonWidget* widget = new ButtonWidget(); + widget->m_properties[PROP_ID] = "confirmremove"; + widget->m_properties[PROP_TEXT] = _("Confirm Remove"); + + const int textWidth = font->getDimension( stringw(widget->m_properties[PROP_TEXT].c_str()).c_str() ).Width + 40; + + widget->x = m_area.getWidth()/2 - textWidth/2; + widget->y = m_area.getHeight()/2; + widget->w = textWidth; + widget->h = buttonHeight; + widget->setParent(m_irrlicht_window); + m_children.push_back(widget); + widget->add(); + } + + { + ButtonWidget* widget = new ButtonWidget(); + widget->m_properties[PROP_ID] = "cancelremove"; + widget->m_properties[PROP_TEXT] = _("Cancel Remove"); + + const int textWidth = font->getDimension( stringw(widget->m_properties[PROP_TEXT].c_str()).c_str() ).Width + 40; + + widget->x = m_area.getWidth()/2 - textWidth/2; + widget->y = m_area.getHeight()*3/4; + widget->w = textWidth; + widget->h = buttonHeight; + widget->setParent(m_irrlicht_window); + m_children.push_back(widget); + widget->add(); + GUIEngine::getGUIEnv()->setFocus( widget->getIrrlichtElement() ); + + } + +} + +void PlayerInfoDialog::onEnterPressedInternal() +{ +} +void PlayerInfoDialog::processEvent(std::string& eventSource) +{ + if(eventSource == "renameplayer") + { + // accept entered name + stringw playerName = textCtrl->getText(); + if(playerName.size() > 0) + { + OptionsScreen::gotNewPlayerName( playerName, m_player ); + } + + // irrLicht is too stupid to remove focus from deleted widgets + // so do it by hand + GUIEngine::getGUIEnv()->removeFocus( textCtrl->getIrrlichtElement() ); + GUIEngine::getGUIEnv()->removeFocus( m_irrlicht_window ); + + ModalDialog::dismiss(); + + dismiss(); + return; + } + else if(eventSource == "removeplayer") + { + showConfirmDialog(); + } + else if(eventSource == "confirmremove") + { + OptionsScreen::deletePlayer( m_player ); + + // irrLicht is too stupid to remove focus from deleted widgets + // so do it by hand + GUIEngine::getGUIEnv()->removeFocus( textCtrl->getIrrlichtElement() ); + GUIEngine::getGUIEnv()->removeFocus( m_irrlicht_window ); + + ModalDialog::dismiss(); + + return; + } + else if(eventSource == "cancelremove") + { + showRegularDialog(); + } + else if(eventSource == "cancel") + { + // irrLicht is too stupid to remove focus from deleted widgets + // so do it by hand + GUIEngine::getGUIEnv()->removeFocus( textCtrl->getIrrlichtElement() ); + GUIEngine::getGUIEnv()->removeFocus( m_irrlicht_window ); + + ModalDialog::dismiss(); + + return; + } + +} diff --git a/src/states_screens/dialogs/player_info_dialog.hpp b/src/states_screens/dialogs/player_info_dialog.hpp new file mode 100644 index 000000000..1a171e1d1 --- /dev/null +++ b/src/states_screens/dialogs/player_info_dialog.hpp @@ -0,0 +1,48 @@ +// 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_PLAYERINFO_DIALOG_HPP +#define HEADER_PLAYERINFO_DIALOG_HPP + +#include "config/player.hpp" +#include "guiengine/modaldialog.hpp" + +namespace GUIEngine +{ + class TextBoxWidget; +} + +class PlayerInfoDialog : public GUIEngine::ModalDialog +{ + GUIEngine::TextBoxWidget* textCtrl; + PlayerProfile* m_player; + + void showRegularDialog(); + void showConfirmDialog(); +public: + /** + * Creates a modal dialog with given percentage of screen width and height + */ + PlayerInfoDialog(PlayerProfile* PlayerInfoDialog, + const float percentWidth, const float percentHeight); + void onEnterPressedInternal(); + void processEvent(std::string& eventSource); +}; + + +#endif diff --git a/src/states_screens/dialogs/press_a_key_dialog.cpp b/src/states_screens/dialogs/press_a_key_dialog.cpp new file mode 100644 index 000000000..4f5fbdb06 --- /dev/null +++ b/src/states_screens/dialogs/press_a_key_dialog.cpp @@ -0,0 +1,65 @@ +// 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/widget.hpp" +#include "input/input_manager.hpp" +#include "states_screens/dialogs/press_a_key_dialog.hpp" +#include "utils/translation.hpp" + +using namespace GUIEngine; + +PressAKeyDialog::PressAKeyDialog(const float w, const float h) : + ModalDialog(w, h) +{ + LabelWidget* widget = new LabelWidget(); + widget->m_properties[PROP_TEXT] = _("Press a key"); + widget->m_properties[PROP_TEXT_ALIGN] = "center"; + widget->x = 0; + widget->y = 0; + widget->w = m_area.getWidth(); + widget->h = m_area.getHeight()/2; + widget->setParent(m_irrlicht_window); + + m_children.push_back(widget); + widget->add(); + + + IGUIFont* font = GUIEngine::getFont(); + const int textHeight = font->getDimension(L"X").Height; + + ButtonWidget* widget2 = new ButtonWidget(); + widget2->m_properties[PROP_ID] = "cancel"; + widget2->m_properties[PROP_TEXT] = _("Press ESC to cancel"); + widget2->x = 15; + widget2->y = m_area.getHeight() - textHeight - 12; + widget2->w = m_area.getWidth() - 30; + widget2->h = textHeight + 6; + widget2->setParent(m_irrlicht_window); + + m_children.push_back(widget2); + widget2->add(); +} +void PressAKeyDialog::processEvent(std::string& eventSource) +{ + if(eventSource == "cancel") + { + input_manager->setMode(InputManager::MENU); + dismiss(); + } +} diff --git a/src/states_screens/dialogs/press_a_key_dialog.hpp b/src/states_screens/dialogs/press_a_key_dialog.hpp new file mode 100644 index 000000000..1187a11cd --- /dev/null +++ b/src/states_screens/dialogs/press_a_key_dialog.hpp @@ -0,0 +1,34 @@ +// 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_PRESSAKEY_DIALOG_HPP +#define HEADER_PRESSAKEY_DIALOG_HPP + +#include "guiengine/modaldialog.hpp" + +class PressAKeyDialog : public GUIEngine::ModalDialog +{ +public: + /** + * Creates a modal dialog with given percentage of screen width and height + */ + PressAKeyDialog(const float percentWidth, const float percentHeight); + void processEvent(std::string& eventSource); +}; + +#endif diff --git a/src/states_screens/dialogs/track_info_dialog.cpp b/src/states_screens/dialogs/track_info_dialog.cpp new file mode 100644 index 000000000..7d90dad2b --- /dev/null +++ b/src/states_screens/dialogs/track_info_dialog.cpp @@ -0,0 +1,132 @@ +// 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/widget.hpp" +#include "network/network_manager.hpp" +#include "race/race_manager.hpp" +#include "states_screens/dialogs/track_info_dialog.hpp" +#include "states_screens/state_manager.hpp" +#include "utils/translation.hpp" + +using namespace GUIEngine; + + +TrackInfoDialog::TrackInfoDialog(const char* trackName, ITexture* screenshot, 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; + + SpinnerWidget* spinner = new SpinnerWidget(); + spinner->x = m_area.getWidth()/2 - 200; + spinner->y = y2; + spinner->w = 400; + spinner->h = y3 - y2 - 15; + spinner->setParent(m_irrlicht_window); + + spinner->m_properties[PROP_MIN_VALUE] = "1"; + spinner->m_properties[PROP_MAX_VALUE] = "99"; + spinner->m_properties[PROP_TEXT] = "%i laps"; + + m_children.push_back(spinner); + spinner->add(); + spinner->setValue(3); + spinner->getIrrlichtElement()->setTabStop(true); + spinner->getIrrlichtElement()->setTabGroup(false); + + ButtonWidget* okBtn = new ButtonWidget(); + okBtn->m_properties[PROP_ID] = "start"; + okBtn->m_properties[PROP_TEXT] = _("Start Race"); + 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); + + GUIEngine::getGUIEnv()->setFocus( okBtn->getIrrlichtElement() ); + + + core::rect< s32 > area_top(0, 0, m_area.getWidth(), y1); + IGUIStaticText* a = GUIEngine::getGUIEnv()->addStaticText( stringw(trackName).c_str(), + area_top, false, true, // border, word warp + m_irrlicht_window); + a->setTabStop(false); + + + core::rect< s32 > area_left(0, y1, m_area.getWidth()/2, y2); + IGUIStaticText* b = GUIEngine::getGUIEnv()->addStaticText( stringw(_("High Scores & Track Info")).c_str(), + area_left, false , true , // border, word warp + m_irrlicht_window); + b->setTabStop(false); + + + // TODO : preserve aspect ratio + core::rect< s32 > area_right(m_area.getWidth()/2, y1, m_area.getWidth(), y2-10); + IGUIImage* screenshotWidget = GUIEngine::getGUIEnv()->addImage( area_right, m_irrlicht_window ); + screenshotWidget->setImage(screenshot); + screenshotWidget->setScaleImage(true); + screenshotWidget->setTabStop(false); + + + + a->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); + b->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); + +} + +// ------------------------------------------------------------------------------------------------------ + +// FIXME : this probably doesn't belong here +void startGame() +{ + 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->setTrack("lighthouse"); + race_manager->setNumLaps( 3 ); + 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 TrackInfoDialog::onEnterPressedInternal() +{ + startGame(); +} + +void TrackInfoDialog::processEvent(std::string& eventSource) +{ + if (eventSource == "start" ) startGame(); +} diff --git a/src/states_screens/dialogs/track_info_dialog.hpp b/src/states_screens/dialogs/track_info_dialog.hpp new file mode 100644 index 000000000..aaae64cf9 --- /dev/null +++ b/src/states_screens/dialogs/track_info_dialog.hpp @@ -0,0 +1,35 @@ +// 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_TRACKINFO_DIALOG_HPP +#define HEADER_TRACKINFO_DIALOG_HPP + +#include "guiengine/modaldialog.hpp" + +class TrackInfoDialog : public GUIEngine::ModalDialog +{ +public: + /** + * Creates a modal dialog with given percentage of screen width and height + */ + TrackInfoDialog(const char* trackName, irr::video::ITexture* screenshot, const float percentWidth, const float percentHeight); + void onEnterPressedInternal(); + void processEvent(std::string& eventSource); +}; + +#endif