summary refs log tree commit diff stats
path: root/titlestate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'titlestate.cpp')
-rw-r--r--titlestate.cpp182
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
7State* TitleState::operator()(SDL_Window* window, SDL_Renderer* renderer) { 7TitleState::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
12std::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
47State* HowToPlayState::operator()(SDL_Window* window, SDL_Renderer* renderer) { 52HowToPlayState::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
57std::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
89HowToPlayPageTwoState::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
82State* HowToPlayPageTwoState::operator()(SDL_Window* window, 94std::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}