1/*******************************************************************************************
2*
3* Koala Seasons [emegeme 2015]
4*
5* Koala Seasons is a runner, you must survive as long as possible jumping from tree to tree
6* Ready to start the adventure? How long can you survive?
7*
8* This game has been created using raylib 1.5 (www.raylib.com)
9* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
10*
11* Copyright (c) 2014-2016 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//----------------------------------------------------------------------------------
25static const int screenWidth = 1280;
26static const int screenHeight = 720;
27
28static float transAlpha = 0;
29static bool onTransition = false;
30static bool transFadeOut = false;
31static int transFromScreen = -1;
32static int transToScreen = -1;
33static int framesCounter = 0;
34
35static Music music;
36
37//----------------------------------------------------------------------------------
38// Local Functions Declaration
39//----------------------------------------------------------------------------------
40void TransitionToScreen(int screen);
41void UpdateTransition(void);
42void DrawTransition(void);
43
44void UpdateDrawFrame(void); // Update and Draw one frame
45
46//----------------------------------------------------------------------------------
47// Main entry point
48//----------------------------------------------------------------------------------
49int main(void)
50{
51 // Initialization (Note windowTitle is unused on Android)
52 //---------------------------------------------------------
53 InitWindow(screenWidth, screenHeight, "KOALA SEASONS");
54
55 // Load global data here (assets that must be available in all screens, i.e. fonts)
56 font = LoadFont("resources/graphics/mainfont.png");
57
58 atlas01 = LoadTexture("resources/graphics/atlas01.png");
59 atlas02 = LoadTexture("resources/graphics/atlas02.png");
60
61#if defined(PLATFORM_WEB) || defined(PLATFORM_RPI) || defined(PLATFORM_ANDROID)
62 colorBlend = LoadShader(0, "resources/shaders/glsl100/blend_color.fs");
63#else
64 colorBlend = LoadShader(0, "resources/shaders/glsl330/blend_color.fs");
65#endif
66
67 InitAudioDevice();
68
69 // Load sounds data
70 fxJump = LoadSound("resources/audio/jump.ogg");
71 fxDash = LoadSound("resources/audio/dash.ogg");
72 fxEatLeaves = LoadSound("resources/audio/eat_leaves.ogg");
73 fxHitResin = LoadSound("resources/audio/resin_hit.ogg");
74 fxWind = LoadSound("resources/audio/wind_sound.ogg");
75 fxDieSnake = LoadSound("resources/audio/snake_die.ogg");
76 fxDieDingo = LoadSound("resources/audio/dingo_die.ogg");
77 fxDieOwl = LoadSound("resources/audio/owl_die.ogg");
78
79 music = LoadMusicStream("resources/audio/jngl.xm");
80 PlayMusicStream(music);
81 SetMusicVolume(music, 2.0f);
82
83 // Define and init first screen
84 // NOTE: currentScreen is defined in screens.h as a global variable
85 currentScreen = TITLE;
86 InitTitleScreen();
87
88#if defined(PLATFORM_WEB)
89 emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
90#else
91 SetTargetFPS(60); // Set our game to run at 60 frames-per-second
92 //--------------------------------------------------------------------------------------
93
94 // Main game loop
95 while (!WindowShouldClose()) UpdateDrawFrame();
96#endif
97
98 // De-Initialization
99 //--------------------------------------------------------------------------------------
100 UnloadEndingScreen();
101 UnloadTitleScreen();
102 UnloadGameplayScreen();
103 UnloadLogoScreen();
104
105 UnloadTexture(atlas01);
106 UnloadTexture(atlas02);
107 UnloadFont(font);
108
109 UnloadShader(colorBlend); // Unload color overlay blending shader
110
111 UnloadSound(fxJump);
112 UnloadSound(fxDash);
113 UnloadSound(fxEatLeaves);
114 UnloadSound(fxHitResin);
115 UnloadSound(fxWind);
116 UnloadSound(fxDieSnake);
117 UnloadSound(fxDieDingo);
118 UnloadSound(fxDieOwl);
119
120 UnloadMusicStream(music);
121
122 CloseAudioDevice(); // Close audio device
123
124 CloseWindow(); // Close window and OpenGL context
125 //--------------------------------------------------------------------------------------
126
127 return 0;
128}
129
130void TransitionToScreen(int screen)
131{
132 onTransition = true;
133 transFromScreen = currentScreen;
134 transToScreen = screen;
135}
136
137void UpdateTransition(void)
138{
139 if (!transFadeOut)
140 {
141 transAlpha += 0.05f;
142
143 if (transAlpha >= 1.0)
144 {
145 transAlpha = 1.0;
146 currentScreen = transToScreen;
147 transFadeOut = true;
148 framesCounter = 0;
149 }
150 }
151 else // Transition fade out logic
152 {
153 transAlpha -= 0.05f;
154
155 if (transAlpha <= 0)
156 {
157 transAlpha = 0;
158 transFadeOut = false;
159 onTransition = false;
160 transFromScreen = -1;
161 transToScreen = -1;
162 }
163 }
164}
165
166void DrawTransition(void)
167{
168 DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(BLACK, transAlpha));
169}
170
171// Update and Draw one frame
172void UpdateDrawFrame(void)
173{
174 // Update
175 //----------------------------------------------------------------------------------
176 if (!onTransition)
177 {
178 switch (currentScreen)
179 {
180 case LOGO:
181 {
182 UpdateLogoScreen();
183
184 if (FinishLogoScreen()) TransitionToScreen(TITLE);
185
186 } break;
187 case TITLE:
188 {
189 UpdateTitleScreen();
190
191 // NOTE: FinishTitleScreen() return an int defining the screen to jump to
192 if (FinishTitleScreen() == 1)
193 {
194 UnloadTitleScreen();
195 //currentScreen = OPTIONS;
196 //InitOptionsScreen();
197 }
198 else if (FinishTitleScreen() == 2)
199 {
200 UnloadTitleScreen();
201
202 InitGameplayScreen();
203 TransitionToScreen(GAMEPLAY);
204 }
205 } break;
206 case GAMEPLAY:
207 {
208 UpdateGameplayScreen();
209
210 if (FinishGameplayScreen())
211 {
212 UnloadGameplayScreen();
213
214 InitEndingScreen();
215 TransitionToScreen(ENDING);
216 }
217 } break;
218 case ENDING:
219 {
220 UpdateEndingScreen();
221
222 if (FinishEndingScreen())
223 {
224 UnloadEndingScreen();
225
226 InitGameplayScreen();
227 TransitionToScreen(GAMEPLAY);
228 }
229 } break;
230 default: break;
231 }
232 }
233 else UpdateTransition();
234
235 UpdateMusicStream(music);
236 //----------------------------------------------------------------------------------
237
238 // Draw
239 //----------------------------------------------------------------------------------
240 BeginDrawing();
241
242 ClearBackground(WHITE);
243
244 switch (currentScreen)
245 {
246 case LOGO: DrawLogoScreen(); break;
247 case TITLE: DrawTitleScreen(); break;
248 case GAMEPLAY: DrawGameplayScreen(); break;
249 case ENDING: DrawEndingScreen(); break;
250 default: break;
251 }
252
253 if (onTransition) DrawTransition();
254
255 DrawRectangle(GetScreenWidth() - 200, GetScreenHeight() - 50, 200, 40, Fade(WHITE, 0.6f));
256 DrawText("ALPHA VERSION", GetScreenWidth() - 180, GetScreenHeight() - 40, 20, DARKGRAY);
257
258 EndDrawing();
259 //----------------------------------------------------------------------------------
260}
261