summaryrefslogtreecommitdiffhomepage
path: root/games/just_do_GGJ2015/src/just_do.c
diff options
context:
space:
mode:
Diffstat (limited to 'games/just_do_GGJ2015/src/just_do.c')
-rw-r--r--games/just_do_GGJ2015/src/just_do.c358
1 files changed, 358 insertions, 0 deletions
diff --git a/games/just_do_GGJ2015/src/just_do.c b/games/just_do_GGJ2015/src/just_do.c
new file mode 100644
index 00000000..beac9e14
--- /dev/null
+++ b/games/just_do_GGJ2015/src/just_do.c
@@ -0,0 +1,358 @@
+/*******************************************************************************************
+*
+* JUST DO - Global Game Jam 2015 Videogame
+* Experimental puzzle game that lets the user try to find a logic solution to
+* different shape-color-based situations.
+*
+* Developed by: Ramon Santamaria (Ray San)
+*
+* This game has been created using raylib (www.raylib.com)
+* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+*
+* raylib - Copyright (c) 2015 Ramon Santamaria (Ray San - [email protected])
+*
+********************************************************************************************/
+
+#include "raylib.h"
+#include "screens/screens.h" // NOTE: Defines currentScreen
+
+#if defined(PLATFORM_WEB)
+ #include <emscripten/emscripten.h>
+#endif
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+const int screenWidth = 1280; // Moved to screens.h
+const int screenHeight = 720; // Moved to screens.h
+
+// Required variables to manage screen transitions (fade-in, fade-out)
+float transAlpha = 0;
+bool onTransition = false;
+bool transFadeOut = false;
+int transFromScreen = -1;
+int transToScreen = -1;
+int framesCounter = 0;
+
+//static Sound levelWin;
+
+//----------------------------------------------------------------------------------
+// Local Functions Declaration
+//----------------------------------------------------------------------------------
+void TransitionToScreen(int screen);
+void UpdateTransition(void);
+void DrawTransition(void);
+
+void UpdateDrawFrame(void); // Update and Draw one frame
+
+//----------------------------------------------------------------------------------
+// Main entry point
+//----------------------------------------------------------------------------------
+int main(void)
+{
+ // Initialization
+ //---------------------------------------------------------
+ const char windowTitle[30] = "JUST DO";
+
+ //SetupFlags(FLAG_FULLSCREEN_MODE);
+ InitWindow(screenWidth, screenHeight, windowTitle);
+
+ // TODO: Load global data here (assets that must be available in all screens, i.e. fonts)
+ InitAudioDevice();
+
+ levelWin = LoadSound("resources/win.wav");
+
+ // Setup and Init first screen
+ currentScreen = LOGO;
+ InitLogoScreen();
+
+#if defined(PLATFORM_WEB)
+ emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
+#else
+ SetTargetFPS(60); // Set our game to run at 60 frames-per-second
+ //--------------------------------------------------------------------------------------
+
+ // Main game loop
+ while (!WindowShouldClose()) // Detect window close button or ESC key
+ {
+
+ if (IsKeyPressed(KEY_SPACE)) PlaySound(levelWin);
+
+ UpdateDrawFrame();
+ }
+#endif
+
+ // De-Initialization
+ //--------------------------------------------------------------------------------------
+
+ // TODO: Unload all global loaded data (i.e. fonts) here!
+ UnloadSound(levelWin);
+
+ CloseAudioDevice();
+
+ CloseWindow(); // Close window and OpenGL context
+ //--------------------------------------------------------------------------------------
+
+ return 0;
+}
+
+//----------------------------------------------------------------------------------
+// Local Functions Definition
+//----------------------------------------------------------------------------------
+void TransitionToScreen(int screen)
+{
+ onTransition = true;
+ transFromScreen = currentScreen;
+ transToScreen = screen;
+}
+
+void UpdateTransition(void)
+{
+ if (!transFadeOut)
+ {
+ transAlpha += 0.02f;
+
+ if (transAlpha >= 1.0)
+ {
+ transAlpha = 1.0;
+ currentScreen = transToScreen;
+ transFadeOut = true;
+ framesCounter = 0;
+ }
+ }
+ else // Transition fade out logic
+ {
+ transAlpha -= 0.02f;
+
+ if (transAlpha <= 0)
+ {
+ transAlpha = 0;
+ transFadeOut = false;
+ onTransition = false;
+ transFromScreen = -1;
+ transToScreen = -1;
+ }
+ }
+}
+
+void DrawTransition(void)
+{
+ DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, transAlpha));
+}
+
+void UpdateDrawFrame(void)
+{
+ // Update
+ //----------------------------------------------------------------------------------
+ if (!onTransition)
+ {
+ if (IsKeyPressed('0'))
+ {
+ TransitionToScreen(LEVEL00);
+ InitLevel00Screen();
+ }
+ else if (IsKeyPressed('1'))
+ {
+ TransitionToScreen(LEVEL01);
+ InitLevel01Screen();
+ }
+ else if (IsKeyPressed('2'))
+ {
+ TransitionToScreen(LEVEL02);
+ InitLevel02Screen();
+ }
+ else if (IsKeyPressed('3'))
+ {
+ TransitionToScreen(LEVEL03);
+ InitLevel03Screen();
+ }
+ else if (IsKeyPressed('4'))
+ {
+ TransitionToScreen(LEVEL04);
+ InitLevel04Screen();
+ }
+ else if (IsKeyPressed('5'))
+ {
+ TransitionToScreen(LEVEL05);
+ InitLevel05Screen();
+ }
+ else if (IsKeyPressed('6'))
+ {
+ TransitionToScreen(LEVEL06);
+ InitLevel06Screen();
+ }
+ else if (IsKeyPressed('7'))
+ {
+ TransitionToScreen(LEVEL07);
+ InitLevel07Screen();
+ }
+ else if (IsKeyPressed('8'))
+ {
+ TransitionToScreen(LEVEL08);
+ InitLevel08Screen();
+ }
+ else if (IsKeyPressed('9'))
+ {
+ TransitionToScreen(LEVEL09);
+ InitLevel08Screen();
+ }
+
+ switch(currentScreen)
+ {
+ case LOGO:
+ {
+ UpdateLogoScreen();
+
+ if (FinishLogoScreen())
+ {
+ UnloadLogoScreen();
+ TransitionToScreen(LEVEL00);
+ InitLevel00Screen();
+
+ PlayMusicStream("resources/ambient.ogg");
+ SetMusicVolume(0.6f);
+ }
+ } break;
+ case LEVEL00:
+ {
+ UpdateLevel00Screen();
+
+ if (FinishLevel00Screen())
+ {
+ UnloadLevel00Screen();
+ TransitionToScreen(LEVEL01);
+ InitLevel01Screen();
+ }
+ } break;
+ case LEVEL01:
+ {
+ UpdateLevel01Screen();
+
+ if (FinishLevel01Screen())
+ {
+ UnloadLevel01Screen();
+ TransitionToScreen(LEVEL02);
+ InitLevel02Screen();
+ }
+ } break;
+ case LEVEL02:
+ {
+ UpdateLevel02Screen();
+
+ if (FinishLevel02Screen())
+ {
+ UnloadLevel02Screen();
+ TransitionToScreen(LEVEL03);
+ InitLevel03Screen();
+ }
+ } break;
+ case LEVEL03:
+ {
+ UpdateLevel03Screen();
+
+ if (FinishLevel03Screen())
+ {
+ UnloadLevel03Screen();
+ TransitionToScreen(LEVEL04);
+ InitLevel04Screen();
+ }
+ } break;
+ case LEVEL04:
+ {
+ UpdateLevel04Screen();
+
+ if (FinishLevel04Screen())
+ {
+ UnloadLevel04Screen();
+ TransitionToScreen(LEVEL05);
+ InitLevel05Screen();
+ }
+ } break;
+ case LEVEL05:
+ {
+ UpdateLevel05Screen();
+
+ if (FinishLevel05Screen())
+ {
+ UnloadLevel05Screen();
+ TransitionToScreen(LEVEL06);
+ InitLevel06Screen();
+ }
+ } break;
+ case LEVEL06:
+ {
+ UpdateLevel06Screen();
+
+ if (FinishLevel06Screen())
+ {
+ UnloadLevel06Screen();
+ TransitionToScreen(LEVEL07);
+ InitLevel07Screen();
+ }
+ } break;
+ case LEVEL07:
+ {
+ UpdateLevel07Screen();
+
+ if (FinishLevel07Screen())
+ {
+ UnloadLevel07Screen();
+ TransitionToScreen(LEVEL08);
+ InitLevel08Screen();
+ }
+ } break;
+ case LEVEL08:
+ {
+ UpdateLevel08Screen();
+
+ if (FinishLevel08Screen())
+ {
+ UnloadLevel08Screen();
+ TransitionToScreen(LEVEL09);
+ InitLevel09Screen();
+ }
+ } break;
+ case LEVEL09:
+ {
+ UpdateLevel09Screen();
+
+ if (FinishLevel09Screen())
+ {
+ UnloadLevel09Screen();
+ TransitionToScreen(LEVEL00);
+ InitLevel00Screen();
+ }
+ } break;
+ default: break;
+ }
+ }
+ else UpdateTransition(); // Update transition (fade-in, fade-out)
+ //----------------------------------------------------------------------------------
+
+ // Draw
+ //----------------------------------------------------------------------------------
+ BeginDrawing();
+
+ ClearBackground(RAYWHITE);
+
+ switch(currentScreen)
+ {
+ case LOGO: DrawLogoScreen(); break;
+ case LEVEL00: DrawLevel00Screen(); break;
+ case LEVEL01: DrawLevel01Screen(); break;
+ case LEVEL02: DrawLevel02Screen(); break;
+ case LEVEL03: DrawLevel03Screen(); break;
+ case LEVEL04: DrawLevel04Screen(); break;
+ case LEVEL05: DrawLevel05Screen(); break;
+ case LEVEL06: DrawLevel06Screen(); break;
+ case LEVEL07: DrawLevel07Screen(); break;
+ case LEVEL08: DrawLevel08Screen(); break;
+ case LEVEL09: DrawLevel09Screen(); break;
+ default: break;
+ }
+
+ if (onTransition) DrawTransition();
+
+ EndDrawing();
+ //----------------------------------------------------------------------------------
+} \ No newline at end of file