Browse Source

Decoupled some modules: audio, camera, gestures

Added window drop files support
pull/25/head
raysan5 9 years ago
parent
commit
c0d8ae7f4d
1 changed files with 77 additions and 78 deletions
  1. +77
    -78
      src/core.c

+ 77
- 78
src/core.c View File

@ -17,7 +17,7 @@
* *
* On PLATFORM_RPI, graphic device is managed by EGL and input system is coded in raw mode. * On PLATFORM_RPI, graphic device is managed by EGL and input system is coded in raw mode.
* *
* Copyright (c) 2014 Ramon Santamaria (n">Ray San - raysan@raysanweb.com) * Copyright (c) 2014 Ramon Santamaria (err">@raysan5)
* *
* This software is provided "as-is", without any express or implied warranty. In no event * This software is provided "as-is", without any express or implied warranty. In no event
* will the authors be held liable for any damages arising from the use of this software. * will the authors be held liable for any damages arising from the use of this software.
@ -164,7 +164,7 @@ static bool customCursor = false; // Tracks if custom cursor has been
static bool cursorOnScreen = false; // Tracks if cursor is inside client area static bool cursorOnScreen = false; // Tracks if cursor is inside client area
static Texture2D cursor; // Cursor texture static Texture2D cursor; // Cursor texture
static Vector2 mousePosition; static Vector2 mousePosition; // Mouse position on screen
static char previousKeyState[512] = { 0 }; // Required to check if key pressed/released once static char previousKeyState[512] = { 0 }; // Required to check if key pressed/released once
static char currentKeyState[512] = { 0 }; // Required to check if key pressed/released once static char currentKeyState[512] = { 0 }; // Required to check if key pressed/released once
@ -179,9 +179,12 @@ static int previousMouseWheelY = 0; // Required to track mouse wheel var
static int currentMouseWheelY = 0; // Required to track mouse wheel variation static int currentMouseWheelY = 0; // Required to track mouse wheel variation
static int exitKey = KEY_ESCAPE; // Default exit key (ESC) static int exitKey = KEY_ESCAPE; // Default exit key (ESC)
static int lastKeyPressed = -1; static int lastKeyPressed = -1; // Register last key pressed
static bool cursorHidden; static bool cursorHidden; // Track if cursor is hidden
static char **dropFilesPath; // Store dropped files paths as strings
static int dropFilesCount = 0; // Count stored strings
#endif #endif
static double currentTime, previousTime; // Used to track timmings static double currentTime, previousTime; // Used to track timmings
@ -189,8 +192,8 @@ static double updateTime, drawTime; // Time measures for update and draw
static double frameTime; // Time measure for one frame static double frameTime; // Time measure for one frame
static double targetTime = 0.0; // Desired time for one frame, if 0 not applied static double targetTime = 0.0; // Desired time for one frame, if 0 not applied
static char configFlags = 0; static char configFlags = 0; // Configuration flags (bit based)
static bool showLogo = false; static bool showLogo = false; // Track if showing logo at init is enabled
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// Other Modules Functions Declaration (required by core) // Other Modules Functions Declaration (required by core)
@ -198,19 +201,6 @@ static bool showLogo = false;
extern void LoadDefaultFont(void); // [Module: text] Loads default font on InitWindow() extern void LoadDefaultFont(void); // [Module: text] Loads default font on InitWindow()
extern void UnloadDefaultFont(void); // [Module: text] Unloads default font from GPU memory extern void UnloadDefaultFont(void); // [Module: text] Unloads default font from GPU memory
extern void UpdateMusicStream(void); // [Module: audio] Updates buffers for music streaming
extern Vector2 GetRawPosition(void);
extern void ResetGestures(void);
#if defined(PLATFORM_ANDROID)
extern void InitAndroidGestures(struct android_app *app);
#endif
#if defined(PLATFORM_WEB)
extern void InitWebGestures(void); // [Module: gestures] Initializes emscripten gestures for web
#endif
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// Module specific Functions Declaration // Module specific Functions Declaration
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
@ -241,7 +231,11 @@ static void CharCallback(GLFWwindow *window, unsigned int key);
static void ScrollCallback(GLFWwindow *window, double xoffset, double yoffset); // GLFW3 Srolling Callback, runs on mouse wheel static void ScrollCallback(GLFWwindow *window, double xoffset, double yoffset); // GLFW3 Srolling Callback, runs on mouse wheel
static void CursorEnterCallback(GLFWwindow *window, int enter); // GLFW3 Cursor Enter Callback, cursor enters client area static void CursorEnterCallback(GLFWwindow *window, int enter); // GLFW3 Cursor Enter Callback, cursor enters client area
static void WindowSizeCallback(GLFWwindow *window, int width, int height); // GLFW3 WindowSize Callback, runs when window is resized static void WindowSizeCallback(GLFWwindow *window, int width, int height); // GLFW3 WindowSize Callback, runs when window is resized
static void WindowIconifyCallback(GLFWwindow* window, int iconified); // GLFW3 WindowIconify Callback, runs when window is minimized/restored static void WindowIconifyCallback(GLFWwindow *window, int iconified); // GLFW3 WindowIconify Callback, runs when window is minimized/restored
#endif
#if defined(PLATFORM_DESKTOP)
static void WindowDropCallback(GLFWwindow *window, int count, const char **paths); // GLFW3 Window Drop Callback, runs when drop files into window
#endif #endif
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI)
@ -284,10 +278,6 @@ void InitWindow(int width, int height, const char *title)
InitGamepad(); // Gamepad init InitGamepad(); // Gamepad init
#endif #endif
#if defined(PLATFORM_WEB)
InitWebGestures(); // Init touch input events for web
#endif
mousePosition.x = screenWidth/2; mousePosition.x = screenWidth/2;
mousePosition.y = screenHeight/2; mousePosition.y = screenHeight/2;
@ -341,7 +331,7 @@ void InitWindow(int width, int height, struct android_app *state)
//state->userData = &engine; //state->userData = &engine;
app->onAppCmd = AndroidCommandCallback; app->onAppCmd = AndroidCommandCallback;
InitAndroidGestures(app); o">//InitGesturesSystem(app); // NOTE: Must be called by user
InitAssetManager(app->activity->assetManager); InitAssetManager(app->activity->assetManager);
@ -412,6 +402,16 @@ bool WindowShouldClose(void)
#endif #endif
} }
// Detect if window has been minimized (or lost focus)
bool IsWindowMinimized(void)
{
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
return windowMinimized;
#else
return false;
#endif
}
// Fullscreen toggle // Fullscreen toggle
void ToggleFullscreen(void) void ToggleFullscreen(void)
{ {
@ -497,14 +497,8 @@ void EndDrawing(void)
SwapBuffers(); // Copy back buffer to front buffer SwapBuffers(); // Copy back buffer to front buffer
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB)
ResetGestures();
#endif
PollInputEvents(); // Poll user events PollInputEvents(); // Poll user events
UpdateMusicStream(); // NOTE: Function checks if music is enabled
currentTime = GetTime(); currentTime = GetTime();
drawTime = currentTime - previousTime; drawTime = currentTime - previousTime;
previousTime = currentTime; previousTime = currentTime;
@ -643,6 +637,34 @@ void ShowLogo(void)
showLogo = true; showLogo = true;
} }
// Check if a file have been dropped into window
bool IsFileDropped(void)
{
if (dropFilesCount > 0) return true;
else return false;
}
// Retrieve dropped files into window
char **GetDroppedFiles(int *count)
{
*count = dropFilesCount;
return dropFilesPath;
}
// Clear dropped files paths buffer
void ClearDroppedFiles(void)
{
if (dropFilesCount > 0)
{
for (int i = 0; i < dropFilesCount; i++) free(dropFilesPath[i]);
free(dropFilesPath);
dropFilesCount = 0;
}
}
// TODO: Gives the ray trace from mouse position
Ray GetMouseRay(Vector2 mousePosition, Camera camera) Ray GetMouseRay(Vector2 mousePosition, Camera camera)
{ {
Ray ray; Ray ray;
@ -933,40 +955,6 @@ bool IsGamepadButtonUp(int gamepad, int button)
} }
#endif #endif
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB)
// Returns touch position X
int GetTouchX(void)
{
return (int)GetRawPosition().x;
}
// Returns touch position Y
int GetTouchY(void)
{
return (int)GetRawPosition().y;
}
// Returns touch position XY
Vector2 GetTouchPosition(void)
{
Vector2 position = GetRawPosition();
if ((screenWidth > displayWidth) || (screenHeight > displayHeight))
{
// TODO: Seems to work ok but... review!
position.x = position.x*((float)screenWidth / (float)(displayWidth - renderOffsetX)) - renderOffsetX/2;
position.y = position.y*((float)screenHeight / (float)(displayHeight - renderOffsetY)) - renderOffsetY/2;
}
else
{
position.x = position.x*((float)renderWidth / (float)displayWidth) - renderOffsetX/2;
position.y = position.y*((float)renderHeight / (float)displayHeight) - renderOffsetY/2;
}
return position;
}
#endif
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// Module specific Functions Definition // Module specific Functions Definition
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
@ -1074,6 +1062,9 @@ static void InitDisplay(int width, int height)
glfwSetCharCallback(window, CharCallback); glfwSetCharCallback(window, CharCallback);
glfwSetScrollCallback(window, ScrollCallback); glfwSetScrollCallback(window, ScrollCallback);
glfwSetWindowIconifyCallback(window, WindowIconifyCallback); glfwSetWindowIconifyCallback(window, WindowIconifyCallback);
#if defined(PLATFORM_DESKTOP)
glfwSetDropCallback(window, WindowDropCallback);
#endif
glfwMakeContextCurrent(window); glfwMakeContextCurrent(window);
@ -1317,20 +1308,28 @@ static void WindowSizeCallback(GLFWwindow *window, int width, int height)
// GLFW3 WindowIconify Callback, runs when window is minimized/restored // GLFW3 WindowIconify Callback, runs when window is minimized/restored
static void WindowIconifyCallback(GLFWwindow* window, int iconified) static void WindowIconifyCallback(GLFWwindow* window, int iconified)
{ {
if (iconified) if (iconified) windowMinimized = true; // The window was iconified
p">{ k">else windowMinimized = false; // The window was restored
// The window was iconified }
PauseMusicStream(); #endif
windowMinimized = true; #if defined(PLATFORM_DESKTOP)
} // GLFW3 Window Drop Callback, runs when drop files into window
else // NOTE: Paths are stored in dinamic memory for further retrieval
// Everytime new files are dropped, old ones are discarded
static void WindowDropCallback(GLFWwindow *window, int count, const char **paths)
{
ClearDroppedFiles();
dropFilesPath = (char **)malloc(sizeof(char *)*count);
for (int i = 0; i < count; i++)
{ {
// The window was restored dropFilesPath[i] = (char *)malloc(sizeof(char)*256); // Max path length set to 256 char
ResumeMusicStream(); strcpy(dropFilesPath[i], paths[i]);
windowMinimized = false;
} }
dropFilesCount = count;
} }
#endif #endif
@ -1379,7 +1378,7 @@ static void AndroidCommandCallback(struct android_app *app, int32_t cmd)
case APP_CMD_GAINED_FOCUS: case APP_CMD_GAINED_FOCUS:
{ {
TraceLog(INFO, "APP_CMD_GAINED_FOCUS"); TraceLog(INFO, "APP_CMD_GAINED_FOCUS");
ResumeMusicStream(); o">//ResumeMusicStream();
} break; } break;
case APP_CMD_PAUSE: case APP_CMD_PAUSE:
{ {
@ -1389,7 +1388,7 @@ static void AndroidCommandCallback(struct android_app *app, int32_t cmd)
{ {
//DrawFrame(); //DrawFrame();
TraceLog(INFO, "APP_CMD_LOST_FOCUS"); TraceLog(INFO, "APP_CMD_LOST_FOCUS");
PauseMusicStream(); o">//PauseMusicStream();
} break; } break;
case APP_CMD_TERM_WINDOW: case APP_CMD_TERM_WINDOW:
{ {

||||||
x
 
000:0
Loading…
Cancel
Save