|
|
@ -315,14 +315,12 @@ const char *TextFormat(const char *text, ...); // Formatting of text with |
|
|
|
#endif |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions ">Definition - Window and OpenGL Context Functions |
|
|
|
// Module Functions l">Definition: Window and Graphics Device |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// NOTE: Multiple window/display/monitor management functions have been moved to platform-specific modules |
|
|
|
|
|
|
|
// Platform-specific functions: |
|
|
|
//void InitWindow(int width, int height, const char *title); |
|
|
|
//void CloseWindow(void); |
|
|
|
// NOTE: Functions with a platform-specific implementation on rcore_<platform>.c |
|
|
|
//void InitWindow(int width, int height, const char *title) |
|
|
|
//void CloseWindow(void) |
|
|
|
//bool WindowShouldClose(void) |
|
|
|
//bool IsWindowHidden(void) |
|
|
|
//bool IsWindowMinimized(void) |
|
|
@ -364,9 +362,6 @@ const char *TextFormat(const char *text, ...); // Formatting of text with |
|
|
|
//void HideCursor(void) |
|
|
|
//void EnableCursor(void) |
|
|
|
//void DisableCursor(void) |
|
|
|
//double GetTime(void) |
|
|
|
//void TakeScreenshot(const char *fileName) |
|
|
|
//void OpenURL(const char *url) |
|
|
|
|
|
|
|
|
|
|
|
// Check if window has been initialized successfully |
|
|
@ -435,6 +430,19 @@ bool IsCursorOnScreen(void) |
|
|
|
return CORE.Input.Mouse.cursorOnScreen; |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: Custom frame control |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// NOTE: Functions with a platform-specific implementation on rcore_<platform>.c |
|
|
|
//void SwapScreenBuffer(void); |
|
|
|
//void PollInputEvents(void); |
|
|
|
//void WaitTime(double seconds); |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: Screen Drawing |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Set background color (framebuffer clear color) |
|
|
|
void ClearBackground(Color color) |
|
|
|
{ |
|
|
@ -741,6 +749,10 @@ void EndScissorMode(void) |
|
|
|
rlDisableScissorTest(); |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: VR Stereo Rendering |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Begin VR drawing configuration |
|
|
|
void BeginVrStereoMode(VrStereoConfig config) |
|
|
|
{ |
|
|
@ -837,6 +849,10 @@ void UnloadVrStereoConfig(VrStereoConfig config) |
|
|
|
TRACELOG(LOG_INFO, "UnloadVrStereoConfig not implemented in rcore.c"); |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: Shaders Management |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Load shader from files and bind default locations |
|
|
|
// NOTE: If shader string is NULL, using default vertex/fragment shaders |
|
|
|
Shader LoadShader(const char *vsFileName, const char *fsFileName) |
|
|
@ -1002,6 +1018,10 @@ void SetShaderValueTexture(Shader shader, int locIndex, Texture2D texture) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: Screen-space Queries |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Get a ray trace from mouse position |
|
|
|
Ray GetMouseRay(Vector2 mouse, Camera camera) |
|
|
|
{ |
|
|
@ -1161,6 +1181,13 @@ Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera) |
|
|
|
return (Vector2){ transform.x, transform.y }; |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: Timming |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// NOTE: Functions with a platform-specific implementation on rcore_<platform>.c |
|
|
|
//double GetTime(void) |
|
|
|
|
|
|
|
// Set target FPS (maximum) |
|
|
|
void SetTargetFPS(int fps) |
|
|
|
{ |
|
|
@ -1209,6 +1236,63 @@ float GetFrameTime(void) |
|
|
|
return (float)CORE.Time.frame; |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: Misc |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// NOTE: Functions with a platform-specific implementation on rcore_<platform>.c |
|
|
|
//void OpenURL(const char *url) |
|
|
|
|
|
|
|
// Get a random value between min and max (both included) |
|
|
|
// WARNING: Ranges higher than RAND_MAX will return invalid results |
|
|
|
// More specifically, if (max - min) > INT_MAX there will be an overflow, |
|
|
|
// and otherwise if (max - min) > RAND_MAX the random value will incorrectly never exceed a certain threshold |
|
|
|
int GetRandomValue(int min, int max) |
|
|
|
{ |
|
|
|
if (min > max) |
|
|
|
{ |
|
|
|
int tmp = max; |
|
|
|
max = min; |
|
|
|
min = tmp; |
|
|
|
} |
|
|
|
|
|
|
|
if ((unsigned int)(max - min) > (unsigned int)RAND_MAX) |
|
|
|
{ |
|
|
|
TRACELOG(LOG_WARNING, "Invalid GetRandomValue() arguments, range should not be higher than %i", RAND_MAX); |
|
|
|
} |
|
|
|
|
|
|
|
return (rand()%(abs(max - min) + 1) + min); |
|
|
|
} |
|
|
|
|
|
|
|
// Set the seed for the random number generator |
|
|
|
void SetRandomSeed(unsigned int seed) |
|
|
|
{ |
|
|
|
srand(seed); |
|
|
|
} |
|
|
|
|
|
|
|
// Takes a screenshot of current screen (saved a .png) |
|
|
|
void TakeScreenshot(const char *fileName) |
|
|
|
{ |
|
|
|
#if defined(SUPPORT_MODULE_RTEXTURES) |
|
|
|
// Security check to (partially) avoid malicious code |
|
|
|
if (strchr(fileName, '\'') != NULL) { TRACELOG(LOG_WARNING, "SYSTEM: Provided fileName could be potentially malicious, avoid [\'] character"); return; } |
|
|
|
|
|
|
|
Vector2 scale = GetWindowScaleDPI(); |
|
|
|
unsigned char *imgData = rlReadScreenPixels((int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y)); |
|
|
|
Image image = { imgData, (int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y), 1, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 }; |
|
|
|
|
|
|
|
char path[512] = { 0 }; |
|
|
|
strcpy(path, TextFormat("%s/%s", CORE.Storage.basePath, fileName)); |
|
|
|
|
|
|
|
ExportImage(image, path); // WARNING: Module required: rtextures |
|
|
|
RL_FREE(imgData); |
|
|
|
|
|
|
|
TRACELOG(LOG_INFO, "SYSTEM: [%s] Screenshot taken successfully", path); |
|
|
|
#else |
|
|
|
TRACELOG(LOG_WARNING,"IMAGE: ExportImage() requires module: rtextures"); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
// Setup window configuration flags (view FLAGS) |
|
|
|
// NOTE: This function is expected to be called before window creation, |
|
|
|
// because it sets up some flags for the window creation process. |
|
|
@ -1221,7 +1305,7 @@ void SetConfigFlags(unsigned int flags) |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: FileSystem |
|
|
|
// Module Functions Definition: File system |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Check if the file exists |
|
|
@ -1669,36 +1753,9 @@ long GetFileModTime(const char *fileName) |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: Misc |
|
|
|
// Module Functions Definition: Compression and Encoding |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Get a random value between min and max (both included) |
|
|
|
// WARNING: Ranges higher than RAND_MAX will return invalid results |
|
|
|
// More specifically, if (max - min) > INT_MAX there will be an overflow, |
|
|
|
// and otherwise if (max - min) > RAND_MAX the random value will incorrectly never exceed a certain threshold |
|
|
|
int GetRandomValue(int min, int max) |
|
|
|
{ |
|
|
|
if (min > max) |
|
|
|
{ |
|
|
|
int tmp = max; |
|
|
|
max = min; |
|
|
|
min = tmp; |
|
|
|
} |
|
|
|
|
|
|
|
if ((unsigned int)(max - min) > (unsigned int)RAND_MAX) |
|
|
|
{ |
|
|
|
TRACELOG(LOG_WARNING, "Invalid GetRandomValue() arguments, range should not be higher than %i", RAND_MAX); |
|
|
|
} |
|
|
|
|
|
|
|
return (rand()%(abs(max - min) + 1) + min); |
|
|
|
} |
|
|
|
|
|
|
|
// Set the seed for the random number generator |
|
|
|
void SetRandomSeed(unsigned int seed) |
|
|
|
{ |
|
|
|
srand(seed); |
|
|
|
} |
|
|
|
|
|
|
|
// Compress data (DEFLATE algorithm) |
|
|
|
unsigned char *CompressData(const unsigned char *data, int dataSize, int *compDataSize) |
|
|
|
{ |
|
|
@ -1841,26 +1898,9 @@ unsigned char *DecodeDataBase64(const unsigned char *data, int *outputSize) |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: Inputs |
|
|
|
// Module Functions Definition: Inputspan> Handling: Keyboard |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Platform-specific functions |
|
|
|
//void SetExitKey(int key) |
|
|
|
//const char *GetGamepadName(int gamepad) |
|
|
|
//int GetGamepadAxisCount(int gamepad) |
|
|
|
//int SetGamepadMappings(const char *mappings) |
|
|
|
//int GetMouseX(void) |
|
|
|
//int GetMouseY(void) |
|
|
|
//Vector2 GetMousePosition(void) |
|
|
|
//void SetMousePosition(int x, int y) |
|
|
|
//float GetMouseWheelMove(void) |
|
|
|
//void SetMouseCursor(int cursor) |
|
|
|
//int GetTouchX(void) |
|
|
|
//int GetTouchY(void) |
|
|
|
//Vector2 GetTouchPosition(int index) |
|
|
|
//void SwapScreenBuffer(void) |
|
|
|
//void PollInputEvents(void) |
|
|
|
|
|
|
|
// Check if a key has been pressed once |
|
|
|
bool IsKeyPressed(int key) |
|
|
|
{ |
|
|
@ -1971,6 +2011,22 @@ int GetCharPressed(void) |
|
|
|
return value; |
|
|
|
} |
|
|
|
|
|
|
|
// Set a custom key to exit program |
|
|
|
// NOTE: default exitKey is set to ESCAPE |
|
|
|
void SetExitKey(int key) |
|
|
|
{ |
|
|
|
CORE.Input.Keyboard.exitKey = key; |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: Input Handling: Gamepad |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// NOTE: Functions with a platform-specific implementation on rcore_<platform>.c |
|
|
|
//int GetGamepadAxisCount(int gamepad) ** |
|
|
|
//const char *GetGamepadName(int gamepad) ** |
|
|
|
//int SetGamepadMappings(const char *mappings) |
|
|
|
|
|
|
|
// Check if a gamepad is available |
|
|
|
bool IsGamepadAvailable(int gamepad) |
|
|
|
{ |
|
|
@ -1981,16 +2037,11 @@ bool IsGamepadAvailable(int gamepad) |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
// Get axis movement vector for a gamepad |
|
|
|
float GetGamepadAxisMovement(int gamepad, int axis) |
|
|
|
{ |
|
|
|
float value = 0; |
|
|
|
|
|
|
|
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (axis < MAX_GAMEPAD_AXIS) && |
|
|
|
(fabsf(CORE.Input.Gamepad.axisState[gamepad][axis]) > 0.1f)) value = CORE.Input.Gamepad.axisState[gamepad][axis]; // 0.1f = GAMEPAD_AXIS_MINIMUM_DRIFT/DELTA |
|
|
|
|
|
|
|
return value; |
|
|
|
} |
|
|
|
// Get gamepad internal name id |
|
|
|
//const char *GetGamepadName(int gamepad) |
|
|
|
//{ |
|
|
|
// return CORE.Input.Gamepad.ready[gamepad]; |
|
|
|
//} |
|
|
|
|
|
|
|
// Check if a gamepad button has been pressed once |
|
|
|
bool IsGamepadButtonPressed(int gamepad, int button) |
|
|
@ -2042,6 +2093,35 @@ int GetGamepadButtonPressed(void) |
|
|
|
return CORE.Input.Gamepad.lastButtonPressed; |
|
|
|
} |
|
|
|
|
|
|
|
// Get gamepad axis count |
|
|
|
//int GetGamepadAxisCount(int gamepad) |
|
|
|
//{ |
|
|
|
// return CORE.Input.Gamepad.axisCount; |
|
|
|
//} |
|
|
|
|
|
|
|
// Get axis movement vector for a gamepad |
|
|
|
float GetGamepadAxisMovement(int gamepad, int axis) |
|
|
|
{ |
|
|
|
float value = 0; |
|
|
|
|
|
|
|
if ((gamepad < MAX_GAMEPADS) && CORE.Input.Gamepad.ready[gamepad] && (axis < MAX_GAMEPAD_AXIS) && |
|
|
|
(fabsf(CORE.Input.Gamepad.axisState[gamepad][axis]) > 0.1f)) value = CORE.Input.Gamepad.axisState[gamepad][axis]; // 0.1f = GAMEPAD_AXIS_MINIMUM_DRIFT/DELTA |
|
|
|
|
|
|
|
return value; |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: Input Handling: Mouse |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// NOTE: Functions with a platform-specific implementation on rcore_<platform>.c |
|
|
|
//int GetMouseX(void) ** |
|
|
|
//int GetMouseY(void) ** |
|
|
|
//Vector2 GetMousePosition(void) ** |
|
|
|
//void SetMousePosition(int x, int y) |
|
|
|
//float GetMouseWheelMove(void) ** |
|
|
|
//void SetMouseCursor(int cursor) |
|
|
|
|
|
|
|
// Check if a mouse button has been pressed once |
|
|
|
bool IsMouseButtonPressed(int button) |
|
|
|
{ |
|
|
@ -2129,6 +2209,15 @@ Vector2 GetMouseWheelMoveV(void) |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Functions Definition: Input Handling: Touch |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// NOTE: Functions with a platform-specific implementation on rcore_<platform>.c |
|
|
|
//int GetTouchX(void) |
|
|
|
//int GetTouchY(void) |
|
|
|
//Vector2 GetTouchPosition(int index) |
|
|
|
|
|
|
|
// Get touch point identifier for given index |
|
|
|
int GetTouchPointId(int index) |
|
|
|
{ |
|
|
@ -2329,29 +2418,6 @@ void WaitTime(double seconds) |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
// Takes a screenshot of current screen (saved a .png) |
|
|
|
void TakeScreenshot(const char *fileName) |
|
|
|
{ |
|
|
|
#if defined(SUPPORT_MODULE_RTEXTURES) |
|
|
|
// Security check to (partially) avoid malicious code |
|
|
|
if (strchr(fileName, '\'') != NULL) { TRACELOG(LOG_WARNING, "SYSTEM: Provided fileName could be potentially malicious, avoid [\'] character"); return; } |
|
|
|
|
|
|
|
Vector2 scale = GetWindowScaleDPI(); |
|
|
|
unsigned char *imgData = rlReadScreenPixels((int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y)); |
|
|
|
Image image = { imgData, (int)((float)CORE.Window.render.width*scale.x), (int)((float)CORE.Window.render.height*scale.y), 1, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 }; |
|
|
|
|
|
|
|
char path[512] = { 0 }; |
|
|
|
strcpy(path, TextFormat("%s/%s", CORE.Storage.basePath, fileName)); |
|
|
|
|
|
|
|
ExportImage(image, path); // WARNING: Module required: rtextures |
|
|
|
RL_FREE(imgData); |
|
|
|
|
|
|
|
TRACELOG(LOG_INFO, "SYSTEM: [%s] Screenshot taken successfully", path); |
|
|
|
#else |
|
|
|
TRACELOG(LOG_WARNING,"IMAGE: ExportImage() requires module: rtextures"); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
// Scan all files and directories in a base path |
|
|
|
// WARNING: files.paths[] must be previously allocated and |
|
|
|
// contain enough space to store all required paths |
|
|
|