diff options
Diffstat (limited to 'titlestate.cpp')
| -rw-r--r-- | titlestate.cpp | 182 |
1 files changed, 95 insertions, 87 deletions
| diff --git a/titlestate.cpp b/titlestate.cpp index 166a55b..b68e8fa 100644 --- a/titlestate.cpp +++ b/titlestate.cpp | |||
| @@ -1,116 +1,124 @@ | |||
| 1 | #include "titlestate.h" | 1 | #include "titlestate.h" |
| 2 | 2 | ||
| 3 | #include "gamestate.h" | 3 | #include "gamestate.h" |
| 4 | #include "hslist.h" | 4 | #include "hs_state.h" |
| 5 | #include "util.h" | 5 | #include "util.h" |
| 6 | 6 | ||
| 7 | State* TitleState::operator()(SDL_Window* window, SDL_Renderer* renderer) { | 7 | TitleState::TitleState(Game& game) { |
| 8 | SDL_Texture* background = loadImage(renderer, "resources/title.bmp"); | 8 | background_ = loadImage(game.renderer.get(), "resources/title.bmp"); |
| 9 | SDL_Texture* pointer = loadImage(renderer, "resources/pointer.bmp"); | 9 | pointer_ = loadImage(game.renderer.get(), "resources/pointer.bmp"); |
| 10 | int selection = 0; | 10 | } |
| 11 | |||
| 12 | std::unique_ptr<State> TitleState::operator()(Game& game) { | ||
| 11 | SDL_Event e; | 13 | SDL_Event e; |
| 12 | 14 | ||
| 13 | for (;;) { | 15 | SDL_RenderClear(game.renderer.get()); |
| 14 | SDL_RenderClear(renderer); | 16 | SDL_RenderCopy(game.renderer.get(), background_.get(), NULL, NULL); |
| 15 | SDL_RenderCopy(renderer, background, NULL, NULL); | 17 | applyTexture(game.renderer.get(), pointer_.get(), 136, |
| 16 | applyTexture(renderer, pointer, 136, | 18 | selection_ == 0 |
| 17 | selection == 0 | 19 | ? 316 |
| 18 | ? 316 | 20 | : (selection_ == 1 ? 350 : (selection_ == 2 ? 381 : 417))); |
| 19 | : (selection == 1 ? 350 : (selection == 2 ? 381 : 417))); | 21 | SDL_RenderPresent(game.renderer.get()); |
| 20 | SDL_RenderPresent(renderer); | 22 | |
| 21 | 23 | while (SDL_PollEvent(&e)) { | |
| 22 | while (SDL_PollEvent(&e)) { | 24 | if (e.type == SDL_QUIT) { |
| 23 | if (e.type == SDL_QUIT) { | 25 | game.should_quit = true; |
| 24 | return NULL; | 26 | break; |
| 25 | } else if (e.type == SDL_KEYDOWN) { | 27 | } else if (e.type == SDL_KEYDOWN) { |
| 26 | if ((e.key.keysym.sym == SDLK_UP) && (selection != 0)) { | 28 | if ((e.key.keysym.sym == SDLK_UP) && (selection_ != 0)) { |
| 27 | selection--; | 29 | selection_--; |
| 28 | } else if ((e.key.keysym.sym == SDLK_DOWN) && (selection != 3)) { | 30 | } else if ((e.key.keysym.sym == SDLK_DOWN) && (selection_ != 3)) { |
| 29 | selection++; | 31 | selection_++; |
| 30 | } else if (e.key.keysym.sym == SDLK_RETURN) { | 32 | } else if (e.key.keysym.sym == SDLK_RETURN) { |
| 31 | switch (selection) { | 33 | switch (selection_) { |
| 32 | case 0: | 34 | case 0: |
| 33 | return new GameState(); | 35 | return std::make_unique<GameState>(); |
| 34 | case 1: | 36 | case 1: |
| 35 | return new HowToPlayState(); | 37 | return std::make_unique<HowToPlayState>(game); |
| 36 | case 2: | 38 | case 2: |
| 37 | return new ChooseHighscoreListState(); | 39 | return std::make_unique<DisplayLocalHighscoreListState>(game); |
| 38 | case 3: | 40 | case 3: { |
| 39 | return NULL; | 41 | game.should_quit = true; |
| 42 | break; | ||
| 40 | } | 43 | } |
| 41 | } | 44 | } |
| 42 | } | 45 | } |
| 43 | } | 46 | } |
| 44 | } | 47 | } |
| 48 | |||
| 49 | return nullptr; | ||
| 45 | } | 50 | } |
| 46 | 51 | ||
| 47 | State* HowToPlayState::operator()(SDL_Window* window, SDL_Renderer* renderer) { | 52 | HowToPlayState::HowToPlayState(Game& game) { |
| 48 | SDL_Texture* background = loadImage(renderer, "resources/htp1.bmp"); | 53 | background_ = loadImage(game.renderer.get(), "resources/htp1.bmp"); |
| 49 | SDL_Texture* pointer = loadImage(renderer, "resources/pointer.bmp"); | 54 | pointer_ = loadImage(game.renderer.get(), "resources/pointer.bmp"); |
| 50 | int selection = 0; | 55 | } |
| 56 | |||
| 57 | std::unique_ptr<State> HowToPlayState::operator()(Game& game) { | ||
| 51 | SDL_Event e; | 58 | SDL_Event e; |
| 52 | 59 | ||
| 53 | for (;;) { | 60 | SDL_RenderClear(game.renderer.get()); |
| 54 | SDL_RenderClear(renderer); | 61 | SDL_RenderCopy(game.renderer.get(), background_.get(), NULL, NULL); |
| 55 | SDL_RenderCopy(renderer, background, NULL, NULL); | 62 | applyTexture(game.renderer.get(), pointer_.get(), selection_ == 0 ? 74 : 216, |
| 56 | applyTexture(renderer, pointer, selection == 0 ? 74 : 216, 430); | 63 | 430); |
| 57 | SDL_RenderPresent(renderer); | 64 | SDL_RenderPresent(game.renderer.get()); |
| 58 | 65 | ||
| 59 | while (SDL_PollEvent(&e)) { | 66 | while (SDL_PollEvent(&e)) { |
| 60 | if (e.type == SDL_QUIT) { | 67 | if (e.type == SDL_QUIT) { |
| 61 | return NULL; | 68 | game.should_quit = true; |
| 62 | } else if (e.type == SDL_KEYDOWN) { | 69 | break; |
| 63 | if ((e.key.keysym.sym == SDLK_LEFT) && (selection != 0)) { | 70 | } else if (e.type == SDL_KEYDOWN) { |
| 64 | selection--; | 71 | if ((e.key.keysym.sym == SDLK_LEFT) && (selection_ != 0)) { |
| 65 | } else if ((e.key.keysym.sym == SDLK_RIGHT) && (selection != 1)) { | 72 | selection_--; |
| 66 | selection++; | 73 | } else if ((e.key.keysym.sym == SDLK_RIGHT) && (selection_ != 1)) { |
| 67 | } else if (e.key.keysym.sym == SDLK_RETURN) { | 74 | selection_++; |
| 68 | switch (selection) { | 75 | } else if (e.key.keysym.sym == SDLK_RETURN) { |
| 69 | case 0: | 76 | switch (selection_) { |
| 70 | return new HowToPlayPageTwoState(); | 77 | case 0: |
| 71 | 78 | return std::make_unique<HowToPlayPageTwoState>(game); | |
| 72 | break; | 79 | case 1: |
| 73 | case 1: | 80 | return std::make_unique<TitleState>(game); |
| 74 | return new TitleState(); | ||
| 75 | } | ||
| 76 | } | 81 | } |
| 77 | } | 82 | } |
| 78 | } | 83 | } |
| 79 | } | 84 | } |
| 85 | |||
| 86 | return nullptr; | ||
| 87 | } | ||
| 88 | |||
| 89 | HowToPlayPageTwoState::HowToPlayPageTwoState(Game& game) { | ||
| 90 | background_ = loadImage(game.renderer.get(), "resources/htp2.bmp"); | ||
| 91 | pointer_ = loadImage(game.renderer.get(), "resources/pointer.bmp"); | ||
| 80 | } | 92 | } |
| 81 | 93 | ||
| 82 | State* HowToPlayPageTwoState::operator()(SDL_Window* window, | 94 | std::unique_ptr<State> HowToPlayPageTwoState::operator()(Game& game) { |
| 83 | SDL_Renderer* renderer) { | ||
| 84 | SDL_Texture* background = loadImage(renderer, "resources/htp2.bmp"); | ||
| 85 | SDL_Texture* pointer = loadImage(renderer, "resources/pointer.bmp"); | ||
| 86 | int selection = 0; | ||
| 87 | SDL_Event e; | 95 | SDL_Event e; |
| 88 | 96 | ||
| 89 | for (;;) { | 97 | SDL_RenderClear(game.renderer.get()); |
| 90 | SDL_RenderClear(renderer); | 98 | SDL_RenderCopy(game.renderer.get(), background_.get(), NULL, NULL); |
| 91 | SDL_RenderCopy(renderer, background, NULL, NULL); | 99 | applyTexture(game.renderer.get(), pointer_.get(), selection_ == 0 ? 45 : 238, |
| 92 | applyTexture(renderer, pointer, selection == 0 ? 45 : 238, 430); | 100 | 430); |
| 93 | SDL_RenderPresent(renderer); | 101 | SDL_RenderPresent(game.renderer.get()); |
| 94 | 102 | ||
| 95 | while (SDL_PollEvent(&e)) { | 103 | while (SDL_PollEvent(&e)) { |
| 96 | if (e.type == SDL_QUIT) { | 104 | if (e.type == SDL_QUIT) { |
| 97 | return NULL; | 105 | game.should_quit = true; |
| 98 | } else if (e.type == SDL_KEYDOWN) { | 106 | break; |
| 99 | if ((e.key.keysym.sym == SDLK_LEFT) && (selection != 0)) { | 107 | } else if (e.type == SDL_KEYDOWN) { |
| 100 | selection--; | 108 | if ((e.key.keysym.sym == SDLK_LEFT) && (selection_ != 0)) { |
| 101 | } else if ((e.key.keysym.sym == SDLK_RIGHT) && (selection != 1)) { | 109 | selection_--; |
| 102 | selection++; | 110 | } else if ((e.key.keysym.sym == SDLK_RIGHT) && (selection_ != 1)) { |
| 103 | } else if (e.key.keysym.sym == SDLK_RETURN) { | 111 | selection_++; |
| 104 | switch (selection) { | 112 | } else if (e.key.keysym.sym == SDLK_RETURN) { |
| 105 | case 0: | 113 | switch (selection_) { |
| 106 | return new HowToPlayState(); | 114 | case 0: |
| 107 | 115 | return std::make_unique<HowToPlayState>(game); | |
| 108 | break; | 116 | case 1: |
| 109 | case 1: | 117 | return std::make_unique<TitleState>(game); |
| 110 | return new TitleState(); | ||
| 111 | } | ||
| 112 | } | 118 | } |
| 113 | } | 119 | } |
| 114 | } | 120 | } |
| 115 | } | 121 | } |
| 122 | |||
| 123 | return nullptr; | ||
| 116 | } | 124 | } |
