found out how to expose the CoreData struct nicely
This commit is contained in:
parent
63a4eb8a62
commit
b0d4c5b0bc
|
|
@ -15,6 +15,7 @@
|
||||||
|
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
#include "rmod.h"
|
#include "rmod.h"
|
||||||
|
#include "rcore.h"
|
||||||
|
|
||||||
#include "GLFW/glfw3.h" // Windows/Context and inputs management
|
#include "GLFW/glfw3.h" // Windows/Context and inputs management
|
||||||
|
|
||||||
|
|
@ -29,10 +30,12 @@ GLFWwindow *window;
|
||||||
|
|
||||||
|
|
||||||
bool CustomWindowShouldClose(void) {
|
bool CustomWindowShouldClose(void) {
|
||||||
return glfwWindowShouldClose(window);
|
if (GetCore()->Window.ready) return GetCore()->Window.shouldClose;
|
||||||
|
else return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CustomInitPlatform(void) {
|
int CustomInitPlatform(void) {
|
||||||
|
printf("Initing\n");
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
{
|
||||||
printf("GLFW3: Can not initialize GLFW\n");
|
printf("GLFW3: Can not initialize GLFW\n");
|
||||||
|
|
@ -81,6 +84,8 @@ int CustomInitPlatform(void) {
|
||||||
rlOrtho(0, screenWidth, screenHeight, 0, 0.0f, 1.0f); // Orthographic projection with top-left corner at (0,0)
|
rlOrtho(0, screenWidth, screenHeight, 0, 0.0f, 1.0f); // Orthographic projection with top-left corner at (0,0)
|
||||||
rlMatrixMode(RL_MODELVIEW); // Switch back to MODELVIEW matrix
|
rlMatrixMode(RL_MODELVIEW); // Switch back to MODELVIEW matrix
|
||||||
rlLoadIdentity(); // Reset current matrix (MODELVIEW)
|
rlLoadIdentity(); // Reset current matrix (MODELVIEW)
|
||||||
|
|
||||||
|
GetCore()->Window.ready = true;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,14 +98,15 @@ void CustomClosePlatform(void) {
|
||||||
// Program main entry point
|
// Program main entry point
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
int main(void)
|
int main(void)
|
||||||
|
|
||||||
{
|
{
|
||||||
union OverridableFunctionPointer funcs;
|
union OverridableFunctionPointer funcs;
|
||||||
funcs.InitPlatform = CustomInitPlatform;
|
funcs.InitPlatform = CustomInitPlatform;
|
||||||
funcs.ClosePlatform = CustomClosePlatform;
|
funcs.ClosePlatform = CustomClosePlatform;
|
||||||
funcs.WindowShouldClose = CustomWindowShouldClose;
|
funcs.WindowShouldClose = CustomWindowShouldClose;
|
||||||
CustomInitPlatform();
|
//CustomInitPlatform();
|
||||||
|
|
||||||
//OverrideInternalFunction("InitPlatform",&funcs);
|
OverrideInternalFunction("InitPlatform",&funcs);
|
||||||
OverrideInternalFunction("ClosePlatform",&funcs);
|
OverrideInternalFunction("ClosePlatform",&funcs);
|
||||||
OverrideInternalFunction("WindowShouldClose",&funcs);
|
OverrideInternalFunction("WindowShouldClose",&funcs);
|
||||||
|
|
||||||
|
|
@ -113,6 +119,8 @@ int main(void)
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
while(!WindowShouldClose()) {
|
while(!WindowShouldClose()) {
|
||||||
|
Vector2 pos = GetMousePosition();
|
||||||
|
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
ClearBackground(WHITE);
|
ClearBackground(WHITE);
|
||||||
BeginTextureMode(fb);
|
BeginTextureMode(fb);
|
||||||
|
|
@ -122,6 +130,7 @@ int main(void)
|
||||||
|
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
|
GetCore()->Window.shouldClose = glfwWindowShouldClose(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
//CustomClosePlatform();
|
//CustomClosePlatform();
|
||||||
|
|
|
||||||
|
|
@ -140,14 +140,13 @@ void OverrideInternalFunction(const char * funcName, union OverridableFunctionPo
|
||||||
TraceLog(LOG_ERROR, "Unknown function name \"%s\", did not bind.",funcName);
|
TraceLog(LOG_ERROR, "Unknown function name \"%s\", did not bind.",funcName);
|
||||||
};
|
};
|
||||||
|
|
||||||
CoreData * GetCore() {
|
|
||||||
return &CORE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef PLATFORM_OFFSCREEN
|
#ifdef PLATFORM_OFFSCREEN
|
||||||
//
|
//
|
||||||
int InitPlatform(void) {
|
int InitPlatform(void) {
|
||||||
|
printf("j\n");
|
||||||
CHECK_AND_CALL(InitPlatform, ());
|
CHECK_AND_CALL(InitPlatform, ());
|
||||||
|
printf("test\n");
|
||||||
CORE.Window.ready = true;
|
CORE.Window.ready = true;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
166
src/rcore.c
166
src/rcore.c
|
|
@ -82,6 +82,8 @@
|
||||||
*
|
*
|
||||||
**********************************************************************************************/
|
**********************************************************************************************/
|
||||||
|
|
||||||
|
#include "rcore.h"
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Feature Test Macros required for this module
|
// Feature Test Macros required for this module
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
@ -197,164 +199,6 @@ unsigned int __stdcall timeEndPeriod(unsigned int uPeriod);
|
||||||
#define CHDIR chdir
|
#define CHDIR chdir
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// Defines and Macros
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
#ifndef MAX_FILEPATH_CAPACITY
|
|
||||||
#define MAX_FILEPATH_CAPACITY 8192 // Maximum capacity for filepath
|
|
||||||
#endif
|
|
||||||
#ifndef MAX_FILEPATH_LENGTH
|
|
||||||
#if defined(_WIN32)
|
|
||||||
#define MAX_FILEPATH_LENGTH 256 // On Win32, MAX_PATH = 260 (limits.h) but Windows 10, Version 1607 enables long paths...
|
|
||||||
#else
|
|
||||||
#define MAX_FILEPATH_LENGTH 4096 // On Linux, PATH_MAX = 4096 by default (limits.h)
|
|
||||||
#endif
|
|
||||||
#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_GAMEPAD_VIBRATION_TIME
|
|
||||||
#define MAX_GAMEPAD_VIBRATION_TIME 2.0f // Maximum vibration time in seconds
|
|
||||||
#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
|
|
||||||
|
|
||||||
#ifndef MAX_AUTOMATION_EVENTS
|
|
||||||
#define MAX_AUTOMATION_EVENTS 16384 // Maximum number of automation events to record
|
|
||||||
#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))
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
|
||||||
// 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
|
|
||||||
bool usingFbo; // Using FBO (RenderTexture) for rendering instead of default framebuffer
|
|
||||||
|
|
||||||
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
|
// Global Variables Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
@ -3695,3 +3539,9 @@ const char *TextFormat(const char *text, ...)
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // !SUPPORT_MODULE_RTEXT
|
#endif // !SUPPORT_MODULE_RTEXT
|
||||||
|
|
||||||
|
// Get Raylib's CoreData struct.
|
||||||
|
// The maintainers do not make a guarantee that this will have a stable layout across versions.
|
||||||
|
CoreData * GetCore() {
|
||||||
|
return &CORE;
|
||||||
|
}
|
||||||
|
|
|
||||||
253
src/rcore.h
Normal file
253
src/rcore.h
Normal file
|
|
@ -0,0 +1,253 @@
|
||||||
|
/**********************************************************************************************
|
||||||
|
*
|
||||||
|
* rcore - Window/display management, Graphic device/context management and input management
|
||||||
|
*
|
||||||
|
* PLATFORMS SUPPORTED:
|
||||||
|
* > PLATFORM_DESKTOP_GLFW (GLFW backend):
|
||||||
|
* - Windows (Win32, Win64)
|
||||||
|
* - Linux (X11/Wayland desktop mode)
|
||||||
|
* - macOS/OSX (x64, arm64)
|
||||||
|
* - FreeBSD, OpenBSD, NetBSD, DragonFly (X11 desktop)
|
||||||
|
* > PLATFORM_DESKTOP_SDL (SDL backend):
|
||||||
|
* - Windows (Win32, Win64)
|
||||||
|
* - Linux (X11/Wayland desktop mode)
|
||||||
|
* - Others (not tested)
|
||||||
|
* > PLATFORM_WEB:
|
||||||
|
* - HTML5 (WebAssembly)
|
||||||
|
* > PLATFORM_DRM:
|
||||||
|
* - Raspberry Pi 0-5 (DRM/KMS)
|
||||||
|
* - Linux DRM subsystem (KMS mode)
|
||||||
|
* > PLATFORM_ANDROID:
|
||||||
|
* - Android (ARM, ARM64)
|
||||||
|
*
|
||||||
|
* CONFIGURATION:
|
||||||
|
* #define SUPPORT_DEFAULT_FONT (default)
|
||||||
|
* Default font is loaded on window initialization to be available for the user to render simple text.
|
||||||
|
* NOTE: If enabled, uses external module functions to load default raylib font (module: text)
|
||||||
|
*
|
||||||
|
* #define SUPPORT_CAMERA_SYSTEM
|
||||||
|
* Camera module is included (rcamera.h) and multiple predefined cameras are available:
|
||||||
|
* free, 1st/3rd person, orbital, custom
|
||||||
|
*
|
||||||
|
* #define SUPPORT_GESTURES_SYSTEM
|
||||||
|
* Gestures module is included (rgestures.h) to support gestures detection: tap, hold, swipe, drag
|
||||||
|
*
|
||||||
|
* #define SUPPORT_MOUSE_GESTURES
|
||||||
|
* Mouse gestures are directly mapped like touches and processed by gestures system.
|
||||||
|
*
|
||||||
|
* #define SUPPORT_BUSY_WAIT_LOOP
|
||||||
|
* Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used
|
||||||
|
*
|
||||||
|
* #define SUPPORT_PARTIALBUSY_WAIT_LOOP
|
||||||
|
* Use a partial-busy wait loop, in this case frame sleeps for most of the time and runs a busy-wait-loop at the end
|
||||||
|
*
|
||||||
|
* #define SUPPORT_SCREEN_CAPTURE
|
||||||
|
* Allow automatic screen capture of current screen pressing F12, defined in KeyCallback()
|
||||||
|
*
|
||||||
|
* #define SUPPORT_GIF_RECORDING
|
||||||
|
* Allow automatic gif recording of current screen pressing CTRL+F12, defined in KeyCallback()
|
||||||
|
*
|
||||||
|
* #define SUPPORT_COMPRESSION_API
|
||||||
|
* Support CompressData() and DecompressData() functions, those functions use zlib implementation
|
||||||
|
* provided by stb_image and stb_image_write libraries, so, those libraries must be enabled on textures module
|
||||||
|
* for linkage
|
||||||
|
*
|
||||||
|
* #define SUPPORT_AUTOMATION_EVENTS
|
||||||
|
* Support automatic events recording and playing, useful for automated testing systems or AI based game playing
|
||||||
|
*
|
||||||
|
* DEPENDENCIES:
|
||||||
|
* raymath - 3D math functionality (Vector2, Vector3, Matrix, Quaternion)
|
||||||
|
* camera - Multiple 3D camera modes (free, orbital, 1st person, 3rd person)
|
||||||
|
* gestures - Gestures system for touch-ready devices (or simulated from mouse inputs)
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* LICENSE: zlib/libpng
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013-2024 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 <stddef.h>
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Defines and Macros
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
#ifndef MAX_FILEPATH_CAPACITY
|
||||||
|
#define MAX_FILEPATH_CAPACITY 8192 // Maximum capacity for filepath
|
||||||
|
#endif
|
||||||
|
#ifndef MAX_FILEPATH_LENGTH
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define MAX_FILEPATH_LENGTH 256 // On Win32, MAX_PATH = 260 (limits.h) but Windows 10, Version 1607 enables long paths...
|
||||||
|
#else
|
||||||
|
#define MAX_FILEPATH_LENGTH 4096 // On Linux, PATH_MAX = 4096 by default (limits.h)
|
||||||
|
#endif
|
||||||
|
#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_GAMEPAD_VIBRATION_TIME
|
||||||
|
#define MAX_GAMEPAD_VIBRATION_TIME 2.0f // Maximum vibration time in seconds
|
||||||
|
#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
|
||||||
|
|
||||||
|
#ifndef MAX_AUTOMATION_EVENTS
|
||||||
|
#define MAX_AUTOMATION_EVENTS 16384 // Maximum number of automation events to record
|
||||||
|
#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))
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// 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
|
||||||
|
bool usingFbo; // Using FBO (RenderTexture) for rendering instead of default framebuffer
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
CoreData * GetCore(); // Get Raylib's CoreData struct. The fields of this are not guaranteed to be stable.
|
||||||
|
|
||||||
|
#endif
|
||||||
Loading…
Reference in New Issue
Block a user