Snapple
Memuat...
Mencari...
Tidak Ditemukan
scene_intro.hpp
Ke dokumentasi file ini.
1#include "../prelude.hpp"
3#include <cstdint>
4
10
12private:
13 const uint8_t max_bounces = 3;
14 const double COR = 0.45; // koefisien restitusi (vy setelah mantul รท vy sebelum mantul)
15 double ay = 0.8; // percepatan sumbu y
16 raylib::Texture2D texture;
17 int ground_y;
18 double vy; // kecepatan sumbu y
19 uint8_t bounces;
20 TextState state;
21 raylib::Sound* bounce_sound;
22
23public:
25
27
28 void bounce_down();
29 void fly_up(double velocity);
30
31 // TODO: ini harusnya ada di constructor. tapi gara gara ada kelas lain
32 // yang ada field kelas ini, jadinya harus di construct langsung. tapi
33 // kalo aku taro di constructor nanti malah kelas lain itu gabisa di
34 // construct -_-
35 void load_texture(const char* letter_file_name);
36 void set_ground(size_t y);
37 void set_bounce_sound(raylib::Sound* bounce_sound);
38 void draw();
39 void update();
40};
41
43private:
44 const char* id = "intro";
45 const uint fps = 13;
46 static const size_t n_frames = 141;
47 const size_t start_loop = 119; // mulai loop sampe pemain mulai game
48 const char* bounce_sound_file = "assets/boing.mp3";
49 raylib::Sound bounce_sound;
50 const char* frames[n_frames] = {
51 "assets/intro_animation/0.png",
52 "assets/intro_animation/1.png",
53 "assets/intro_animation/2.png",
54 "assets/intro_animation/3.png",
55 "assets/intro_animation/4.png",
56 "assets/intro_animation/5.png",
57 "assets/intro_animation/6.png",
58 "assets/intro_animation/7.png",
59 "assets/intro_animation/8.png",
60 "assets/intro_animation/9.png",
61 "assets/intro_animation/10.png",
62 "assets/intro_animation/11.png",
63 "assets/intro_animation/12.png",
64 "assets/intro_animation/13.png",
65 "assets/intro_animation/14.png",
66 "assets/intro_animation/15.png",
67 "assets/intro_animation/16.png",
68 "assets/intro_animation/17.png",
69 "assets/intro_animation/18.png",
70 "assets/intro_animation/19.png",
71 "assets/intro_animation/20.png",
72 "assets/intro_animation/21.png",
73 "assets/intro_animation/22.png",
74 "assets/intro_animation/23.png",
75 "assets/intro_animation/24.png",
76 "assets/intro_animation/25.png",
77 "assets/intro_animation/26.png",
78 "assets/intro_animation/27.png",
79 "assets/intro_animation/28.png",
80 "assets/intro_animation/29.png",
81 "assets/intro_animation/30.png",
82 "assets/intro_animation/31.png",
83 "assets/intro_animation/32.png",
84 "assets/intro_animation/33.png",
85 "assets/intro_animation/34.png",
86 "assets/intro_animation/35.png",
87 "assets/intro_animation/36.png",
88 "assets/intro_animation/37.png",
89 "assets/intro_animation/38.png",
90 "assets/intro_animation/39.png",
91 "assets/intro_animation/40.png",
92 "assets/intro_animation/41.png",
93 "assets/intro_animation/42.png",
94 "assets/intro_animation/43.png",
95 "assets/intro_animation/44.png",
96 "assets/intro_animation/45.png",
97 "assets/intro_animation/46.png",
98 "assets/intro_animation/47.png",
99 "assets/intro_animation/48.png",
100 "assets/intro_animation/49.png",
101 "assets/intro_animation/50.png",
102 "assets/intro_animation/51.png",
103 "assets/intro_animation/52.png",
104 "assets/intro_animation/53.png",
105 "assets/intro_animation/54.png",
106 "assets/intro_animation/55.png",
107 "assets/intro_animation/56.png",
108 "assets/intro_animation/57.png",
109 "assets/intro_animation/58.png",
110 "assets/intro_animation/59.png",
111 "assets/intro_animation/60.png",
112 "assets/intro_animation/61.png",
113 "assets/intro_animation/62.png",
114 "assets/intro_animation/63.png",
115 "assets/intro_animation/64.png",
116 "assets/intro_animation/65.png",
117 "assets/intro_animation/66.png",
118 "assets/intro_animation/67.png",
119 "assets/intro_animation/68.png",
120 "assets/intro_animation/69.png",
121 "assets/intro_animation/70.png",
122 "assets/intro_animation/71.png",
123 "assets/intro_animation/72.png",
124 "assets/intro_animation/73.png",
125 "assets/intro_animation/74.png",
126 "assets/intro_animation/75.png",
127 "assets/intro_animation/76.png",
128 "assets/intro_animation/77.png",
129 "assets/intro_animation/78.png",
130 "assets/intro_animation/79.png",
131 "assets/intro_animation/80.png",
132 "assets/intro_animation/81.png",
133 "assets/intro_animation/82.png",
134 "assets/intro_animation/83.png",
135 "assets/intro_animation/84.png",
136 "assets/intro_animation/85.png",
137 "assets/intro_animation/86.png",
138 "assets/intro_animation/87.png",
139 "assets/intro_animation/88.png",
140 "assets/intro_animation/89.png",
141 "assets/intro_animation/90.png",
142 "assets/intro_animation/91.png",
143 "assets/intro_animation/92.png",
144 "assets/intro_animation/93.png",
145 "assets/intro_animation/94.png",
146 "assets/intro_animation/95.png",
147 "assets/intro_animation/96.png",
148 "assets/intro_animation/97.png",
149 "assets/intro_animation/98.png",
150 "assets/intro_animation/99.png",
151 "assets/intro_animation/100.png",
152 "assets/intro_animation/101.png",
153 "assets/intro_animation/102.png",
154 "assets/intro_animation/103.png",
155 "assets/intro_animation/104.png",
156 "assets/intro_animation/105.png",
157 "assets/intro_animation/106.png",
158 "assets/intro_animation/107.png",
159 "assets/intro_animation/108.png",
160 "assets/intro_animation/109.png",
161 "assets/intro_animation/110.png",
162 "assets/intro_animation/111.png",
163 "assets/intro_animation/112.png",
164 "assets/intro_animation/113.png",
165 "assets/intro_animation/114.png",
166 "assets/intro_animation/115.png",
167 "assets/intro_animation/116.png",
168 "assets/intro_animation/117.png",
169 "assets/intro_animation/118.png",
170 "assets/intro_animation/119.png",
171 "assets/intro_animation/120.png",
172 "assets/intro_animation/121.png",
173 "assets/intro_animation/122.png",
174 "assets/intro_animation/123.png",
175 "assets/intro_animation/124.png",
176 "assets/intro_animation/125.png",
177 "assets/intro_animation/126.png",
178 "assets/intro_animation/127.png",
179 "assets/intro_animation/128.png",
180 "assets/intro_animation/129.png",
181 "assets/intro_animation/130.png",
182 "assets/intro_animation/131.png",
183 "assets/intro_animation/132.png",
184 "assets/intro_animation/133.png",
185 "assets/intro_animation/134.png",
186 "assets/intro_animation/135.png",
187 "assets/intro_animation/136.png",
188 "assets/intro_animation/137.png",
189 "assets/intro_animation/138.png",
190 "assets/intro_animation/139.png",
191 "assets/intro_animation/140.png",
192 };
193
194 raylib::Texture2D intro_animation[n_frames];
195
196 static const size_t n_letters = 7;
197 const char* letters[n_letters] = {
198 "assets/title_S.png",
199 "assets/title_N.png",
200 "assets/title_A.png",
201 "assets/title_P1.png",
202 "assets/title_P2.png",
203 "assets/title_L.png",
204 "assets/title_E.png"
205 };
206
207 const int ground_y[n_letters] = {
208 56,
209 171,
210 81,
211 140,
212 178,
213 108,
214 112
215 };
216
217 const int letters_x_pos[n_letters] = {
218 274,
219 523,
220 735,
221 953,
222 1077,
223 1214,
224 1370
225 };
226
227 const int letters_y_min = -500;
228 const double letters_v_up = 2;
229
230 LetterSprite letter_sprites[n_letters];
231
232 const char* game_start_sound_file = "assets/game-start.mp3";
233 raylib::Sound game_start_sound;
234 const char* background_filename = "assets/background.png";
235 raylib::Texture2D background;
236 double time_per_frame;
237 size_t current_frame = 0;
238 double last_time;
239 bool is_looping; // Must be set to false to restart
240 bool ready_to_start_game; // Must be set to false to restart
241 bool show_hint_text; // Must be set to false to restart
242 bool active; // Must be set to true to restart
243 uint8_t hint_text_alpha;
244 double hint_text_last_time;
245 const double hint_text_blink_duration = 1.0;
246 function<void()> start_interlude_callback;
247 raylib::Font* game_font;
248 GameComponents::GameStateManager* game_state_manager;
249
250public:
251 // Main animasi dari awal.
252 void replay();
253 // Reset, tanpa main animasi dari awal.
254 void reset();
255 IntroScene();
256
257 // gara gara kalo ada kelas yang ada kelas lain, maka kelas yang
258 // dimiliki kelas lain itu harus ada default constructor, makanya aku
259 // jadi pake fungsi init kayak gini. ini gunanya buat dependency
260 // injection doang.
261 //
262 // *perhatian*: fungsi ini HARUS dipanggil SETELAH
263 // konstruksi dan harus diberi argumen non-null! ! !
264 void init(raylib::Font* game_font, GameComponents::GameStateManager* game_state_manager, function<void()> start_game_callback);
265
266 // Bikin tulisan judul membal ke bawah (sampai `ground_y`).
267 void letters_bounce_down();
268
269 // Bikin tulisan judul terbang ke atas (sampai `letters_y_min`).
270 void letters_fly_up();
271
272 void draw();
273 void update();
274};
Definition components.hpp:146
Definition components.hpp:42
Definition components.hpp:21
void init(raylib::Font *game_font, GameComponents::GameStateManager *game_state_manager, function< void()> start_game_callback)
Definition scene_intro.cpp:32
void update()
Definition scene_intro.cpp:89
IntroScene()
Definition scene_intro.cpp:5
void draw()
Definition scene_intro.cpp:73
void letters_fly_up()
Definition scene_intro.cpp:63
void letters_bounce_down()
Definition scene_intro.cpp:52
void replay()
Definition scene_intro.cpp:45
void reset()
Definition scene_intro.cpp:38
Definition scene_intro.hpp:11
void draw()
Definition scene_intro.cpp:167
void bounce_down()
Definition scene_intro.cpp:171
GameComponents::Coordinate pos
Definition scene_intro.hpp:24
void update()
Definition scene_intro.cpp:187
void set_ground(size_t y)
Definition scene_intro.cpp:213
void load_texture(const char *letter_file_name)
Definition scene_intro.cpp:163
void set_bounce_sound(raylib::Sound *bounce_sound)
Definition scene_intro.cpp:159
LetterSprite()
Definition scene_intro.cpp:154
void fly_up(double velocity)
Definition scene_intro.cpp:181
TextState
Definition scene_intro.hpp:5
@ FLY_UP
Definition scene_intro.hpp:8
@ BOUNCE_DOWN
Definition scene_intro.hpp:7
@ NONE
Definition scene_intro.hpp:6
Definition components.hpp:160