aboutsummaryrefslogtreecommitdiff
path: root/raylib/src/rcore.h
diff options
context:
space:
mode:
authorUneven Prankster <unevenprankster@protonmail.com>2023-10-15 21:28:29 -0300
committerUneven Prankster <unevenprankster@protonmail.com>2023-10-15 21:28:29 -0300
commit1c0cc775732201f4c4d3ee0d6772be786b3b4aa1 (patch)
treef5d692d046868261275c7430a624c3ea9ed75d3d /raylib/src/rcore.h
parenta89f892640cf12f75c7ce18e6e88c70a8d3965ed (diff)
A lot has certainly happened!
Diffstat (limited to 'raylib/src/rcore.h')
-rw-r--r--raylib/src/rcore.h209
1 files changed, 209 insertions, 0 deletions
diff --git a/raylib/src/rcore.h b/raylib/src/rcore.h
new file mode 100644
index 0000000..1127585
--- /dev/null
+++ b/raylib/src/rcore.h
@@ -0,0 +1,209 @@
+/**********************************************************************************************
+*
+* rcore - Common types and globals (all platforms)
+*
+* LIMITATIONS:
+* - Limitation 01
+* - Limitation 02
+*
+* POSSIBLE IMPROVEMENTS:
+* - Improvement 01
+* - Improvement 02
+*
+*
+* LICENSE: zlib/libpng
+*
+* Copyright (c) 2013-2023 Ramon Santamaria (@raysan5) and contributors
+*
+* 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.
+*
+* Permission is granted to anyone to use this software for any purpose, including commercial
+* applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not claim that you
+* wrote the original software. If you use this software in a product, an acknowledgment
+* in the product documentation would be appreciated but is not required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
+* as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#ifndef RCORE_H
+#define RCORE_H
+
+#include "raylib.h"
+
+#include "utils.h" // Required for: TRACELOG() macros
+
+#include "rlgl.h" // Required for: graphics layer functionality
+
+#define RAYMATH_IMPLEMENTATION
+#include "raymath.h" // Required for: Vector2/Vector3/Matrix functionality
+
+#include <stdlib.h> // Required for: srand(), rand(), atexit()
+#include <stdio.h> // Required for: sprintf() [Used in OpenURL()]
+#include <string.h> // Required for: strrchr(), strcmp(), strlen(), memset()
+#include <time.h> // Required for: time() [Used in InitTimer()]
+#include <math.h> // Required for: tan() [Used in BeginMode3D()], atan2f() [Used in LoadVrStereoConfig()]
+
+//----------------------------------------------------------------------------------
+// Defines and Macros
+//----------------------------------------------------------------------------------
+#ifndef MAX_FILEPATH_CAPACITY
+ #define MAX_FILEPATH_CAPACITY 8192 // Maximum capacity for filepath
+#endif
+#ifndef MAX_FILEPATH_LENGTH
+ #define MAX_FILEPATH_LENGTH 4096 // Maximum length for filepaths (Linux PATH_MAX default value)
+#endif
+
+#ifndef MAX_KEYBOARD_KEYS
+ #define MAX_KEYBOARD_KEYS 512 // Maximum number of keyboard keys supported
+#endif
+#ifndef MAX_MOUSE_BUTTONS
+ #define MAX_MOUSE_BUTTONS 8 // Maximum number of mouse buttons supported
+#endif
+#ifndef MAX_GAMEPADS
+ #define MAX_GAMEPADS 4 // Maximum number of gamepads supported
+#endif
+#ifndef MAX_GAMEPAD_AXIS
+ #define MAX_GAMEPAD_AXIS 8 // Maximum number of axis supported (per gamepad)
+#endif
+#ifndef MAX_GAMEPAD_BUTTONS
+ #define MAX_GAMEPAD_BUTTONS 32 // Maximum number of buttons supported (per gamepad)
+#endif
+#ifndef MAX_TOUCH_POINTS
+ #define MAX_TOUCH_POINTS 8 // Maximum number of touch points supported
+#endif
+#ifndef MAX_KEY_PRESSED_QUEUE
+ #define MAX_KEY_PRESSED_QUEUE 16 // Maximum number of keys in the key input queue
+#endif
+#ifndef MAX_CHAR_PRESSED_QUEUE
+ #define MAX_CHAR_PRESSED_QUEUE 16 // Maximum number of characters in the char input queue
+#endif
+
+#ifndef MAX_DECOMPRESSION_SIZE
+ #define MAX_DECOMPRESSION_SIZE 64 // Maximum size allocated for decompression in MB
+#endif
+
+// Flags operation macros
+#define FLAG_SET(n, f) ((n) |= (f))
+#define FLAG_CLEAR(n, f) ((n) &= ~(f))
+#define FLAG_TOGGLE(n, f) ((n) ^= (f))
+#define FLAG_CHECK(n, f) ((n) & (f))
+
+#if (defined(__linux__) || defined(PLATFORM_WEB)) && (_POSIX_C_SOURCE < 199309L)
+ #undef _POSIX_C_SOURCE
+ #define _POSIX_C_SOURCE 199309L // Required for: CLOCK_MONOTONIC if compiled with c99 without gnu ext.
+#endif
+
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+//----------------------------------------------------------------------------------
+typedef struct { int x; int y; } Point;
+typedef struct { unsigned int width; unsigned int height; } Size;
+
+// Core global state context data
+typedef struct CoreData {
+ struct {
+ const char *title; // Window text title const pointer
+ unsigned int flags; // Configuration flags (bit based), keeps window state
+ bool ready; // Check if window has been initialized successfully
+ bool fullscreen; // Check if fullscreen mode is enabled
+ bool shouldClose; // Check if window set for closing
+ bool resizedLastFrame; // Check if window has been resized last frame
+ bool eventWaiting; // Wait for events before ending frame
+
+ Point position; // Window position (required on fullscreen toggle)
+ Point previousPosition; // Window previous position (required on borderless windowed toggle)
+ Size display; // Display width and height (monitor, device-screen, LCD, ...)
+ Size screen; // Screen width and height (used render area)
+ Size previousScreen; // Screen previous width and height (required on borderless windowed toggle)
+ Size currentFbo; // Current render width and height (depends on active fbo)
+ Size render; // Framebuffer width and height (render area, including black bars if required)
+ Point renderOffset; // Offset from render area (must be divided by 2)
+ Size screenMin; // Screen minimum width and height (for resizable window)
+ Size screenMax; // Screen maximum width and height (for resizable window)
+ Matrix screenScale; // Matrix to scale screen (framebuffer rendering)
+
+ char **dropFilepaths; // Store dropped files paths pointers (provided by GLFW)
+ unsigned int dropFileCount; // Count dropped files strings
+
+ } Window;
+ struct {
+ const char *basePath; // Base path for data storage
+
+ } Storage;
+ struct {
+ struct {
+ int exitKey; // Default exit key
+ char currentKeyState[MAX_KEYBOARD_KEYS]; // Registers current frame key state
+ char previousKeyState[MAX_KEYBOARD_KEYS]; // Registers previous frame key state
+
+ // NOTE: Since key press logic involves comparing prev vs cur key state, we need to handle key repeats specially
+ char keyRepeatInFrame[MAX_KEYBOARD_KEYS]; // Registers key repeats for current frame.
+
+ int keyPressedQueue[MAX_KEY_PRESSED_QUEUE]; // Input keys queue
+ int keyPressedQueueCount; // Input keys queue count
+
+ int charPressedQueue[MAX_CHAR_PRESSED_QUEUE]; // Input characters queue (unicode)
+ int charPressedQueueCount; // Input characters queue count
+
+ } Keyboard;
+ struct {
+ Vector2 offset; // Mouse offset
+ Vector2 scale; // Mouse scaling
+ Vector2 currentPosition; // Mouse position on screen
+ Vector2 previousPosition; // Previous mouse position
+
+ int cursor; // Tracks current mouse cursor
+ bool cursorHidden; // Track if cursor is hidden
+ bool cursorOnScreen; // Tracks if cursor is inside client area
+
+ char currentButtonState[MAX_MOUSE_BUTTONS]; // Registers current mouse button state
+ char previousButtonState[MAX_MOUSE_BUTTONS]; // Registers previous mouse button state
+ Vector2 currentWheelMove; // Registers current mouse wheel variation
+ Vector2 previousWheelMove; // Registers previous mouse wheel variation
+
+ } Mouse;
+ struct {
+ int pointCount; // Number of touch points active
+ int pointId[MAX_TOUCH_POINTS]; // Point identifiers
+ Vector2 position[MAX_TOUCH_POINTS]; // Touch position on screen
+ char currentTouchState[MAX_TOUCH_POINTS]; // Registers current touch state
+ char previousTouchState[MAX_TOUCH_POINTS]; // Registers previous touch state
+
+ } Touch;
+ struct {
+ int lastButtonPressed; // Register last gamepad button pressed
+ int axisCount[MAX_GAMEPADS]; // Register number of available gamepad axis
+ bool ready[MAX_GAMEPADS]; // Flag to know if gamepad is ready
+ char name[MAX_GAMEPADS][64]; // Gamepad name holder
+ char currentButtonState[MAX_GAMEPADS][MAX_GAMEPAD_BUTTONS]; // Current gamepad buttons state
+ char previousButtonState[MAX_GAMEPADS][MAX_GAMEPAD_BUTTONS]; // Previous gamepad buttons state
+ float axisState[MAX_GAMEPADS][MAX_GAMEPAD_AXIS]; // Gamepad axis state
+
+ } Gamepad;
+ } Input;
+ struct {
+ double current; // Current time measure
+ double previous; // Previous time measure
+ double update; // Time measure for frame update
+ double draw; // Time measure for frame draw
+ double frame; // Time measure for one frame
+ double target; // Desired time for one frame, if 0 not applied
+ unsigned long long int base; // Base time measure for hi-res timer (PLATFORM_ANDROID, PLATFORM_DRM)
+ unsigned int frameCounter; // Frame counter
+
+ } Time;
+} CoreData;
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition
+//----------------------------------------------------------------------------------
+extern CoreData CORE;
+
+#endif