You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

357 rivejä
11 KiB

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