nice level intros

This commit is contained in:
2011-03-22 23:01:44 +01:00
parent e2fd3393d3
commit 3e17f56760
13 changed files with 235 additions and 19 deletions
+1
View File
@@ -26,6 +26,7 @@ BEGIN_ENUM(ViewState)
DECL_ENUM_ELEMENT(ViewStatePaused),
DECL_ENUM_ELEMENT(ViewStatePlayerDied),
DECL_ENUM_ELEMENT(ViewStateShipExplodeFade),
DECL_ENUM_ELEMENT(ViewStateLevelIntro),
DECL_ENUM_ELEMENT(ViewStateLevelComplete),
DECL_ENUM_ELEMENT(ViewStateShowHighscore),
DECL_ENUM_ELEMENT(ViewStateEnterPlayername),
-1
View File
@@ -41,7 +41,6 @@ void Controller::ResetPlayerEntity () {
int i;
for (i = 0; i < EntityControllerMaxKeyStates; i++)
player_entity->UnsetControllerKeyState(i);
}
// We definitely have to reset the player entity id
+4
View File
@@ -75,6 +75,10 @@ class Model : public Engine::ModelBase {
std::list<HighscoreEntry> mHighscoreList;
unsigned int mNewestHighscoreEntryIndex;
unsigned int GetCurrentLevelIndex () {
return mCurrentLevelIndex;
}
protected:
/** \brief Initializes the system */
virtual int OnInit (int argc, char* argv[]);
+97 -4
View File
@@ -252,10 +252,13 @@ void View::Draw() {
std::map<unsigned int, Engine::EntityBase*>::iterator entity_iterator;
Model *game_model = static_cast<Model*> (mModel);
unsigned int game_state = game_model->GetGameState();
unsigned int view_state = GetViewState();
DrawStars ();
if ( game_state == GameStateRunning || GetViewState() == ViewStateEditor) {
if ( game_state == GameStateRunning
|| view_state == ViewStateLevelIntro
|| view_state == ViewStateEditor) {
DrawWorld ();
}
@@ -430,6 +433,9 @@ void View::DrawUi () {
case ViewStatePlayerDied:
DrawUiPlayerDied();
break;
case ViewStateLevelIntro:
DrawUiLevelIntro();
break;
case ViewStateLevelComplete:
DrawUiLevelComplete();
break;
@@ -578,6 +584,80 @@ void View::DrawUiGameOver() {
}
}
void View::DrawUiLevelIntro() {
SelectFont ("console.ttf size=23");
stringstream level_info_stream;
level_info_stream << "Level " << GetModel()->GetCurrentLevelIndex() + 1;
int level_number_dest_x = (screen_right - screen_left) * 0.5 - 180;
int level_number_dest_y = (screen_bottom - screen_top) * 0.5 - 60;
int level_number_start_x = level_number_dest_x;
int level_number_start_y = (screen_top);
int level_number_delta_x = level_number_dest_x - level_number_start_x;
int level_number_delta_y = level_number_dest_y - level_number_start_y;
Engine::GUI::Label (20, level_info_stream.str().c_str(),
level_number_dest_x - Engine::GetTimer("LevelIntroLevelNumber") * level_number_delta_x,
level_number_dest_y - Engine::GetTimer("LevelIntroLevelNumber") * level_number_delta_y
);
int level_title_dest_x = (screen_right - screen_left) * 0.5;
int level_title_dest_y = (screen_bottom) * 0.5 - 0;
int level_title_start_x = (screen_right - screen_left) * 0.5;
int level_title_start_y = (screen_bottom);
int level_title_delta_x = level_title_dest_x - level_title_start_x;
int level_title_delta_y = level_title_dest_y - level_title_start_y;
SelectFont("console.ttf size=46 color=#808080");
Engine::GUI::LabelCentered (21, GetModel()->GetLevelTitle().c_str(),
level_title_dest_x - Engine::GetTimer("LevelIntroLevelTitle") * level_title_delta_x - 2,
level_title_dest_y - Engine::GetTimer("LevelIntroLevelTitle") * level_title_delta_y + 2
);
SelectFont("console.ttf size=46 color=#ffffff");
Engine::GUI::LabelCentered (22, GetModel()->GetLevelTitle().c_str(),
level_title_dest_x - Engine::GetTimer("LevelIntroLevelTitle") * level_title_delta_x,
level_title_dest_y - Engine::GetTimer("LevelIntroLevelTitle") * level_title_delta_y
);
SelectFont ("console.ttf size=23");
level_info_stream.str("");
level_info_stream << "by " << GetModel()->GetLevelAuthor();
int level_author_dest_x = (screen_right - screen_left) * 0.5 + 80;
int level_author_dest_y = (screen_bottom - screen_top) * 0.5 + 20;
int level_author_start_x = screen_right;
int level_author_start_y = level_author_dest_y;
int level_author_delta_x = level_author_dest_x - level_author_start_x;
int level_author_delta_y = level_author_dest_y - level_author_start_y;
Engine::GUI::Label (22, level_info_stream.str().c_str(),
level_author_dest_x - Engine::GetTimer("LevelIntroLevelAuthor") * level_author_delta_x,
level_author_dest_y - Engine::GetTimer("LevelIntroLevelAuthor") * level_author_delta_y
);
if (Engine::CheckTimer("LevelIntroLevelStart")) {
if(Engine::GUI::Button (1, "Start", (screen_right - button_width) * 0.5, screen_bottom * 0.5 + 180, button_width, button_height)) {
PopViewState();
GetModel()->SetGameState(GameStateRunning);
}
}
if (Engine::GUI::CheckKeyPressed(SDLK_ESCAPE) ) {
PushViewState(ViewStatePaused);
}
}
void View::DrawUiLevelComplete() {
DrawPageTitle ("Level Complete!");
@@ -585,6 +665,11 @@ void View::DrawUiLevelComplete() {
if(Engine::GUI::Button (1, "Next level ...", (screen_right - button_width) * 0.5, screen_bottom * 0.5 + 60, button_width, button_height)) {
PopViewState();
PushViewState(ViewStateLevelIntro);
Engine::StartTimer ("LevelIntroLevelNumber", 0.4);
Engine::StartTimer ("LevelIntroLevelTitle", 0.6);
Engine::StartTimer ("LevelIntroLevelAuthor", 0.8);
Engine::StartTimer ("LevelIntroLevelStart", 1.0);
// we have to take care when we are testing the level to not proceed to
// the next level...
@@ -597,6 +682,7 @@ void View::DrawUiLevelComplete() {
}
} else {
GetModel()->ProceedToNextLevel();
GetModel()->SetGameState(GameStatePaused);
}
}
}
@@ -607,7 +693,9 @@ void View::DrawUiGamePaused() {
if (Engine::GUI::Button (1, "Resume Game", screen_right * 0.5 - 100, 200, button_width, button_height)) {
PopViewState();
GetModel()->SetGameState(GameStateRunning);
if (GetViewState() == ViewStateGameRunning)
GetModel()->SetGameState(GameStateRunning);
}
if (Engine::GUI::Button (2, "Options", screen_right * 0.5 - 100, 250, button_width, button_height)) {
@@ -891,9 +979,14 @@ void View::DrawUiEnterPlayername() {
if (Engine::GUI::Button (3, "Start Game", screen_right - 180 - 20, 500, 180, 40)) {
PopViewState();
PushViewState(ViewStateGameRunning);
GetModel()->OnNewGame();
GetModel()->SetGameState(GameStateRunning);
PushViewState(ViewStateGameRunning);
PushViewState(ViewStateLevelIntro);
Engine::StartTimer ("LevelIntroLevelNumber", 0.4);
Engine::StartTimer ("LevelIntroLevelTitle", 0.6);
Engine::StartTimer ("LevelIntroLevelAuthor", 0.8);
Engine::StartTimer ("LevelIntroLevelStart", 1.0);
GetModel()->SetGameState(GameStatePaused);
}
if (Engine::GUI::Button (5, "Back", 20, 500, 180, 40)
+1
View File
@@ -86,6 +86,7 @@ class View : public Engine::ViewBase {
void DrawUiMainMenu();
void DrawUiGameRunning();
void DrawUiGameOver();
void DrawUiLevelIntro();
void DrawUiLevelComplete();
void DrawUiGamePaused();
void DrawUiPlayerDied();