1/*******************************************************************************************
2*
3* JUST DO [GLOBAL GAME JAM 2015]
4*
5* Experimental puzzle game that lets the user try to find a logic
6* solution to different shape-color-based situations.
7*
8* This game has been created using raylib 1.6 (www.raylib.com)
9* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
10*
11* Copyright (c) 2015 Ramon Santamaria (@raysan5)
12*
13********************************************************************************************/
14
15#include "raylib.h"
16#include "screens/screens.h" // NOTE: Defines global variable: currentScreen
17
18#if defined(PLATFORM_WEB)
19 #include <emscripten/emscripten.h>
20#endif
21
22//----------------------------------------------------------------------------------
23// Global Variables Definition (local to this module)
24//----------------------------------------------------------------------------------
25const int screenWidth = 1280; // Moved to screens.h
26const int screenHeight = 720; // Moved to screens.h
27
28// Required variables to manage screen transitions (fade-in, fade-out)
29float transAlpha = 0;
30bool onTransition = false;
31bool transFadeOut = false;
32int transFromScreen = -1;
33int transToScreen = -1;
34int framesCounter = 0;
35
36//static Sound levelWin;
37Music music;
38
39//----------------------------------------------------------------------------------
40// Local Functions Declaration
41//----------------------------------------------------------------------------------
42void TransitionToScreen(int screen);
43void UpdateTransition(void);
44void DrawTransition(void);
45
46void UpdateDrawFrame(void); // Update and Draw one frame
47
48//----------------------------------------------------------------------------------
49// Main entry point
50//----------------------------------------------------------------------------------
51int main(void)
52{
53 // Initialization (Note windowTitle is unused on Android)
54 //---------------------------------------------------------
55 InitWindow(screenWidth, screenHeight, "JUST DO [GGJ15]");
56
57 // Load global data here (assets that must be available in all screens, i.e. fonts)
58 InitAudioDevice();
59
60 levelWin = LoadSound("resources/win.wav");
61 music = LoadMusicStream("resources/ambient.ogg");
62
63 // Setup and Init first screen
64 currentScreen = LOGO;
65 InitLogoScreen();
66
67#if defined(PLATFORM_WEB)
68 emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
69#else
70 SetTargetFPS(60); // Set our game to run at 60 frames-per-second
71 //--------------------------------------------------------------------------------------
72
73 // Main game loop
74 while (!WindowShouldClose()) // Detect window close button or ESC key
75 {
76 UpdateDrawFrame();
77 }
78#endif
79
80 // De-Initialization
81 //--------------------------------------------------------------------------------------
82
83 // Unload all global loaded data (i.e. fonts) here!
84 UnloadSound(levelWin);
85 UnloadMusicStream(music);
86
87 CloseAudioDevice();
88
89 CloseWindow(); // Close window and OpenGL context
90 //--------------------------------------------------------------------------------------
91
92 return 0;
93}
94
95//----------------------------------------------------------------------------------
96// Local Functions Definition
97//----------------------------------------------------------------------------------
98void TransitionToScreen(int screen)
99{
100 onTransition = true;
101 transFromScreen = currentScreen;
102 transToScreen = screen;
103}
104
105void UpdateTransition(void)
106{
107 if (!transFadeOut)
108 {
109 transAlpha += 0.02f;
110
111 if (transAlpha >= 1.0)
112 {
113 transAlpha = 1.0;
114 currentScreen = transToScreen;
115 transFadeOut = true;
116 framesCounter = 0;
117 }
118 }
119 else // Transition fade out logic
120 {
121 transAlpha -= 0.02f;
122
123 if (transAlpha <= 0)
124 {
125 transAlpha = 0;
126 transFadeOut = false;
127 onTransition = false;
128 transFromScreen = -1;
129 transToScreen = -1;
130 }
131 }
132}
133
134void DrawTransition(void)
135{
136 DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, transAlpha));
137}
138
139void UpdateDrawFrame(void)
140{
141 // Update
142 //----------------------------------------------------------------------------------
143 if (currentScreen != LOGO) UpdateMusicStream(music);
144
145 if (!onTransition)
146 {
147 if (IsKeyPressed('0'))
148 {
149 TransitionToScreen(LEVEL00);
150 InitLevel00Screen();
151 }
152 else if (IsKeyPressed('1'))
153 {
154 TransitionToScreen(LEVEL01);
155 InitLevel01Screen();
156 }
157 else if (IsKeyPressed('2'))
158 {
159 TransitionToScreen(LEVEL02);
160 InitLevel02Screen();
161 }
162 else if (IsKeyPressed('3'))
163 {
164 TransitionToScreen(LEVEL03);
165 InitLevel03Screen();
166 }
167 else if (IsKeyPressed('4'))
168 {
169 TransitionToScreen(LEVEL04);
170 InitLevel04Screen();
171 }
172 else if (IsKeyPressed('5'))
173 {
174 TransitionToScreen(LEVEL05);
175 InitLevel05Screen();
176 }
177 else if (IsKeyPressed('6'))
178 {
179 TransitionToScreen(LEVEL06);
180 InitLevel06Screen();
181 }
182 else if (IsKeyPressed('7'))
183 {
184 TransitionToScreen(LEVEL07);
185 InitLevel07Screen();
186 }
187 else if (IsKeyPressed('8'))
188 {
189 TransitionToScreen(LEVEL08);
190 InitLevel08Screen();
191 }
192 else if (IsKeyPressed('9'))
193 {
194 TransitionToScreen(LEVEL09);
195 InitLevel08Screen();
196 }
197
198 switch(currentScreen)
199 {
200 case LOGO:
201 {
202 UpdateLogoScreen();
203
204 if (FinishLogoScreen())
205 {
206 UnloadLogoScreen();
207 TransitionToScreen(LEVEL00);
208 InitLevel00Screen();
209
210 PlayMusicStream(music);
211 SetMusicVolume(music, 0.6f);
212 }
213 } break;
214 case LEVEL00:
215 {
216 UpdateLevel00Screen();
217
218 if (FinishLevel00Screen())
219 {
220 UnloadLevel00Screen();
221 TransitionToScreen(LEVEL01);
222 InitLevel01Screen();
223 }
224 } break;
225 case LEVEL01:
226 {
227 UpdateLevel01Screen();
228
229 if (FinishLevel01Screen())
230 {
231 UnloadLevel01Screen();
232 TransitionToScreen(LEVEL02);
233 InitLevel02Screen();
234 }
235 } break;
236 case LEVEL02:
237 {
238 UpdateLevel02Screen();
239
240 if (FinishLevel02Screen())
241 {
242 UnloadLevel02Screen();
243 TransitionToScreen(LEVEL03);
244 InitLevel03Screen();
245 }
246 } break;
247 case LEVEL03:
248 {
249 UpdateLevel03Screen();
250
251 if (FinishLevel03Screen())
252 {
253 UnloadLevel03Screen();
254 TransitionToScreen(LEVEL04);
255 InitLevel04Screen();
256 }
257 } break;
258 case LEVEL04:
259 {
260 UpdateLevel04Screen();
261
262 if (FinishLevel04Screen())
263 {
264 UnloadLevel04Screen();
265 TransitionToScreen(LEVEL05);
266 InitLevel05Screen();
267 }
268 } break;
269 case LEVEL05:
270 {
271 UpdateLevel05Screen();
272
273 if (FinishLevel05Screen())
274 {
275 UnloadLevel05Screen();
276 TransitionToScreen(LEVEL06);
277 InitLevel06Screen();
278 }
279 } break;
280 case LEVEL06:
281 {
282 UpdateLevel06Screen();
283
284 if (FinishLevel06Screen())
285 {
286 UnloadLevel06Screen();
287 TransitionToScreen(LEVEL07);
288 InitLevel07Screen();
289 }
290 } break;
291 case LEVEL07:
292 {
293 UpdateLevel07Screen();
294
295 if (FinishLevel07Screen())
296 {
297 UnloadLevel07Screen();
298 TransitionToScreen(LEVEL08);
299 InitLevel08Screen();
300 }
301 } break;
302 case LEVEL08:
303 {
304 UpdateLevel08Screen();
305
306 if (FinishLevel08Screen())
307 {
308 UnloadLevel08Screen();
309 TransitionToScreen(LEVEL09);
310 InitLevel09Screen();
311 }
312 } break;
313 case LEVEL09:
314 {
315 UpdateLevel09Screen();
316
317 if (FinishLevel09Screen())
318 {
319 UnloadLevel09Screen();
320 TransitionToScreen(LEVEL00);
321 InitLevel00Screen();
322 }
323 } break;
324 default: break;
325 }
326 }
327 else UpdateTransition(); // Update transition (fade-in, fade-out)
328 //----------------------------------------------------------------------------------
329
330 // Draw
331 //----------------------------------------------------------------------------------
332 BeginDrawing();
333
334 ClearBackground(RAYWHITE);
335
336 switch(currentScreen)
337 {
338 case LOGO: DrawLogoScreen(); break;
339 case LEVEL00: DrawLevel00Screen(); break;
340 case LEVEL01: DrawLevel01Screen(); break;
341 case LEVEL02: DrawLevel02Screen(); break;
342 case LEVEL03: DrawLevel03Screen(); break;
343 case LEVEL04: DrawLevel04Screen(); break;
344 case LEVEL05: DrawLevel05Screen(); break;
345 case LEVEL06: DrawLevel06Screen(); break;
346 case LEVEL07: DrawLevel07Screen(); break;
347 case LEVEL08: DrawLevel08Screen(); break;
348 case LEVEL09: DrawLevel09Screen(); break;
349 default: break;
350 }
351
352 if (onTransition) DrawTransition();
353
354 EndDrawing();
355 //----------------------------------------------------------------------------------
356}
357