#include <title_screen.hpp>
Inherits Screen.
Public Member Functions | |
TitleScreen (PlayerStatus *player_status) | |
virtual | ~TitleScreen () |
virtual void | setup () |
gets called before this screen gets activated (which is at least once before the first draw or update call | |
virtual void | leave () |
gets called when the current screen is temporarily suspended | |
virtual void | draw (DrawingContext &context) |
gets called once per frame. | |
virtual void | update (float elapsed_time) |
gets called for once (per logical) frame. | |
Static Public Member Functions | |
static std::string | get_level_name (const std::string &levelfile) |
static void | start_game (World *world) |
Private Member Functions | |
void | make_tux_jump () |
void | generate_main_menu () |
TitleScreen (const TitleScreen &) | |
TitleScreen & | operator= (const TitleScreen &) |
Private Attributes | |
std::auto_ptr< MainMenu > | main_menu |
SurfacePtr | frame |
std::auto_ptr< CodeController > | controller |
std::auto_ptr< GameSession > | titlesession |
Definition at line 35 of file title_screen.hpp.
TitleScreen::TitleScreen | ( | PlayerStatus * | player_status | ) |
Definition at line 45 of file title_screen.cpp.
References controller, Surface::create(), frame, player_status, Player::set_controller(), Player::set_speedlimit(), and titlesession.
00045 : 00046 main_menu(new MainMenu()), 00047 frame(), 00048 controller(), 00049 titlesession() 00050 { 00051 controller.reset(new CodeController()); 00052 titlesession.reset(new GameSession("levels/misc/menu.stl", player_status)); 00053 00054 Player* player = titlesession->get_current_sector()->player; 00055 player->set_controller(controller.get()); 00056 player->set_speedlimit(230); //MAX_WALK_XM 00057 00058 frame = Surface::create("images/engine/menu/frame.png"); 00059 }
TitleScreen::~TitleScreen | ( | ) | [virtual] |
TitleScreen::TitleScreen | ( | const TitleScreen & | ) | [private] |
std::string TitleScreen::get_level_name | ( | const std::string & | levelfile | ) | [static] |
Definition at line 62 of file title_screen.cpp.
References lisp::Lisp::get(), lisp::Lisp::get_lisp(), log_warning, and lisp::Parser::parse().
Referenced by ContribWorldMenu::ContribWorldMenu().
00063 { 00064 try { 00065 lisp::Parser parser; 00066 const lisp::Lisp* root = parser.parse(filename); 00067 00068 const lisp::Lisp* level = root->get_lisp("supertux-level"); 00069 if(!level) 00070 return ""; 00071 00072 std::string name; 00073 level->get("name", name); 00074 return name; 00075 } catch(std::exception& e) { 00076 log_warning << "Problem getting name of '" << filename << "': " 00077 << e.what() << std::endl; 00078 return ""; 00079 } 00080 }
void TitleScreen::setup | ( | ) | [virtual] |
gets called before this screen gets activated (which is at least once before the first draw or update call
Reimplemented from Screen.
Definition at line 115 of file title_screen.cpp.
References Sector::activate(), Sector::current(), MovingObject::get_pos(), LEVEL_MUSIC, main_menu, Sector::play_music(), Sector::player, MenuManager::set_current(), and titlesession.
00116 { 00117 Sector* sector = titlesession->get_current_sector(); 00118 if(Sector::current() != sector) { 00119 sector->play_music(LEVEL_MUSIC); 00120 sector->activate(sector->player->get_pos()); 00121 } 00122 00123 MenuManager::set_current(main_menu.get()); 00124 }
void TitleScreen::leave | ( | ) | [virtual] |
gets called when the current screen is temporarily suspended
Reimplemented from Screen.
Definition at line 127 of file title_screen.cpp.
References Sector::deactivate(), MenuManager::set_current(), and titlesession.
00128 { 00129 Sector* sector = titlesession->get_current_sector(); 00130 sector->deactivate(); 00131 MenuManager::set_current(NULL); 00132 }
void TitleScreen::draw | ( | DrawingContext & | context | ) | [virtual] |
gets called once per frame.
The screen should draw itself in this function. State changes should not be done in this function, but rather in update
Implements Screen.
Definition at line 135 of file title_screen.cpp.
References _(), ALIGN_LEFT, Sector::draw(), DrawingContext::draw_text(), LAYER_FOREGROUND1, SCREEN_HEIGHT, Resources::small_font, and titlesession.
00136 { 00137 Sector* sector = titlesession->get_current_sector(); 00138 sector->draw(context); 00139 00140 // FIXME: Add something to scale the frame to the resolution of the screen 00141 //context.draw_surface(frame, Vector(0,0),LAYER_FOREGROUND1); 00142 00143 context.draw_text(Resources::small_font, "SuperTux " PACKAGE_VERSION "\n", 00144 Vector(5, SCREEN_HEIGHT - 50), ALIGN_LEFT, LAYER_FOREGROUND1); 00145 context.draw_text(Resources::small_font, 00146 _( 00147 "Copyright (c) 2003-2010 SuperTux Devel Team\n" 00148 "This game comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to\n" 00149 "redistribute it under certain conditions; see the file COPYING for details.\n" 00150 ), 00151 Vector(5, SCREEN_HEIGHT - 50 + Resources::small_font->get_height() + 5), 00152 ALIGN_LEFT, LAYER_FOREGROUND1); 00153 }
void TitleScreen::update | ( | float | elapsed_time | ) | [virtual] |
gets called for once (per logical) frame.
Screens should do their state updates and logic here
Implements Screen.
Definition at line 156 of file title_screen.cpp.
References MenuManager::current(), g_screen_manager, ScreenManager::has_no_pending_fadeout(), main_menu, make_tux_jump(), MenuManager::set_current(), ScreenManager::set_speed(), titlesession, and Sector::update().
00157 { 00158 g_screen_manager->set_speed(0.6f); 00159 Sector* sector = titlesession->get_current_sector(); 00160 sector->update(elapsed_time); 00161 00162 make_tux_jump(); 00163 00164 if (Menu* menu = MenuManager::current()) 00165 { 00166 menu->check_menu(); 00167 } 00168 00169 // reopen menu if user closed it (so that the app doesn't close when user 00170 // accidently hit ESC) 00171 if(MenuManager::current() == 0 && g_screen_manager->has_no_pending_fadeout()) 00172 { 00173 MenuManager::set_current(main_menu.get()); 00174 } 00175 }
void TitleScreen::start_game | ( | World * | world | ) | [static] |
Definition at line 178 of file title_screen.cpp.
References FileSystem::basename(), g_config, World::get_basedir(), log_fatal, Config::profile, World::run(), MenuManager::set_current(), and World::set_savegame_filename().
Referenced by MainMenu::check_menu(), and ContribMenu::check_menu().
00179 { 00180 MenuManager::set_current(NULL); 00181 00182 std::string basename = world->get_basedir(); 00183 basename = basename.substr(0, basename.length()-1); 00184 std::string worlddirname = FileSystem::basename(basename); 00185 std::ostringstream stream; 00186 stream << "profile" << g_config->profile << "/" << worlddirname << ".stsg"; 00187 std::string slotfile = stream.str(); 00188 00189 try 00190 { 00191 world->set_savegame_filename(slotfile); 00192 world->run(); 00193 } 00194 catch(std::exception& e) 00195 { 00196 log_fatal << "Couldn't start world: " << e.what() << std::endl; 00197 } 00198 }
void TitleScreen::make_tux_jump | ( | ) | [private] |
Definition at line 83 of file title_screen.cpp.
References Sector::activate(), Sector::camera, controller, MovingObject::get_bbox(), MovingObject::get_pos(), Sector::get_width(), Sector::is_free_of_statics(), Controller::JUMP, Player::on_ground(), Rectf::p2, Sector::player, Camera::reset(), Controller::RIGHT, titlesession, and Vector::x.
Referenced by update().
00084 { 00085 static bool jumpWasReleased = true; 00086 Sector* sector = titlesession->get_current_sector(); 00087 Player* tux = sector->player; 00088 00089 controller->update(); 00090 controller->press(Controller::RIGHT); 00091 00092 // Check if we should press the jump button 00093 Rectf lookahead = tux->get_bbox(); 00094 lookahead.p2.x += 96; 00095 bool pathBlocked = !sector->is_free_of_statics(lookahead); 00096 if ((pathBlocked && jumpWasReleased) || !tux->on_ground()) { 00097 controller->press(Controller::JUMP); 00098 jumpWasReleased = false; 00099 } else { 00100 jumpWasReleased = true; 00101 } 00102 00103 // Wrap around at the end of the level back to the beginning 00104 if(sector->get_width() - 320 < tux->get_pos().x) { 00105 sector->activate("main"); 00106 sector->camera->reset(tux->get_pos()); 00107 } 00108 }
void TitleScreen::generate_main_menu | ( | ) | [private] |
TitleScreen& TitleScreen::operator= | ( | const TitleScreen & | ) | [private] |
std::auto_ptr<MainMenu> TitleScreen::main_menu [private] |
SurfacePtr TitleScreen::frame [private] |
std::auto_ptr<CodeController> TitleScreen::controller [private] |
std::auto_ptr<GameSession> TitleScreen::titlesession [private] |
Definition at line 62 of file title_screen.hpp.
Referenced by draw(), leave(), make_tux_jump(), setup(), TitleScreen(), and update().