|  |  | @ -30,21 +30,24 @@ const int screenWidth = 1280; | 
		
	
		
			
			|  |  |  | const int screenHeight = 720; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // 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; | 
		
	
		
			
			|  |  |  | static float transAlpha = 0.0f; | 
		
	
		
			
			|  |  |  | static bool onTransition = false; | 
		
	
		
			
			|  |  |  | static bool transFadeOut = false; | 
		
	
		
			
			|  |  |  | static int transFromScreen = -1; | 
		
	
		
			
			|  |  |  | static int transToScreen = -1; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // NOTE: Some global variables that require to be visible for all screens, | 
		
	
		
			
			|  |  |  | // are defined in screens.h (i.e. currentScreen) | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | //---------------------------------------------------------------------------------- | 
		
	
		
			
			|  |  |  | // Local Functions Declaration | 
		
	
		
			
			|  |  |  | //---------------------------------------------------------------------------------- | 
		
	
		
			
			|  |  |  | void TransitionToScreen(int screen); | 
		
	
		
			
			|  |  |  | void ChangeToScreen(int screen);    // No transition effect | 
		
	
		
			
			|  |  |  | void UpdateTransition(void); | 
		
	
		
			
			|  |  |  | void DrawTransition(void); | 
		
	
		
			
			|  |  |  | static void TransitionToScreen(int screen); | 
		
	
		
			
			|  |  |  | static void ChangeToScreen(int screen);    // No transition effect | 
		
	
		
			
			|  |  |  | static void UpdateTransition(void); | 
		
	
		
			
			|  |  |  | static void DrawTransition(void); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | void UpdateDrawFrame(void);         // Update and Draw one frame | 
		
	
		
			
			|  |  |  | static void UpdateDrawFrame(void);         // Update and Draw one frame | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | //static const char *GetExtension(const char *fileName); | 
		
	
		
			
			|  |  |  |  | 
		
	
	
		
			
				|  |  | @ -115,23 +118,32 @@ int main(int argc, char *argv[]) | 
		
	
		
			
			|  |  |  | UnloadSpriteFont(font); | 
		
	
		
			
			|  |  |  | UnloadMusicStream(music); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | CloseAudioDevice(); | 
		
	
		
			
			|  |  |  | CloseAudioDevice();     // Close audio context | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | CloseWindow();        // Close window and OpenGL context | 
		
	
		
			
			|  |  |  | CloseWindow();          // Close window and OpenGL context | 
		
	
		
			
			|  |  |  | //-------------------------------------------------------------------------------------- | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | return 0; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | void TransitionToScreen(int screen) | 
		
	
		
			
			|  |  |  | //---------------------------------------------------------------------------------- | 
		
	
		
			
			|  |  |  | // Module specific Functions Definition | 
		
	
		
			
			|  |  |  | //---------------------------------------------------------------------------------- | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Define transition to next screen | 
		
	
		
			
			|  |  |  | static void TransitionToScreen(int screen) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | onTransition = true; | 
		
	
		
			
			|  |  |  | transFadeOut = false; | 
		
	
		
			
			|  |  |  | transFromScreen = currentScreen; | 
		
	
		
			
			|  |  |  | transToScreen = screen; | 
		
	
		
			
			|  |  |  | transAlpha = 0.0f; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Change to next screen, no transition | 
		
	
		
			
			|  |  |  | void ChangeToScreen(int screen) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | // Unload current screen | 
		
	
		
			
			|  |  |  | switch (currentScreen) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | case LOGO: UnloadLogoScreen(); break; | 
		
	
	
		
			
				|  |  | @ -141,6 +153,7 @@ void ChangeToScreen(int screen) | 
		
	
		
			
			|  |  |  | default: break; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Init next screen | 
		
	
		
			
			|  |  |  | switch (screen) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | case LOGO: InitLogoScreen(); break; | 
		
	
	
		
			
				|  |  | @ -153,16 +166,23 @@ void ChangeToScreen(int screen) | 
		
	
		
			
			|  |  |  | currentScreen = screen; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Update transition effect | 
		
	
		
			
			|  |  |  | void UpdateTransition(void) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | if (!transFadeOut) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | transAlpha += 0.05f; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | printf("transAlpha: %f\n", transAlpha); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if (transAlpha >= 1.0) | 
		
	
		
			
			|  |  |  | // TODO: Investigate this! SO WEIRD! Comparing with 1.0f does not work! Compiler optimization??? | 
		
	
		
			
			|  |  |  | if (transAlpha > 1.00001f)   // Make sure alpha is greater than 1.0, to avoid last frame loading stop | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | transAlpha = 1.0; | 
		
	
		
			
			|  |  |  | printf("alpha on change: %e\n", transAlpha); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | transAlpha = 1.0f; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Unload current screen | 
		
	
		
			
			|  |  |  | switch (transFromScreen) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | case LOGO: UnloadLogoScreen(); break; | 
		
	
	
		
			
				|  |  | @ -172,31 +192,19 @@ void UpdateTransition(void) | 
		
	
		
			
			|  |  |  | default: break; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Load next screen | 
		
	
		
			
			|  |  |  | switch (transToScreen) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | case LOGO: | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | InitLogoScreen(); | 
		
	
		
			
			|  |  |  | currentScreen = LOGO; | 
		
	
		
			
			|  |  |  | } break; | 
		
	
		
			
			|  |  |  | case TITLE: | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | InitTitleScreen(); | 
		
	
		
			
			|  |  |  | currentScreen = TITLE; | 
		
	
		
			
			|  |  |  | } break; | 
		
	
		
			
			|  |  |  | case GAMEPLAY: | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | InitGameplayScreen(); | 
		
	
		
			
			|  |  |  | currentScreen = GAMEPLAY; | 
		
	
		
			
			|  |  |  | } break; | 
		
	
		
			
			|  |  |  | case ENDING: | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | InitEndingScreen(); | 
		
	
		
			
			|  |  |  | currentScreen = ENDING; | 
		
	
		
			
			|  |  |  | } break; | 
		
	
		
			
			|  |  |  | case LOGO: InitLogoScreen(); break; | 
		
	
		
			
			|  |  |  | case TITLE: InitTitleScreen(); break; | 
		
	
		
			
			|  |  |  | case GAMEPLAY: InitGameplayScreen(); break; | 
		
	
		
			
			|  |  |  | case ENDING: InitEndingScreen(); break; | 
		
	
		
			
			|  |  |  | default: break; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | currentScreen = transToScreen; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Activate fade out effect to next loaded screen | 
		
	
		
			
			|  |  |  | transFadeOut = true; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @ -204,9 +212,9 @@ void UpdateTransition(void) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | transAlpha -= 0.05f; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if (transAlpha <= i">0) | 
		
	
		
			
			|  |  |  | if (transAlpha <= f">0.0f) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | transAlpha = i">0; | 
		
	
		
			
			|  |  |  | transAlpha = f">0.0f; | 
		
	
		
			
			|  |  |  | transFadeOut = false; | 
		
	
		
			
			|  |  |  | onTransition = false; | 
		
	
		
			
			|  |  |  | transFromScreen = -1; | 
		
	
	
		
			
				|  |  | @ -215,6 +223,7 @@ void UpdateTransition(void) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Draw transition effect (full-screen rectangle) | 
		
	
		
			
			|  |  |  | void DrawTransition(void) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, transAlpha)); | 
		
	
	
		
			
				|  |  | @ -240,11 +249,7 @@ void UpdateDrawFrame(void) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | UpdateTitleScreen(); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if (FinishTitleScreen() == 1) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | StopMusicStream(music); | 
		
	
		
			
			|  |  |  | TransitionToScreen(GAMEPLAY); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (FinishTitleScreen() == 1) TransitionToScreen(GAMEPLAY); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | } break; | 
		
	
		
			
			|  |  |  | case GAMEPLAY: | 
		
	
	
		
			
				|  |  | @ -265,12 +270,9 @@ void UpdateDrawFrame(void) | 
		
	
		
			
			|  |  |  | default: break; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | else | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | // Update transition (fade-in, fade-out) | 
		
	
		
			
			|  |  |  | UpdateTransition(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | else UpdateTransition();    // Update transition (fade-in, fade-out) | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // TODO: Review! It breaks the game sometimes!!! | 
		
	
		
			
			|  |  |  | if (currentScreen != ENDING) UpdateMusicStream(music); | 
		
	
		
			
			|  |  |  | //---------------------------------------------------------------------------------- | 
		
	
		
			
			|  |  |  |  | 
		
	
	
		
			
				|  |  | @ -289,6 +291,7 @@ void UpdateDrawFrame(void) | 
		
	
		
			
			|  |  |  | default: break; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Draw full screen rectangle in front of everything | 
		
	
		
			
			|  |  |  | if (onTransition) DrawTransition(); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | //DrawFPS(10, 10); | 
		
	
	
		
			
				|  |  |  |