|
|
|
@@ -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)
|
|
|
|
|