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 | //---------------------------------------------------------------------------------- |
25 | static const int screenWidth = 1280; |
26 | static const int screenHeight = 720; |
27 | |
28 | static float transAlpha = 0; |
29 | static bool onTransition = false; |
30 | static bool transFadeOut = false; |
31 | static int transFromScreen = -1; |
32 | static int transToScreen = -1; |
33 | static int framesCounter = 0; |
34 | |
35 | static Music music; |
36 | |
37 | //---------------------------------------------------------------------------------- |
38 | // Local Functions Declaration |
39 | //---------------------------------------------------------------------------------- |
40 | void TransitionToScreen(int screen); |
41 | void UpdateTransition(void); |
42 | void DrawTransition(void); |
43 | |
44 | void UpdateDrawFrame(void); // Update and Draw one frame |
45 | |
46 | //---------------------------------------------------------------------------------- |
47 | // Main entry point |
48 | //---------------------------------------------------------------------------------- |
49 | int 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 | |
130 | void TransitionToScreen(int screen) |
131 | { |
132 | onTransition = true; |
133 | transFromScreen = currentScreen; |
134 | transToScreen = screen; |
135 | } |
136 | |
137 | void 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 | |
166 | void DrawTransition(void) |
167 | { |
168 | DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(BLACK, transAlpha)); |
169 | } |
170 | |
171 | // Update and Draw one frame |
172 | void 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 | |