Review functions descriptions
This commit is contained in:
parent
321027a242
commit
bac50fbba5
2 changed files with 322 additions and 321 deletions
595
src/core.c
595
src/core.c
|
@ -380,7 +380,7 @@ static void *GamepadThread(void *arg); // Mouse reading thread
|
||||||
// Module Functions Definition - Window and OpenGL Context Functions
|
// Module Functions Definition - Window and OpenGL Context Functions
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_WEB)
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_WEB)
|
||||||
// Initialize Window and Graphics Context (OpenGL)
|
// Initialize window and OpenGL context
|
||||||
void InitWindow(int width, int height, const char *title)
|
void InitWindow(int width, int height, const char *title)
|
||||||
{
|
{
|
||||||
TraceLog(INFO, "Initializing raylib (v1.7.0)");
|
TraceLog(INFO, "Initializing raylib (v1.7.0)");
|
||||||
|
@ -443,7 +443,7 @@ void InitWindow(int width, int height, const char *title)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PLATFORM_ANDROID)
|
#if defined(PLATFORM_ANDROID)
|
||||||
// Android activity initialization
|
// Initialize Android activity
|
||||||
void InitWindow(int width, int height, void *state)
|
void InitWindow(int width, int height, void *state)
|
||||||
{
|
{
|
||||||
TraceLog(INFO, "Initializing raylib (v1.7.0)");
|
TraceLog(INFO, "Initializing raylib (v1.7.0)");
|
||||||
|
@ -506,7 +506,7 @@ void InitWindow(int width, int height, void *state)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Close Window and Terminate Context
|
// Close window and unload OpenGL context
|
||||||
void CloseWindow(void)
|
void CloseWindow(void)
|
||||||
{
|
{
|
||||||
#if defined(SUPPORT_DEFAULT_FONT)
|
#if defined(SUPPORT_DEFAULT_FONT)
|
||||||
|
@ -562,7 +562,7 @@ void CloseWindow(void)
|
||||||
TraceLog(INFO, "Window closed successfully");
|
TraceLog(INFO, "Window closed successfully");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Detect if KEY_ESCAPE pressed or Close icon pressed
|
// Check if KEY_ESCAPE pressed or Close icon pressed
|
||||||
bool WindowShouldClose(void)
|
bool WindowShouldClose(void)
|
||||||
{
|
{
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||||
|
@ -577,7 +577,7 @@ bool WindowShouldClose(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Detect if window has been minimized (or lost focus)
|
// Check if window has been minimized (or lost focus)
|
||||||
bool IsWindowMinimized(void)
|
bool IsWindowMinimized(void)
|
||||||
{
|
{
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||||
|
@ -587,7 +587,7 @@ bool IsWindowMinimized(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fullscreen toggle (only PLATFORM_DESKTOP)
|
// Toggle fullscreen mode (only PLATFORM_DESKTOP)
|
||||||
void ToggleFullscreen(void)
|
void ToggleFullscreen(void)
|
||||||
{
|
{
|
||||||
#if defined(PLATFORM_DESKTOP)
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
@ -646,7 +646,7 @@ void SetWindowMonitor(int monitor)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
|
// Set window minimum dimensions (FLAG_WINDOW_RESIZABLE)
|
||||||
void SetWindowMinSize(int width, int height)
|
void SetWindowMinSize(int width, int height)
|
||||||
{
|
{
|
||||||
#if defined(PLATFORM_DESKTOP)
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
@ -681,7 +681,7 @@ void ShowCursor()
|
||||||
cursorHidden = false;
|
cursorHidden = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hide mouse cursor
|
// Hides mouse cursor
|
||||||
void HideCursor()
|
void HideCursor()
|
||||||
{
|
{
|
||||||
#if defined(PLATFORM_DESKTOP)
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
@ -701,13 +701,13 @@ void HideCursor()
|
||||||
cursorHidden = true;
|
cursorHidden = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if mouse cursor is hidden
|
// Check if cursor is not visible
|
||||||
bool IsCursorHidden()
|
bool IsCursorHidden()
|
||||||
{
|
{
|
||||||
return cursorHidden;
|
return cursorHidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable mouse cursor
|
// Enables cursor (unlock cursor)
|
||||||
void EnableCursor()
|
void EnableCursor()
|
||||||
{
|
{
|
||||||
#if defined(PLATFORM_DESKTOP)
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
@ -719,7 +719,7 @@ void EnableCursor()
|
||||||
cursorHidden = false;
|
cursorHidden = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disable mouse cursor
|
// Disables cursor (lock cursor)
|
||||||
void DisableCursor()
|
void DisableCursor()
|
||||||
{
|
{
|
||||||
#if defined(PLATFORM_DESKTOP)
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
@ -732,14 +732,14 @@ void DisableCursor()
|
||||||
}
|
}
|
||||||
#endif // !defined(PLATFORM_ANDROID)
|
#endif // !defined(PLATFORM_ANDROID)
|
||||||
|
|
||||||
// Sets Background Color
|
// Set background color (framebuffer clear color)
|
||||||
void ClearBackground(Color color)
|
void ClearBackground(Color color)
|
||||||
{
|
{
|
||||||
// Clear full framebuffer (not only render area) to color
|
// Clear full framebuffer (not only render area) to color
|
||||||
rlClearColor(color.r, color.g, color.b, color.a);
|
rlClearColor(color.r, color.g, color.b, color.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup drawing canvas to start drawing
|
// Setup canvas (framebuffer) to start drawing
|
||||||
void BeginDrawing(void)
|
void BeginDrawing(void)
|
||||||
{
|
{
|
||||||
currentTime = GetTime(); // Number of elapsed seconds since InitTimer() was called
|
currentTime = GetTime(); // Number of elapsed seconds since InitTimer() was called
|
||||||
|
@ -754,7 +754,7 @@ void BeginDrawing(void)
|
||||||
// NOTE: Not required with OpenGL 3.3+
|
// NOTE: Not required with OpenGL 3.3+
|
||||||
}
|
}
|
||||||
|
|
||||||
// End canvas drawing and Swap Buffers (Double Buffering)
|
// End canvas drawing and swap buffers (double buffering)
|
||||||
void EndDrawing(void)
|
void EndDrawing(void)
|
||||||
{
|
{
|
||||||
rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
|
rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
|
||||||
|
@ -782,7 +782,7 @@ void EndDrawing(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize 2D mode with custom camera
|
// Initialize 2D mode with custom camera (2D)
|
||||||
void Begin2dMode(Camera2D camera)
|
void Begin2dMode(Camera2D camera)
|
||||||
{
|
{
|
||||||
rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
|
rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
|
||||||
|
@ -800,7 +800,7 @@ void Begin2dMode(Camera2D camera)
|
||||||
rlMultMatrixf(MatrixToFloat(matTransform));
|
rlMultMatrixf(MatrixToFloat(matTransform));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ends 2D mode custom camera usage
|
// Ends 2D mode with custom camera
|
||||||
void End2dMode(void)
|
void End2dMode(void)
|
||||||
{
|
{
|
||||||
rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
|
rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
|
||||||
|
@ -808,7 +808,7 @@ void End2dMode(void)
|
||||||
rlLoadIdentity(); // Reset current matrix (MODELVIEW)
|
rlLoadIdentity(); // Reset current matrix (MODELVIEW)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initializes 3D mode for drawing (Camera setup)
|
// Initializes 3D mode with custom camera (3D)
|
||||||
void Begin3dMode(Camera camera)
|
void Begin3dMode(Camera camera)
|
||||||
{
|
{
|
||||||
rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
|
rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
|
||||||
|
@ -897,283 +897,6 @@ void EndTextureMode(void)
|
||||||
rlLoadIdentity(); // Reset current matrix (MODELVIEW)
|
rlLoadIdentity(); // Reset current matrix (MODELVIEW)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set target FPS for the game
|
|
||||||
void SetTargetFPS(int fps)
|
|
||||||
{
|
|
||||||
if (fps < 1) targetTime = 0.0;
|
|
||||||
else targetTime = 1.0/(double)fps;
|
|
||||||
|
|
||||||
TraceLog(INFO, "Target time per frame: %02.03f milliseconds", (float)targetTime*1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns current FPS
|
|
||||||
int GetFPS(void)
|
|
||||||
{
|
|
||||||
return (int)(1.0f/GetFrameTime());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns time in seconds for one frame
|
|
||||||
float GetFrameTime(void)
|
|
||||||
{
|
|
||||||
// NOTE: We round value to milliseconds
|
|
||||||
return (float)frameTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Converts Color to float array and normalizes
|
|
||||||
float *ColorToFloat(Color color)
|
|
||||||
{
|
|
||||||
static float buffer[4];
|
|
||||||
|
|
||||||
buffer[0] = (float)color.r/255;
|
|
||||||
buffer[1] = (float)color.g/255;
|
|
||||||
buffer[2] = (float)color.b/255;
|
|
||||||
buffer[3] = (float)color.a/255;
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Converts Vector3 to float array
|
|
||||||
float *VectorToFloat(Vector3 vec)
|
|
||||||
{
|
|
||||||
static float buffer[3];
|
|
||||||
|
|
||||||
buffer[0] = vec.x;
|
|
||||||
buffer[1] = vec.y;
|
|
||||||
buffer[2] = vec.z;
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Converts Matrix to float array
|
|
||||||
// NOTE: Returned vector is a transposed version of the Matrix struct,
|
|
||||||
// it should be this way because, despite raymath use OpenGL column-major convention,
|
|
||||||
// Matrix struct memory alignment and variables naming are not coherent
|
|
||||||
float *MatrixToFloat(Matrix mat)
|
|
||||||
{
|
|
||||||
static float buffer[16];
|
|
||||||
|
|
||||||
buffer[0] = mat.m0;
|
|
||||||
buffer[1] = mat.m4;
|
|
||||||
buffer[2] = mat.m8;
|
|
||||||
buffer[3] = mat.m12;
|
|
||||||
buffer[4] = mat.m1;
|
|
||||||
buffer[5] = mat.m5;
|
|
||||||
buffer[6] = mat.m9;
|
|
||||||
buffer[7] = mat.m13;
|
|
||||||
buffer[8] = mat.m2;
|
|
||||||
buffer[9] = mat.m6;
|
|
||||||
buffer[10] = mat.m10;
|
|
||||||
buffer[11] = mat.m14;
|
|
||||||
buffer[12] = mat.m3;
|
|
||||||
buffer[13] = mat.m7;
|
|
||||||
buffer[14] = mat.m11;
|
|
||||||
buffer[15] = mat.m15;
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns a Color struct from hexadecimal value
|
|
||||||
Color GetColor(int hexValue)
|
|
||||||
{
|
|
||||||
Color color;
|
|
||||||
|
|
||||||
color.r = (unsigned char)(hexValue >> 24) & 0xFF;
|
|
||||||
color.g = (unsigned char)(hexValue >> 16) & 0xFF;
|
|
||||||
color.b = (unsigned char)(hexValue >> 8) & 0xFF;
|
|
||||||
color.a = (unsigned char)hexValue & 0xFF;
|
|
||||||
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns hexadecimal value for a Color
|
|
||||||
int GetHexValue(Color color)
|
|
||||||
{
|
|
||||||
return (((int)color.r << 24) | ((int)color.g << 16) | ((int)color.b << 8) | (int)color.a);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns a random value between min and max (both included)
|
|
||||||
int GetRandomValue(int min, int max)
|
|
||||||
{
|
|
||||||
if (min > max)
|
|
||||||
{
|
|
||||||
int tmp = max;
|
|
||||||
max = min;
|
|
||||||
min = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (rand()%(abs(max-min)+1) + min);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fades color by a percentadge
|
|
||||||
Color Fade(Color color, float alpha)
|
|
||||||
{
|
|
||||||
if (alpha < 0.0f) alpha = 0.0f;
|
|
||||||
else if (alpha > 1.0f) alpha = 1.0f;
|
|
||||||
|
|
||||||
float colorAlpha = (float)color.a*alpha;
|
|
||||||
|
|
||||||
return (Color){color.r, color.g, color.b, (unsigned char)colorAlpha};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Activates raylib logo at startup
|
|
||||||
void ShowLogo(void)
|
|
||||||
{
|
|
||||||
showLogo = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable some window/system configurations
|
|
||||||
void SetConfigFlags(char flags)
|
|
||||||
{
|
|
||||||
configFlags = flags;
|
|
||||||
|
|
||||||
if (configFlags & FLAG_SHOW_LOGO) showLogo = true;
|
|
||||||
if (configFlags & FLAG_FULLSCREEN_MODE) fullscreen = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Takes a screenshot and saves it in the same folder as executable
|
|
||||||
void TakeScreenshot(void)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI)
|
|
||||||
static int shotNum = 0; // Screenshot number, increments every screenshot take during program execution
|
|
||||||
char buffer[20]; // Buffer to store file name
|
|
||||||
|
|
||||||
unsigned char *imgData = rlglReadScreenPixels(renderWidth, renderHeight);
|
|
||||||
|
|
||||||
sprintf(buffer, "screenshot%03i.png", shotNum);
|
|
||||||
|
|
||||||
// Save image as PNG
|
|
||||||
SavePNG(buffer, imgData, renderWidth, renderHeight, 4);
|
|
||||||
|
|
||||||
free(imgData);
|
|
||||||
|
|
||||||
shotNum++;
|
|
||||||
|
|
||||||
TraceLog(INFO, "[%s] Screenshot taken #03i", buffer, shotNum);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check file extension
|
|
||||||
bool IsFileExtension(const char *fileName, const char *ext)
|
|
||||||
{
|
|
||||||
bool result = false;
|
|
||||||
const char *fileExt;
|
|
||||||
|
|
||||||
if ((fileExt = strrchr(fileName, '.')) != NULL)
|
|
||||||
{
|
|
||||||
if (strcmp(fileExt, ext) == 0) result = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Storage save integer value (to defined position)
|
|
||||||
// NOTE: Storage positions is directly related to file memory layout (4 bytes each integer)
|
|
||||||
void StorageSaveValue(int position, int value)
|
|
||||||
{
|
|
||||||
FILE *storageFile = NULL;
|
|
||||||
|
|
||||||
char path[128];
|
|
||||||
#if defined(PLATFORM_ANDROID)
|
|
||||||
strcpy(path, internalDataPath);
|
|
||||||
strcat(path, "/");
|
|
||||||
strcat(path, STORAGE_FILENAME);
|
|
||||||
#else
|
|
||||||
strcpy(path, STORAGE_FILENAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Try open existing file to append data
|
|
||||||
storageFile = fopen(path, "rb+");
|
|
||||||
|
|
||||||
// If file doesn't exist, create a new storage data file
|
|
||||||
if (!storageFile) storageFile = fopen(path, "wb");
|
|
||||||
|
|
||||||
if (!storageFile) TraceLog(WARNING, "Storage data file could not be created");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Get file size
|
|
||||||
fseek(storageFile, 0, SEEK_END);
|
|
||||||
int fileSize = ftell(storageFile); // Size in bytes
|
|
||||||
fseek(storageFile, 0, SEEK_SET);
|
|
||||||
|
|
||||||
if (fileSize < (position*4)) TraceLog(WARNING, "Storage position could not be found");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fseek(storageFile, (position*4), SEEK_SET);
|
|
||||||
fwrite(&value, 1, 4, storageFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(storageFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Storage load integer value (from defined position)
|
|
||||||
// NOTE: If requested position could not be found, value 0 is returned
|
|
||||||
int StorageLoadValue(int position)
|
|
||||||
{
|
|
||||||
int value = 0;
|
|
||||||
|
|
||||||
char path[128];
|
|
||||||
#if defined(PLATFORM_ANDROID)
|
|
||||||
strcpy(path, internalDataPath);
|
|
||||||
strcat(path, "/");
|
|
||||||
strcat(path, STORAGE_FILENAME);
|
|
||||||
#else
|
|
||||||
strcpy(path, STORAGE_FILENAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Try open existing file to append data
|
|
||||||
FILE *storageFile = fopen(path, "rb");
|
|
||||||
|
|
||||||
if (!storageFile) TraceLog(WARNING, "Storage data file could not be found");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Get file size
|
|
||||||
fseek(storageFile, 0, SEEK_END);
|
|
||||||
int fileSize = ftell(storageFile); // Size in bytes
|
|
||||||
rewind(storageFile);
|
|
||||||
|
|
||||||
if (fileSize < (position*4)) TraceLog(WARNING, "Storage position could not be found");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fseek(storageFile, (position*4), SEEK_SET);
|
|
||||||
fread(&value, 4, 1, storageFile); // Read 1 element of 4 bytes size
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(storageFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns a ray trace from mouse position
|
// Returns a ray trace from mouse position
|
||||||
Ray GetMouseRay(Vector2 mousePosition, Camera camera)
|
Ray GetMouseRay(Vector2 mousePosition, Camera camera)
|
||||||
{
|
{
|
||||||
|
@ -1274,6 +997,284 @@ Matrix GetCameraMatrix(Camera camera)
|
||||||
return MatrixLookAt(camera.position, camera.target, camera.up);
|
return MatrixLookAt(camera.position, camera.target, camera.up);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set target FPS (maximum)
|
||||||
|
void SetTargetFPS(int fps)
|
||||||
|
{
|
||||||
|
if (fps < 1) targetTime = 0.0;
|
||||||
|
else targetTime = 1.0/(double)fps;
|
||||||
|
|
||||||
|
TraceLog(INFO, "Target time per frame: %02.03f milliseconds", (float)targetTime*1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns current FPS
|
||||||
|
int GetFPS(void)
|
||||||
|
{
|
||||||
|
return (int)(1.0f/GetFrameTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns time in seconds for last frame drawn
|
||||||
|
float GetFrameTime(void)
|
||||||
|
{
|
||||||
|
// NOTE: We round value to milliseconds
|
||||||
|
return (float)frameTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Converts Color to float array and normalizes
|
||||||
|
float *ColorToFloat(Color color)
|
||||||
|
{
|
||||||
|
static float buffer[4];
|
||||||
|
|
||||||
|
buffer[0] = (float)color.r/255;
|
||||||
|
buffer[1] = (float)color.g/255;
|
||||||
|
buffer[2] = (float)color.b/255;
|
||||||
|
buffer[3] = (float)color.a/255;
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Converts Vector3 to float array
|
||||||
|
float *VectorToFloat(Vector3 vec)
|
||||||
|
{
|
||||||
|
static float buffer[3];
|
||||||
|
|
||||||
|
buffer[0] = vec.x;
|
||||||
|
buffer[1] = vec.y;
|
||||||
|
buffer[2] = vec.z;
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: Returned vector is a transposed version of the Matrix struct,
|
||||||
|
// it should be this way because, despite raymath use OpenGL column-major convention,
|
||||||
|
// Matrix struct memory alignment and variables naming are not coherent
|
||||||
|
float *MatrixToFloat(Matrix mat)
|
||||||
|
{
|
||||||
|
static float buffer[16];
|
||||||
|
|
||||||
|
buffer[0] = mat.m0;
|
||||||
|
buffer[1] = mat.m4;
|
||||||
|
buffer[2] = mat.m8;
|
||||||
|
buffer[3] = mat.m12;
|
||||||
|
buffer[4] = mat.m1;
|
||||||
|
buffer[5] = mat.m5;
|
||||||
|
buffer[6] = mat.m9;
|
||||||
|
buffer[7] = mat.m13;
|
||||||
|
buffer[8] = mat.m2;
|
||||||
|
buffer[9] = mat.m6;
|
||||||
|
buffer[10] = mat.m10;
|
||||||
|
buffer[11] = mat.m14;
|
||||||
|
buffer[12] = mat.m3;
|
||||||
|
buffer[13] = mat.m7;
|
||||||
|
buffer[14] = mat.m11;
|
||||||
|
buffer[15] = mat.m15;
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a Color struct from hexadecimal value
|
||||||
|
Color GetColor(int hexValue)
|
||||||
|
{
|
||||||
|
Color color;
|
||||||
|
|
||||||
|
color.r = (unsigned char)(hexValue >> 24) & 0xFF;
|
||||||
|
color.g = (unsigned char)(hexValue >> 16) & 0xFF;
|
||||||
|
color.b = (unsigned char)(hexValue >> 8) & 0xFF;
|
||||||
|
color.a = (unsigned char)hexValue & 0xFF;
|
||||||
|
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns hexadecimal value for a Color
|
||||||
|
int GetHexValue(Color color)
|
||||||
|
{
|
||||||
|
return (((int)color.r << 24) | ((int)color.g << 16) | ((int)color.b << 8) | (int)color.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a random value between min and max (both included)
|
||||||
|
int GetRandomValue(int min, int max)
|
||||||
|
{
|
||||||
|
if (min > max)
|
||||||
|
{
|
||||||
|
int tmp = max;
|
||||||
|
max = min;
|
||||||
|
min = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (rand()%(abs(max-min)+1) + min);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Color fade-in or fade-out, alpha goes from 0.0f to 1.0f
|
||||||
|
Color Fade(Color color, float alpha)
|
||||||
|
{
|
||||||
|
if (alpha < 0.0f) alpha = 0.0f;
|
||||||
|
else if (alpha > 1.0f) alpha = 1.0f;
|
||||||
|
|
||||||
|
float colorAlpha = (float)color.a*alpha;
|
||||||
|
|
||||||
|
return (Color){color.r, color.g, color.b, (unsigned char)colorAlpha};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Activate raylib logo at startup (can be done with flags)
|
||||||
|
void ShowLogo(void)
|
||||||
|
{
|
||||||
|
showLogo = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup window configuration flags (view FLAGS)
|
||||||
|
void SetConfigFlags(char flags)
|
||||||
|
{
|
||||||
|
configFlags = flags;
|
||||||
|
|
||||||
|
if (configFlags & FLAG_SHOW_LOGO) showLogo = true;
|
||||||
|
if (configFlags & FLAG_FULLSCREEN_MODE) fullscreen = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE TraceLog() function is located in [utils.h]
|
||||||
|
|
||||||
|
// Takes a screenshot and saves it in the same folder as executable
|
||||||
|
void TakeScreenshot(void)
|
||||||
|
{
|
||||||
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI)
|
||||||
|
static int shotNum = 0; // Screenshot number, increments every screenshot take during program execution
|
||||||
|
char buffer[20]; // Buffer to store file name
|
||||||
|
|
||||||
|
unsigned char *imgData = rlglReadScreenPixels(renderWidth, renderHeight);
|
||||||
|
|
||||||
|
sprintf(buffer, "screenshot%03i.png", shotNum);
|
||||||
|
|
||||||
|
// Save image as PNG
|
||||||
|
SavePNG(buffer, imgData, renderWidth, renderHeight, 4);
|
||||||
|
|
||||||
|
free(imgData);
|
||||||
|
|
||||||
|
shotNum++;
|
||||||
|
|
||||||
|
TraceLog(INFO, "[%s] Screenshot taken #03i", buffer, shotNum);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check file extension
|
||||||
|
bool IsFileExtension(const char *fileName, const char *ext)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
const char *fileExt;
|
||||||
|
|
||||||
|
if ((fileExt = strrchr(fileName, '.')) != NULL)
|
||||||
|
{
|
||||||
|
if (strcmp(fileExt, ext) == 0) result = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PLATFORM_DESKTOP)
|
||||||
|
// Check if a file has been dropped into window
|
||||||
|
bool IsFileDropped(void)
|
||||||
|
{
|
||||||
|
if (dropFilesCount > 0) return true;
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get dropped files names
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Save integer value to storage file (to defined position)
|
||||||
|
// NOTE: Storage positions is directly related to file memory layout (4 bytes each integer)
|
||||||
|
void StorageSaveValue(int position, int value)
|
||||||
|
{
|
||||||
|
FILE *storageFile = NULL;
|
||||||
|
|
||||||
|
char path[128];
|
||||||
|
#if defined(PLATFORM_ANDROID)
|
||||||
|
strcpy(path, internalDataPath);
|
||||||
|
strcat(path, "/");
|
||||||
|
strcat(path, STORAGE_FILENAME);
|
||||||
|
#else
|
||||||
|
strcpy(path, STORAGE_FILENAME);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Try open existing file to append data
|
||||||
|
storageFile = fopen(path, "rb+");
|
||||||
|
|
||||||
|
// If file doesn't exist, create a new storage data file
|
||||||
|
if (!storageFile) storageFile = fopen(path, "wb");
|
||||||
|
|
||||||
|
if (!storageFile) TraceLog(WARNING, "Storage data file could not be created");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Get file size
|
||||||
|
fseek(storageFile, 0, SEEK_END);
|
||||||
|
int fileSize = ftell(storageFile); // Size in bytes
|
||||||
|
fseek(storageFile, 0, SEEK_SET);
|
||||||
|
|
||||||
|
if (fileSize < (position*4)) TraceLog(WARNING, "Storage position could not be found");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fseek(storageFile, (position*4), SEEK_SET);
|
||||||
|
fwrite(&value, 1, 4, storageFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(storageFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load integer value from storage file (from defined position)
|
||||||
|
// NOTE: If requested position could not be found, value 0 is returned
|
||||||
|
int StorageLoadValue(int position)
|
||||||
|
{
|
||||||
|
int value = 0;
|
||||||
|
|
||||||
|
char path[128];
|
||||||
|
#if defined(PLATFORM_ANDROID)
|
||||||
|
strcpy(path, internalDataPath);
|
||||||
|
strcat(path, "/");
|
||||||
|
strcat(path, STORAGE_FILENAME);
|
||||||
|
#else
|
||||||
|
strcpy(path, STORAGE_FILENAME);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Try open existing file to append data
|
||||||
|
FILE *storageFile = fopen(path, "rb");
|
||||||
|
|
||||||
|
if (!storageFile) TraceLog(WARNING, "Storage data file could not be found");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Get file size
|
||||||
|
fseek(storageFile, 0, SEEK_END);
|
||||||
|
int fileSize = ftell(storageFile); // Size in bytes
|
||||||
|
rewind(storageFile);
|
||||||
|
|
||||||
|
if (fileSize < (position*4)) TraceLog(WARNING, "Storage position could not be found");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fseek(storageFile, (position*4), SEEK_SET);
|
||||||
|
fread(&value, 4, 1, storageFile); // Read 1 element of 4 bytes size
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(storageFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module Functions Definition - Input (Keyboard, Mouse, Gamepad) Functions
|
// Module Functions Definition - Input (Keyboard, Mouse, Gamepad) Functions
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
@ -1559,7 +1560,7 @@ int GetMouseWheelMove(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns touch position X
|
// Returns touch position X for touch point 0 (relative to screen size)
|
||||||
int GetTouchX(void)
|
int GetTouchX(void)
|
||||||
{
|
{
|
||||||
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB)
|
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB)
|
||||||
|
@ -1569,7 +1570,7 @@ int GetTouchX(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns touch position Y
|
// Returns touch position Y for touch point 0 (relative to screen size)
|
||||||
int GetTouchY(void)
|
int GetTouchY(void)
|
||||||
{
|
{
|
||||||
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB)
|
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB)
|
||||||
|
@ -1579,7 +1580,7 @@ int GetTouchY(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns touch position XY
|
// Returns touch position XY for a touch point index (relative to screen size)
|
||||||
// TODO: Touch position should be scaled depending on display size and render size
|
// TODO: Touch position should be scaled depending on display size and render size
|
||||||
Vector2 GetTouchPosition(int index)
|
Vector2 GetTouchPosition(int index)
|
||||||
{
|
{
|
||||||
|
|
48
src/raylib.h
48
src/raylib.h
|
@ -656,15 +656,15 @@ extern "C" { // Prevents name mangling of functions
|
||||||
// Window and Graphics Device Functions (Module: core)
|
// Window and Graphics Device Functions (Module: core)
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
#if defined(PLATFORM_ANDROID)
|
#if defined(PLATFORM_ANDROID)
|
||||||
RLAPI void InitWindow(int width, int height, void *state); // Init Android Activity and OpenGL Graphics (struct android_app)
|
RLAPI void InitWindow(int width, int height, void *state); // Initialize Android activity
|
||||||
#elif defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_WEB)
|
#elif defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_WEB)
|
||||||
RLAPI void InitWindow(int width, int height, const char *title); // Initialize Window and OpenGL Graphics
|
RLAPI void InitWindow(int width, int height, const char *title); // Initialize window and OpenGL context
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RLAPI void CloseWindow(void); // Close Window and Terminate Context
|
RLAPI void CloseWindow(void); // Close window and unload OpenGL context
|
||||||
RLAPI bool WindowShouldClose(void); // Detect if KEY_ESCAPE pressed or Close icon pressed
|
RLAPI bool WindowShouldClose(void); // Check if KEY_ESCAPE pressed or Close icon pressed
|
||||||
RLAPI bool IsWindowMinimized(void); // Detect if window has been minimized (or lost focus)
|
RLAPI bool IsWindowMinimized(void); // Check if window has been minimized (or lost focus)
|
||||||
RLAPI void ToggleFullscreen(void); // Fullscreen toggle (only PLATFORM_DESKTOP)
|
RLAPI void ToggleFullscreen(void); // Toggle fullscreen mode (only PLATFORM_DESKTOP)
|
||||||
RLAPI void SetWindowIcon(Image image); // Set icon for window (only PLATFORM_DESKTOP)
|
RLAPI void SetWindowIcon(Image image); // Set icon for window (only PLATFORM_DESKTOP)
|
||||||
RLAPI void SetWindowPosition(int x, int y); // Set window position on screen (only PLATFORM_DESKTOP)
|
RLAPI void SetWindowPosition(int x, int y); // Set window position on screen (only PLATFORM_DESKTOP)
|
||||||
RLAPI void SetWindowMonitor(int monitor); // Set monitor for the current window (fullscreen mode)
|
RLAPI void SetWindowMonitor(int monitor); // Set monitor for the current window (fullscreen mode)
|
||||||
|
@ -675,29 +675,29 @@ RLAPI int GetScreenHeight(void); // Get current
|
||||||
#if !defined(PLATFORM_ANDROID)
|
#if !defined(PLATFORM_ANDROID)
|
||||||
RLAPI void ShowCursor(void); // Shows cursor
|
RLAPI void ShowCursor(void); // Shows cursor
|
||||||
RLAPI void HideCursor(void); // Hides cursor
|
RLAPI void HideCursor(void); // Hides cursor
|
||||||
RLAPI bool IsCursorHidden(void); // Returns true if cursor is not visible
|
RLAPI bool IsCursorHidden(void); // Check if cursor is not visible
|
||||||
RLAPI void EnableCursor(void); // Enables cursor
|
RLAPI void EnableCursor(void); // Enables cursor (unlock cursor)
|
||||||
RLAPI void DisableCursor(void); // Disables cursor
|
RLAPI void DisableCursor(void); // Disables cursor (lock cursor)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RLAPI void ClearBackground(Color color); // Sets Background Color
|
RLAPI void ClearBackground(Color color); // Set background color (framebuffer clear color)
|
||||||
RLAPI void BeginDrawing(void); // Setup drawing canvas to start drawing
|
RLAPI void BeginDrawing(void); // Setup canvas (framebuffer) to start drawing
|
||||||
RLAPI void EndDrawing(void); // End canvas drawing and Swap Buffers (Double Buffering)
|
RLAPI void EndDrawing(void); // End canvas drawing and swap buffers (double buffering)
|
||||||
|
|
||||||
RLAPI void Begin2dMode(Camera2D camera); // Initialize 2D mode with custom camera
|
RLAPI void Begin2dMode(Camera2D camera); // Initialize 2D mode with custom camera (2D)
|
||||||
RLAPI void End2dMode(void); // Ends 2D mode custom camera usage
|
RLAPI void End2dMode(void); // Ends 2D mode with custom camera
|
||||||
RLAPI void Begin3dMode(Camera camera); // Initializes 3D mode for drawing (Camera setup)
|
RLAPI void Begin3dMode(Camera camera); // Initializes 3D mode with custom camera (3D)
|
||||||
RLAPI void End3dMode(void); // Ends 3D mode and returns to default 2D orthographic mode
|
RLAPI void End3dMode(void); // Ends 3D mode and returns to default 2D orthographic mode
|
||||||
RLAPI void BeginTextureMode(RenderTexture2D target); // Initializes render texture for drawing
|
RLAPI void BeginTextureMode(RenderTexture2D target); // Initializes render texture for drawing
|
||||||
RLAPI void EndTextureMode(void); // Ends drawing to render texture
|
RLAPI void EndTextureMode(void); // Ends drawing to render texture
|
||||||
|
|
||||||
RLAPI Ray GetMouseRay(Vector2 mousePosition, Camera camera); // Returns a ray trace from mouse position
|
RLAPI Ray GetMouseRay(Vector2 mousePosition, Camera camera); // Returns a ray trace from mouse position
|
||||||
RLAPI Vector2 GetWorldToScreen(Vector3 position, Camera camera); // Returns the screen space position from a 3d world space position
|
RLAPI Vector2 GetWorldToScreen(Vector3 position, Camera camera); // Returns the screen space position for a 3d world space position
|
||||||
RLAPI Matrix GetCameraMatrix(Camera camera); // Returns camera transform matrix (view matrix)
|
RLAPI Matrix GetCameraMatrix(Camera camera); // Returns camera transform matrix (view matrix)
|
||||||
|
|
||||||
RLAPI void SetTargetFPS(int fps); // Set target FPS (maximum)
|
RLAPI void SetTargetFPS(int fps); // Set target FPS (maximum)
|
||||||
RLAPI int GetFPS(void); // Returns current FPS
|
RLAPI int GetFPS(void); // Returns current FPS
|
||||||
RLAPI float GetFrameTime(void); // Returns time in seconds for one frame
|
RLAPI float GetFrameTime(void); // Returns time in seconds for last frame drawn
|
||||||
|
|
||||||
RLAPI Color GetColor(int hexValue); // Returns a Color struct from hexadecimal value
|
RLAPI Color GetColor(int hexValue); // Returns a Color struct from hexadecimal value
|
||||||
RLAPI int GetHexValue(Color color); // Returns hexadecimal value for a Color
|
RLAPI int GetHexValue(Color color); // Returns hexadecimal value for a Color
|
||||||
|
@ -708,18 +708,18 @@ RLAPI float *MatrixToFloat(Matrix mat); // Converts Ma
|
||||||
RLAPI int GetRandomValue(int min, int max); // Returns a random value between min and max (both included)
|
RLAPI int GetRandomValue(int min, int max); // Returns a random value between min and max (both included)
|
||||||
RLAPI Color Fade(Color color, float alpha); // Color fade-in or fade-out, alpha goes from 0.0f to 1.0f
|
RLAPI Color Fade(Color color, float alpha); // Color fade-in or fade-out, alpha goes from 0.0f to 1.0f
|
||||||
|
|
||||||
RLAPI void ShowLogo(void); // Activates raylib logo at startup (can be done with flags)
|
RLAPI void ShowLogo(void); // Activate raylib logo at startup (can be done with flags)
|
||||||
RLAPI void SetConfigFlags(char flags); // Setup some window configuration flags
|
RLAPI void SetConfigFlags(char flags); // Setup window configuration flags (view FLAGS)
|
||||||
RLAPI void TraceLog(int logType, const char *text, ...); // Show trace log messages (INFO, WARNING, ERROR, DEBUG)
|
RLAPI void TraceLog(int logType, const char *text, ...); // Show trace log messages (INFO, WARNING, ERROR, DEBUG)
|
||||||
RLAPI void TakeScreenshot(void); // Takes a screenshot and saves it in the same folder as executable
|
RLAPI void TakeScreenshot(void); // Takes a screenshot and saves it in the same folder as executable
|
||||||
RLAPI bool IsFileExtension(const char *fileName, const char *ext);// Check file extension
|
RLAPI bool IsFileExtension(const char *fileName, const char *ext);// Check file extension
|
||||||
|
|
||||||
RLAPI bool IsFileDropped(void); // Check if a file have been dropped into window
|
RLAPI bool IsFileDropped(void); // Check if a file has been dropped into window
|
||||||
RLAPI char **GetDroppedFiles(int *count); // Retrieve dropped files into window
|
RLAPI char **GetDroppedFiles(int *count); // Get dropped files names
|
||||||
RLAPI void ClearDroppedFiles(void); // Clear dropped files paths buffer
|
RLAPI void ClearDroppedFiles(void); // Clear dropped files paths buffer
|
||||||
|
|
||||||
RLAPI void StorageSaveValue(int position, int value); // Storage save integer value (to defined position)
|
RLAPI void StorageSaveValue(int position, int value); // Save integer value to storage file (to defined position)
|
||||||
RLAPI int StorageLoadValue(int position); // Storage load integer value (from defined position)
|
RLAPI int StorageLoadValue(int position); // Load integer value from storage file (from defined position)
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
// Input Handling Functions (Module: core)
|
// Input Handling Functions (Module: core)
|
||||||
|
@ -877,7 +877,7 @@ RLAPI void DrawTextEx(SpriteFont spriteFont, const char* text, Vector2 position,
|
||||||
RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font
|
RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font
|
||||||
RLAPI Vector2 MeasureTextEx(SpriteFont spriteFont, const char *text, float fontSize, int spacing); // Measure string size for SpriteFont
|
RLAPI Vector2 MeasureTextEx(SpriteFont spriteFont, const char *text, float fontSize, int spacing); // Measure string size for SpriteFont
|
||||||
|
|
||||||
RLAPI void DrawFPS(int posX, int posY); // Shows current FPS on top-left corner
|
RLAPI void DrawFPS(int posX, int posY); // Shows current FPS
|
||||||
RLAPI const char *FormatText(const char *text, ...); // Formatting of text with variables to 'embed'
|
RLAPI const char *FormatText(const char *text, ...); // Formatting of text with variables to 'embed'
|
||||||
RLAPI const char *SubText(const char *text, int position, int length); // Get a piece of a text string
|
RLAPI const char *SubText(const char *text, int position, int length); // Get a piece of a text string
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue