mirror of
				https://github.com/Ed94/gencpp.git
				synced 2025-10-30 22:40:54 -07:00 
			
		
		
		
	Raylib c refactor scripts complete
This commit is contained in:
		| @@ -1,3 +1,4 @@ | ||||
| #pragma once | ||||
| #if INTELLISENSE_DIRECTIVES | ||||
| #include "vendor/compiler.hpp" | ||||
| #endif | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| // Platform architecture | ||||
| #pragma once | ||||
|  | ||||
| #if defined( _WIN64 ) || defined( __x86_64__ ) || defined( _M_X64 ) || defined( __64BIT__ ) || defined( __powerpc64__ ) || defined( __ppc64__ ) || defined( __aarch64__ ) | ||||
| #	ifndef ARCH_64_BIT | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| // Platform compiler | ||||
| #pragma once | ||||
|  | ||||
| #if defined( _MSC_VER ) | ||||
| #	define Compiler_MSVC 1 | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| // Platform OS detection | ||||
| #pragma once | ||||
|  | ||||
| #if defined( _WIN32 ) || defined( _WIN64 ) | ||||
| #	ifndef System_Windows | ||||
|   | ||||
| @@ -1 +1,3 @@ | ||||
| using HINSTANCE = void*; | ||||
| #pragma once | ||||
|  | ||||
| using HINSTANCE = void*; | ||||
|   | ||||
| @@ -1,109 +1,134 @@ | ||||
| /********************************************************************************************** | ||||
|  * | ||||
|  *   raylib configuration flags | ||||
|  * | ||||
|  *   This file defines all the configuration flags for the different raylib modules | ||||
|  * | ||||
|  *   LICENSE: zlib/libpng | ||||
|  * | ||||
|  *   Copyright (c) 2018-2023 Ahmad Fatoum & Ramon Santamaria (@raysan5) | ||||
|  * | ||||
|  *   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. | ||||
|  * | ||||
|  **********************************************************************************************/ | ||||
| * | ||||
| *   raylib configuration flags | ||||
| * | ||||
| *   This file defines all the configuration flags for the different raylib modules | ||||
| * | ||||
| *   LICENSE: zlib/libpng | ||||
| * | ||||
| *   Copyright (c) 2018-2023 Ahmad Fatoum & Ramon Santamaria (@raysan5) | ||||
| * | ||||
| *   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 CONFIG_H | ||||
| #ifndef RL_CONFIG_H | ||||
| #define RL_CONFIG_H | ||||
|  | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Module selection - Some modules could be avoided | ||||
| // Mandatory modules: rcore, rlgl, utils | ||||
| // Mandatory modules: rcore, RLGL_, utils | ||||
| //------------------------------------------------------------------------------------ | ||||
| #define RL_SUPPORT_MODULE_RSHAPES   1 | ||||
| #define RL_SUPPORT_MODULE_RTEXTURES 1 | ||||
| #define RL_SUPPORT_MODULE_RTEXT     1    // WARNING: It requires SUPPORT_MODULE_RTEXTURES to load sprite font textures | ||||
| #define RL_SUPPORT_MODULE_RMODELS   1 | ||||
| #define RL_SUPPORT_MODULE_RAUDIO    1 | ||||
| #define RL_SUPPORT_MODULE_RSHAPES          1 | ||||
| #define RL_SUPPORT_MODULE_RTEXTURES        1 | ||||
| #define RL_SUPPORT_MODULE_RTEXT            1       // WARNING: It requires RL_SUPPORT_MODULE_RTEXTURES to load sprite font textures | ||||
| #define RL_SUPPORT_MODULE_RMODELS          1 | ||||
| #define RL_SUPPORT_MODULE_RAUDIO           1 | ||||
|  | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Module: rcore - Configuration Flags | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Camera module is included (rcamera.h) and multiple predefined cameras are available: free, 1st/3rd person, orbital | ||||
| #define RL_SUPPORT_CAMERA_SYSTEM 1 | ||||
| // RL_Camera module is included (rcamera.h) and multiple predefined cameras are available: free, 1st/3rd person, orbital | ||||
| #define RL_SUPPORT_CAMERA_SYSTEM           1 | ||||
| // Gestures module is included (rgestures.h) to support gestures detection: tap, hold, swipe, drag | ||||
| #define RL_SUPPORT_GESTURES_SYSTEM 1 | ||||
| #define RL_SUPPORT_GESTURES_SYSTEM         1 | ||||
| // Include pseudo-random numbers generator (rprand.h), based on Xoshiro128** and SplitMix64 | ||||
| #define SUPPORT_RPRAND_GENERATOR        1 | ||||
| // Mouse gestures are directly mapped like touches and processed by gestures system | ||||
| #define RL_SUPPORT_MOUSE_GESTURES 1 | ||||
| #define RL_SUPPORT_MOUSE_GESTURES          1 | ||||
| // Reconfigure standard input to receive key inputs, works with SSH connection. | ||||
| #define RL_SUPPORT_SSH_KEYBOARD_RPI 1 | ||||
| #define RL_SUPPORT_SSH_KEYBOARD_RPI        1 | ||||
| // Setting a higher resolution can improve the accuracy of time-out intervals in wait functions. | ||||
| // However, it can also reduce overall system performance, because the thread scheduler switches tasks more often. | ||||
| #define RL_SUPPORT_WINMM_HIGHRES_TIMER 1 | ||||
| #define RL_SUPPORT_WINMM_HIGHRES_TIMER     1 | ||||
| // Use busy wait loop for timing sync, if not defined, a high-resolution timer is set up and used | ||||
| // #define SUPPORT_BUSY_WAIT_LOOP          1 | ||||
| //#define SUPPORT_BUSY_WAIT_LOOP          1 | ||||
| // Use a partial-busy wait loop, in this case frame sleeps for most of the time, but then runs a busy loop at the end for accuracy | ||||
| #define RL_SUPPORT_PARTIALBUSY_WAIT_LOOP 1 | ||||
| #define RL_SUPPORT_PARTIALBUSY_WAIT_LOOP    1 | ||||
| // Allow automatic screen capture of current screen pressing F12, defined in KeyCallback() | ||||
| #define RL_SUPPORT_SCREEN_CAPTURE 1 | ||||
| #define RL_SUPPORT_SCREEN_CAPTURE          1 | ||||
| // Allow automatic gif recording of current screen pressing CTRL+F12, defined in KeyCallback() | ||||
| #define RL_SUPPORT_GIF_RECORDING 1 | ||||
| // Support CompressData() and DecompressData() functions | ||||
| #define RL_SUPPORT_COMPRESSION_API 1 | ||||
| #define RL_SUPPORT_GIF_RECORDING           1 | ||||
| // Support RL_CompressData() and RL_DecompressData() functions | ||||
| #define RL_SUPPORT_COMPRESSION_API         1 | ||||
| // Support automatic generated events, loading and recording of those events when required | ||||
| // #define SUPPORT_EVENTS_AUTOMATION       1 | ||||
| #define RL_SUPPORT_AUTOMATION_EVENTS       1 | ||||
| // Support custom frame control, only for advance users | ||||
| // By default EndDrawing() does this job: draws everything + SwapScreenBuffer() + manage frame timing + PollInputEvents() | ||||
| // By default RL_EndDrawing() does this job: draws everything + RL_SwapScreenBuffer() + manage frame timing + RL_PollInputEvents() | ||||
| // Enabling this flag allows manual control of the frame processes, use at your own risk | ||||
| // #define SUPPORT_CUSTOM_FRAME_CONTROL    1 | ||||
| //#define SUPPORT_CUSTOM_FRAME_CONTROL    1 | ||||
|  | ||||
| // rcore: Configuration values | ||||
| //------------------------------------------------------------------------------------ | ||||
| #define RL_MAX_FILEPATH_CAPACITY  8192    // Maximum file paths capacity | ||||
| #define RL_MAX_FILEPATH_LENGTH    4096    // Maximum length for filepaths (Linux PATH_MAX default value) | ||||
| #define RL_MAX_FILEPATH_CAPACITY        8192       // Maximum file paths capacity | ||||
| #define RL_MAX_FILEPATH_LENGTH          4096       // Maximum length for filepaths (Linux PATH_MAX default value) | ||||
|  | ||||
| #define RL_MAX_KEYBOARD_KEYS      512    // Maximum number of keyboard keys supported | ||||
| #define RL_MAX_MOUSE_BUTTONS      8      // Maximum number of mouse buttons supported | ||||
| #define RL_MAX_GAMEPADS           4      // Maximum number of gamepads supported | ||||
| #define RL_MAX_GAMEPAD_AXIS       8      // Maximum number of axis supported (per gamepad) | ||||
| #define RL_MAX_GAMEPAD_BUTTONS    32     // Maximum number of buttons supported (per gamepad) | ||||
| #define RL_MAX_TOUCH_POINTS       8      // Maximum number of touch points supported | ||||
| #define RL_MAX_KEY_PRESSED_QUEUE  16     // Maximum number of keys in the key input queue | ||||
| #define RL_MAX_CHAR_PRESSED_QUEUE 16     // Maximum number of characters in the char input queue | ||||
| #define RL_MAX_KEYBOARD_KEYS             512       // Maximum number of keyboard keys supported | ||||
| #define RL_MAX_MOUSE_BUTTONS               8       // Maximum number of mouse buttons supported | ||||
| #define RL_MAX_GAMEPADS                    4       // Maximum number of gamepads supported | ||||
| #define RL_MAX_GAMEPAD_AXIS                8       // Maximum number of axis supported (per gamepad) | ||||
| #define RL_MAX_GAMEPAD_BUTTONS            32       // Maximum number of buttons supported (per gamepad) | ||||
| #define RL_MAX_TOUCH_POINTS                8       // Maximum number of touch points supported | ||||
| #define RL_MAX_KEY_PRESSED_QUEUE          16       // Maximum number of keys in the key input queue | ||||
| #define RL_MAX_CHAR_PRESSED_QUEUE         16       // Maximum number of characters in the char input queue | ||||
|  | ||||
| #define RL_MAX_DECOMPRESSION_SIZE 64    // Max size allocated for decompression in MB | ||||
| #define RL_MAX_DECOMPRESSION_SIZE         64       // Max size allocated for decompression in MB | ||||
|  | ||||
| #define RL_MAX_AUTOMATION_EVENTS       16384       // Maximum number of automation events to record | ||||
|  | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Module: rlgl - Configuration values | ||||
| // Module: RLGL_ - Configuration values | ||||
| //------------------------------------------------------------------------------------ | ||||
|  | ||||
| // Enable OpenGL Debug Context (only available on OpenGL 4.3) | ||||
| // #define RLGL_ENABLE_OPENGL_DEBUG_CONTEXT       1 | ||||
| //#define RLGL_ENABLE_OPENGL_DEBUG_CONTEXT       1 | ||||
|  | ||||
| // Show OpenGL extensions and capabilities detailed logs on init | ||||
| // #define RLGL_SHOW_GL_DETAILS_INFO              1 | ||||
| //#define RLGL_SHOW_GL_DETAILS_INFO              1 | ||||
|  | ||||
| // #define RL_DEFAULT_BATCH_BUFFER_ELEMENTS    4096    // Default internal render batch elements limits | ||||
| //#define RL_DEFAULT_BATCH_BUFFER_ELEMENTS    4096    // Default internal render batch elements limits | ||||
| #define RL_DEFAULT_BATCH_BUFFERS               1      // Default number of batch buffers (multi-buffering) | ||||
| #define RL_DEFAULT_BATCH_DRAWCALLS           256      // Default number of batch draw calls (by state changes: mode, texture) | ||||
| #define RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS     4      // Maximum number of textures units that can be activated on batch drawing (RL_SetShaderValueTexture()) | ||||
|  | ||||
| #define RL_MAX_MATRIX_STACK_SIZE              32      // Maximum size of internal RL_Matrix stack | ||||
|  | ||||
| #define RL_MAX_SHADER_LOCATIONS               32      // Maximum number of shader locations supported | ||||
|  | ||||
| #define RL_CULL_DISTANCE_NEAR               0.01      // Default projection matrix near cull distance | ||||
| #define RL_CULL_DISTANCE_FAR              1000.0      // Default projection matrix far cull distance | ||||
|  | ||||
| // Default shader vertex attribute names to set location points | ||||
| // NOTE: When a new shader is loaded, the following locations are tried to be set for convenience | ||||
| #define RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION     "vertexPosition"    // Bound by default to shader location: 0 | ||||
| #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD     "vertexTexCoord"    // Bound by default to shader location: 1 | ||||
| #define RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL       "vertexNormal"      // Bound by default to shader location: 2 | ||||
| #define RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR        "vertexColor"       // Bound by default to shader location: 3 | ||||
| #define RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT      "vertexTangent"     // Bound by default to shader location: 4 | ||||
| #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2    "vertexTexCoord2"   // Bound by default to shader location: 5 | ||||
|  | ||||
| #define RL_DEFAULT_SHADER_UNIFORM_NAME_MVP         "mvp"               // model-view-projection matrix | ||||
| #define RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW        "matView"           // view matrix | ||||
| #define RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION  "matProjection"     // projection matrix | ||||
| #define RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL       "matModel"          // model matrix | ||||
| #define RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL      "matNormal"         // normal matrix (transpose(inverse(matModelView)) | ||||
| #define RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR       "colDiffuse"        // color diffuse (base tint color, multiplied by texture color) | ||||
| #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0  "texture0"          // texture0 (texture slot active 0) | ||||
| #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1  "texture1"          // texture1 (texture slot active 1) | ||||
| #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2  "texture2"          // texture2 (texture slot active 2) | ||||
|  | ||||
|  | ||||
| //------------------------------------------------------------------------------------ | ||||
| @@ -111,36 +136,40 @@ | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Use QUADS instead of TRIANGLES for drawing when possible | ||||
| // Some lines-based shapes could still use lines | ||||
| #define RL_SUPPORT_QUADS_DRAW_MODE 1 | ||||
| #define RL_SUPPORT_QUADS_DRAW_MODE         1 | ||||
|  | ||||
| // rshapes: Configuration values | ||||
| //------------------------------------------------------------------------------------ | ||||
| #define SPLINE_SEGMENT_DIVISIONS       24       // Spline segments subdivisions | ||||
|  | ||||
|  | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Module: rtextures - Configuration Flags | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Selecte desired fileformats to be supported for image data loading | ||||
| #define RL_SUPPORT_FILEFORMAT_PNG 1 | ||||
| // #define SUPPORT_FILEFORMAT_BMP      1 | ||||
| // #define SUPPORT_FILEFORMAT_TGA      1 | ||||
| // #define SUPPORT_FILEFORMAT_JPG      1 | ||||
| #define RL_SUPPORT_FILEFORMAT_GIF 1 | ||||
| #define RL_SUPPORT_FILEFORMAT_QOI 1 | ||||
| // #define SUPPORT_FILEFORMAT_PSD      1 | ||||
| #define RL_SUPPORT_FILEFORMAT_DDS 1 | ||||
| // #define SUPPORT_FILEFORMAT_HDR      1 | ||||
| // #define SUPPORT_FILEFORMAT_PIC          1 | ||||
| // #define SUPPORT_FILEFORMAT_KTX      1 | ||||
| // #define SUPPORT_FILEFORMAT_ASTC     1 | ||||
| // #define SUPPORT_FILEFORMAT_PKM      1 | ||||
| // #define SUPPORT_FILEFORMAT_PVR      1 | ||||
| // #define SUPPORT_FILEFORMAT_SVG      1 | ||||
| #define RL_SUPPORT_FILEFORMAT_PNG      1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_BMP      1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_TGA      1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_JPG      1 | ||||
| #define RL_SUPPORT_FILEFORMAT_GIF      1 | ||||
| #define RL_SUPPORT_FILEFORMAT_QOI      1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_PSD      1 | ||||
| #define RL_SUPPORT_FILEFORMAT_DDS      1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_HDR      1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_PIC          1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_KTX      1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_ASTC     1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_PKM      1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_PVR      1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_SVG      1 | ||||
|  | ||||
| // Support image export functionality (.png, .bmp, .tga, .jpg, .qoi) | ||||
| #define RL_SUPPORT_IMAGE_EXPORT 1 | ||||
| #define RL_SUPPORT_IMAGE_EXPORT            1 | ||||
| // Support procedural image generation functionality (gradient, spot, perlin-noise, cellular) | ||||
| #define RL_SUPPORT_IMAGE_GENERATION 1 | ||||
| #define RL_SUPPORT_IMAGE_GENERATION        1 | ||||
| // Support multiple image editing functions to scale, adjust colors, flip, draw on images, crop... | ||||
| // If not defined, still some functions are supported: ImageFormat(), ImageCrop(), ImageToPOT() | ||||
| #define RL_SUPPORT_IMAGE_MANIPULATION 1 | ||||
| // If not defined, still some functions are supported: RL_ImageFormat(), RL_ImageCrop(), RL_ImageToPOT() | ||||
| #define RL_SUPPORT_IMAGE_MANIPULATION      1 | ||||
|  | ||||
|  | ||||
| //------------------------------------------------------------------------------------ | ||||
| @@ -148,79 +177,86 @@ | ||||
| //------------------------------------------------------------------------------------ | ||||
| // 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 | ||||
| #define RL_SUPPORT_DEFAULT_FONT 1 | ||||
| #define RL_SUPPORT_DEFAULT_FONT            1 | ||||
| // Selected desired font fileformats to be supported for loading | ||||
| #define RL_SUPPORT_FILEFORMAT_FNT 1 | ||||
| #define RL_SUPPORT_FILEFORMAT_TTF 1 | ||||
| #define RL_SUPPORT_FILEFORMAT_FNT          1 | ||||
| #define RL_SUPPORT_FILEFORMAT_TTF          1 | ||||
|  | ||||
| // Support text management functions | ||||
| // If not defined, still some functions are supported: TextLength(), TextFormat() | ||||
| #define RL_SUPPORT_TEXT_MANIPULATION 1 | ||||
| // If not defined, still some functions are supported: RL_TextLength(), RL_TextFormat() | ||||
| #define RL_SUPPORT_TEXT_MANIPULATION       1 | ||||
|  | ||||
| // On font atlas image generation [GenImageFontAtlas()], add a 3x3 pixels white rectangle | ||||
| // On font atlas image generation [RL_GenImageFontAtlas()], add a 3x3 pixels white rectangle | ||||
| // at the bottom-right corner of the atlas. It can be useful to for shapes drawing, to allow | ||||
| // drawing text and shapes with a single draw call [SetShapesTexture()]. | ||||
| #define RL_SUPPORT_FONT_ATLAS_WHITE_REC 1 | ||||
| // drawing text and shapes with a single draw call [RL_SetShapesTexture()]. | ||||
| #define RL_SUPPORT_FONT_ATLAS_WHITE_REC    1 | ||||
|  | ||||
| // rtext: Configuration values | ||||
| //------------------------------------------------------------------------------------ | ||||
| #define RL_MAX_TEXT_BUFFER_LENGTH 1024    // Size of internal static buffers used on some functions: | ||||
| // TextFormat(), TextSubtext(), TextToUpper(), TextToLower(), TextToPascal(), TextSplit() | ||||
| #define RL_MAX_TEXTSPLIT_COUNT 128    // Maximum number of substrings to split: TextSplit() | ||||
| #define RL_MAX_TEXT_BUFFER_LENGTH       1024       // RL_Size of internal static buffers used on some functions: | ||||
|                                                 // RL_TextFormat(), RL_TextSubtext(), RL_TextToUpper(), RL_TextToLower(), RL_TextToPascal(), TextSplit() | ||||
| #define RL_MAX_TEXTSPLIT_COUNT           128       // Maximum number of substrings to split: TextSplit() | ||||
|  | ||||
|  | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Module: rmodels - Configuration Flags | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Selected desired model fileformats to be supported for loading | ||||
| #define RL_SUPPORT_FILEFORMAT_OBJ  1 | ||||
| #define RL_SUPPORT_FILEFORMAT_MTL  1 | ||||
| #define RL_SUPPORT_FILEFORMAT_IQM  1 | ||||
| #define RL_SUPPORT_FILEFORMAT_GLTF 1 | ||||
| #define RL_SUPPORT_FILEFORMAT_VOX  1 | ||||
| #define RL_SUPPORT_FILEFORMAT_M3D  1 | ||||
| #define RL_SUPPORT_FILEFORMAT_OBJ          1 | ||||
| #define RL_SUPPORT_FILEFORMAT_MTL          1 | ||||
| #define RL_SUPPORT_FILEFORMAT_IQM          1 | ||||
| #define RL_SUPPORT_FILEFORMAT_GLTF         1 | ||||
| #define RL_SUPPORT_FILEFORMAT_VOX          1 | ||||
| #define RL_SUPPORT_FILEFORMAT_M3D          1 | ||||
| // Support procedural mesh generation functions, uses external par_shapes.h library | ||||
| // NOTE: Some generated meshes DO NOT include generated texture coordinates | ||||
| #define RL_SUPPORT_MESH_GENERATION 1 | ||||
| #define RL_SUPPORT_MESH_GENERATION         1 | ||||
|  | ||||
| // rmodels: Configuration values | ||||
| //------------------------------------------------------------------------------------ | ||||
| #define RL_MAX_MATERIAL_MAPS       12    // Maximum number of shader maps supported | ||||
| #define RL_MAX_MESH_VERTEX_BUFFERS 7     // Maximum vertex buffers (VBO) per mesh | ||||
| #define RL_MAX_MATERIAL_MAPS              12       // Maximum number of shader maps supported | ||||
| #define RL_MAX_MESH_VERTEX_BUFFERS         7       // Maximum vertex buffers (VBO) per mesh | ||||
|  | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Module: raudio - Configuration Flags | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Desired audio fileformats to be supported for loading | ||||
| #define RL_SUPPORT_FILEFORMAT_WAV 1 | ||||
| #define RL_SUPPORT_FILEFORMAT_OGG 1 | ||||
| #define RL_SUPPORT_FILEFORMAT_MP3 1 | ||||
| #define RL_SUPPORT_FILEFORMAT_QOA 1 | ||||
| // #define SUPPORT_FILEFORMAT_FLAC         1 | ||||
| #define RL_SUPPORT_FILEFORMAT_XM  1 | ||||
| #define RL_SUPPORT_FILEFORMAT_MOD 1 | ||||
| #define RL_SUPPORT_FILEFORMAT_WAV          1 | ||||
| #define RL_SUPPORT_FILEFORMAT_OGG          1 | ||||
| #define RL_SUPPORT_FILEFORMAT_MP3          1 | ||||
| #define RL_SUPPORT_FILEFORMAT_QOA          1 | ||||
| //#define RL_SUPPORT_FILEFORMAT_FLAC         1 | ||||
| #define RL_SUPPORT_FILEFORMAT_XM           1 | ||||
| #define RL_SUPPORT_FILEFORMAT_MOD          1 | ||||
|  | ||||
| // raudio: Configuration values | ||||
| //------------------------------------------------------------------------------------ | ||||
| #define RL_AUDIO_DEVICE_FORMAT            ma_format_f32    // Device output format (miniaudio: float-32bit) | ||||
| #define RL_AUDIO_DEVICE_CHANNELS          2                // Device output channels: stereo | ||||
| #define RL_AUDIO_DEVICE_SAMPLE_RATE       0                // Device sample rate (device default) | ||||
| #define RL_AUDIO_DEVICE_FORMAT    ma_format_f32    // Device output format (miniaudio: float-32bit) | ||||
| #define RL_AUDIO_DEVICE_CHANNELS              2    // Device output channels: stereo | ||||
| #define RL_AUDIO_DEVICE_SAMPLE_RATE           0    // Device sample rate (device default) | ||||
|  | ||||
| #define RL_MAX_AUDIO_BUFFER_POOL_CHANNELS 16    // Maximum number of audio pool channels | ||||
| #define RL_MAX_AUDIO_BUFFER_POOL_CHANNELS    16    // Maximum number of audio pool channels | ||||
|  | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Module: utils - Configuration Flags | ||||
| //------------------------------------------------------------------------------------ | ||||
| // Standard file io library (stdio.h) included | ||||
| #define RL_SUPPORT_STANDARD_FILEIO 1 | ||||
| // Show TRACELOG() output messages | ||||
| // NOTE: By default LOG_DEBUG traces not shown | ||||
| #define RL_SUPPORT_TRACELOG 1 | ||||
| // #define SUPPORT_TRACELOG_DEBUG          1 | ||||
| #define RL_SUPPORT_STANDARD_FILEIO         1 | ||||
| // Show RL_TRACELOG() output messages | ||||
| // NOTE: By default RL_LOG_DEBUG traces not shown | ||||
| #define RL_SUPPORT_TRACELOG                1 | ||||
| //#define RL_SUPPORT_TRACELOG_DEBUG          1 | ||||
|  | ||||
| // utils: Configuration values | ||||
| //------------------------------------------------------------------------------------ | ||||
| #define RL_MAX_TRACELOG_MSG_LENGTH 256    // Max length of one trace-log message | ||||
| #define RL_MAX_TRACELOG_MSG_LENGTH       256       // Max length of one trace-log message | ||||
|  | ||||
| #endif // RL_CONFIG_H | ||||
|  | ||||
| #if defined(__cplusplus) | ||||
|     #define RL_NS_BEGIN namespace raylib { | ||||
|     #define RL_NS_END } | ||||
| #else | ||||
|     #define RL_NS_BEGIN | ||||
|     #define RL_NS_END | ||||
| #endif | ||||
| // CONFIG_H | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,46 +1,46 @@ | ||||
| /******************************************************************************************* | ||||
|  * | ||||
|  *   rcamera - Basic camera system with support for multiple camera modes | ||||
|  * | ||||
|  *   CONFIGURATION: | ||||
|  *       #define RCAMERA_IMPLEMENTATION | ||||
|  *           Generates the implementation of the library into the included file. | ||||
|  *           If not defined, the library is in header only mode and can be included in other headers | ||||
|  *           or source files without problems. But only ONE file should hold the implementation. | ||||
|  * | ||||
|  *       #define RCAMERA_STANDALONE | ||||
|  *           If defined, the library can be used as standalone as a camera system but some | ||||
|  *           functions must be redefined to manage inputs accordingly. | ||||
|  * | ||||
|  *   CONTRIBUTORS: | ||||
|  *       Ramon Santamaria:   Supervision, review, update and maintenance | ||||
|  *       Christoph Wagner:   Complete redesign, using raymath (2022) | ||||
|  *       Marc Palau:         Initial implementation (2014) | ||||
|  * | ||||
|  * | ||||
|  *   LICENSE: zlib/libpng | ||||
|  * | ||||
|  *   Copyright (c) 2022-2023 Christoph Wagner (@Crydsch) & Ramon Santamaria (@raysan5) | ||||
|  * | ||||
|  *   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. | ||||
|  * | ||||
|  **********************************************************************************************/ | ||||
| * | ||||
| *   rcamera - Basic camera system with support for multiple camera modes | ||||
| * | ||||
| *   CONFIGURATION: | ||||
| *       #define RCAMERA_IMPLEMENTATION | ||||
| *           Generates the implementation of the library into the included file. | ||||
| *           If not defined, the library is in header only mode and can be included in other headers | ||||
| *           or source files without problems. But only ONE file should hold the implementation. | ||||
| * | ||||
| *       #define RCAMERA_STANDALONE | ||||
| *           If defined, the library can be used as standalone as a camera system but some | ||||
| *           functions must be redefined to manage inputs accordingly. | ||||
| * | ||||
| *   CONTRIBUTORS: | ||||
| *       Ramon Santamaria:   Supervision, review, update and maintenance | ||||
| *       Christoph Wagner:   Complete redesign, using raymath (2022) | ||||
| *       Marc Palau:         Initial implementation (2014) | ||||
| * | ||||
| * | ||||
| *   LICENSE: zlib/libpng | ||||
| * | ||||
| *   Copyright (c) 2022-2023 Christoph Wagner (@Crydsch) & Ramon Santamaria (@raysan5) | ||||
| * | ||||
| *   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 RCAMERA_H | ||||
| #define RL_RCAMERA_H | ||||
| #define RCAMERA_H | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Defines and Macros | ||||
| @@ -49,89 +49,80 @@ | ||||
|  | ||||
| // Function specifiers in case library is build/used as a shared library (Windows) | ||||
| // NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll | ||||
| #if defined( _WIN32 ) | ||||
| #if defined( BUILD_LIBTYPE_SHARED ) | ||||
| #if defined( __TINYC__ ) | ||||
| #define RL___declspec( x ) __attribute__( ( x ) ) | ||||
| #if defined(_WIN32) | ||||
| #if defined(RL_BUILD_LIBTYPE_SHARED) | ||||
| #if defined(__TINYC__) | ||||
| #define __declspec(x) __attribute__((x)) | ||||
| #endif | ||||
| #elif defined( USE_LIBTYPE_SHARED ) | ||||
| #define RLAPI __declspec(dllexport)     // We are building the library as a Win32 shared library (.dll) | ||||
| #elif defined(RL_USE_LIBTYPE_SHARED) | ||||
| #define RLAPI __declspec(dllimport)     // We are using the library as a Win32 shared library (.dll) | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #ifndef RLAPI | ||||
|     #define RLAPI       // Functions defined as 'extern' by default (implicit specifiers) | ||||
| #endif | ||||
|  | ||||
| #if defined( RCAMERA_STANDALONE ) | ||||
| #define RL_CAMERA_CULL_DISTANCE_NEAR 0.01 | ||||
| #define RL_CAMERA_CULL_DISTANCE_FAR  1000.0 | ||||
| #if defined(RCAMERA_STANDALONE) | ||||
|     #define RL_CAMERA_CULL_DISTANCE_NEAR      0.01 | ||||
|     #define RL_CAMERA_CULL_DISTANCE_FAR    1000.0 | ||||
| #else | ||||
| #define RL_CAMERA_CULL_DISTANCE_NEAR RL_CULL_DISTANCE_NEAR | ||||
| #define RL_CAMERA_CULL_DISTANCE_FAR  RL_CULL_DISTANCE_FAR | ||||
|     #define RL_CAMERA_CULL_DISTANCE_NEAR   RL_CULL_DISTANCE_NEAR | ||||
|     #define RL_CAMERA_CULL_DISTANCE_FAR    RL_CULL_DISTANCE_FAR | ||||
| #endif | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Types and Structures Definition | ||||
| // NOTE: Below types are required for standalone usage | ||||
| //---------------------------------------------------------------------------------- | ||||
| #if defined( RCAMERA_STANDALONE ) | ||||
| // Vector2, 2 components | ||||
| typedef struct Vector2 | ||||
| { | ||||
| 	f32 x;    // Vector x component | ||||
| 	f32 y;    // Vector y component | ||||
| #if defined(RCAMERA_STANDALONE) | ||||
|     // RL_Vector2, 2 components | ||||
|     typedef struct RL_Vector2 { | ||||
|         float x;                // Vector x component | ||||
|         float y;                // Vector y component | ||||
|     } RL_Vector2; | ||||
|  | ||||
| } Vector2; | ||||
|     // RL_Vector3, 3 components | ||||
|     typedef struct RL_Vector3 { | ||||
|         float x;                // Vector x component | ||||
|         float y;                // Vector y component | ||||
|         float z;                // Vector z component | ||||
|     } RL_Vector3; | ||||
|  | ||||
| // Vector3, 3 components | ||||
| typedef struct Vector3 | ||||
| { | ||||
| 	f32 x;    // Vector x component | ||||
| 	f32 y;    // Vector y component | ||||
| 	f32 z;    // Vector z component | ||||
|     // RL_Matrix, 4x4 components, column major, OpenGL style, right-handed | ||||
|     typedef struct RL_Matrix { | ||||
|         float m0, m4, m8, m12;  // RL_Matrix first row (4 components) | ||||
|         float m1, m5, m9, m13;  // RL_Matrix second row (4 components) | ||||
|         float m2, m6, m10, m14; // RL_Matrix third row (4 components) | ||||
|         float m3, m7, m11, m15; // RL_Matrix fourth row (4 components) | ||||
|     } RL_Matrix; | ||||
|  | ||||
| } Vector3; | ||||
|     // RL_Camera type, defines a camera position/orientation in 3d space | ||||
|     typedef struct RL_Camera3D { | ||||
|         RL_Vector3 position;       // RL_Camera position | ||||
|         RL_Vector3 target;         // RL_Camera target it looks-at | ||||
|         RL_Vector3 up;             // RL_Camera up vector (rotation over its axis) | ||||
|         float fovy;             // RL_Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic | ||||
|         int projection;         // RL_Camera projection type: RL_CAMERA_PERSPECTIVE or RL_CAMERA_ORTHOGRAPHIC | ||||
|     } RL_Camera3D; | ||||
|  | ||||
| // Matrix, 4x4 components, column major, OpenGL style, right-handed | ||||
| typedef struct Matrix | ||||
| { | ||||
| 	f32 m0, m4, m8, m12;     // Matrix first row (4 components) | ||||
| 	f32 m1, m5, m9, m13;     // Matrix second row (4 components) | ||||
| 	f32 m2, m6, m10, m14;    // Matrix third row (4 components) | ||||
| 	f32 m3, m7, m11, m15;    // Matrix fourth row (4 components) | ||||
|     typedef RL_Camera3D RL_Camera;    // RL_Camera type fallback, defaults to RL_Camera3D | ||||
|  | ||||
| } Matrix; | ||||
|     // RL_Camera projection | ||||
|     typedef enum { | ||||
|         RL_CAMERA_PERSPECTIVE = 0, // Perspective projection | ||||
|         RL_CAMERA_ORTHOGRAPHIC     // Orthographic projection | ||||
|     } RL_CameraProjection; | ||||
|  | ||||
| // Camera type, defines a camera position/orientation in 3d space | ||||
| typedef struct Camera3D | ||||
| { | ||||
| 	Vector3 position;      // Camera position | ||||
| 	Vector3 target;        // Camera target it looks-at | ||||
| 	Vector3 up;            // Camera up vector (rotation over its axis) | ||||
| 	f32     fovy;          // Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic | ||||
| 	s32     projection;    // Camera projection type: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC | ||||
|  | ||||
| } Camera3D; | ||||
|  | ||||
| typedef Camera3D Camera;    // Camera type fallback, defaults to Camera3D | ||||
|  | ||||
| // Camera projection | ||||
| typedef enum | ||||
| { | ||||
| 	Camera_Perspective = 0,    // Perspective projection | ||||
| 	Camera_Orthographic        // orthographic projection | ||||
|  | ||||
| } CameraProjection; | ||||
|  | ||||
| // Camera system modes | ||||
| typedef enum | ||||
| { | ||||
| 	Camera_Custom = 0,      // Camera custom, controlled by user (UpdateCamera() does nothing) | ||||
| 	Camera_Free,            // Camera free mode | ||||
| 	Camera_Orbital,         // Camera orbital, around target, zoom supported | ||||
| 	Camera_First_Person,    // Camera first person | ||||
| 	Camera_Third_Person     // camera third person | ||||
|  | ||||
| } CameraMode; | ||||
|     // RL_Camera system modes | ||||
|     typedef enum { | ||||
|         RL_CAMERA_CUSTOM = 0,      // RL_Camera custom, controlled by user (RL_UpdateCamera() does nothing) | ||||
|         RL_CAMERA_FREE,            // RL_Camera free mode | ||||
|         RL_CAMERA_ORBITAL,         // RL_Camera orbital, around target, zoom supported | ||||
|         RL_CAMERA_FIRST_PERSON,    // RL_Camera first person | ||||
|         RL_CAMERA_THIRD_PERSON     // RL_Camera third person | ||||
|     } RL_CameraMode; | ||||
| #endif | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| @@ -143,92 +134,85 @@ typedef enum | ||||
| // Module Functions Declaration | ||||
| //---------------------------------------------------------------------------------- | ||||
|  | ||||
| #if defined( __cplusplus ) | ||||
| namespace raylib | ||||
| { | ||||
| 	extern "C" | ||||
| 	{ | ||||
| // Prevents name mangling of functions | ||||
| #if defined(__cplusplus) | ||||
| extern "C" {            // Prevents name mangling of functions | ||||
| #endif | ||||
|  | ||||
| 		RLAPI Vector3 get_camera_forward( Camera* camera ); | ||||
| 		RLAPI Vector3 get_camera_up( Camera* camera ); | ||||
| 		RLAPI Vector3 get_camera_right( Camera* camera ); | ||||
| RLAPI RL_Vector3 GetCameraForward(RL_Camera *camera); | ||||
| RLAPI RL_Vector3 GetCameraUp(RL_Camera *camera); | ||||
| RLAPI RL_Vector3 GetCameraRight(RL_Camera *camera); | ||||
|  | ||||
| 		// Camera movement | ||||
| 		RLAPI void camera_move_forward( Camera* camera, f32 distance, bool moveInWorldPlane ); | ||||
| 		RLAPI void camera_move_up( Camera* camera, f32 distance ); | ||||
| 		RLAPI void camera_move_right( Camera* camera, f32 distance, bool moveInWorldPlane ); | ||||
| 		RLAPI void camera_move_to_target( Camera* camera, f32 delta ); | ||||
| // RL_Camera movement | ||||
| RLAPI void CameraMoveForward(RL_Camera *camera, float distance, bool moveInWorldPlane); | ||||
| RLAPI void CameraMoveUp(RL_Camera *camera, float distance); | ||||
| RLAPI void CameraMoveRight(RL_Camera *camera, float distance, bool moveInWorldPlane); | ||||
| RLAPI void CameraMoveToTarget(RL_Camera *camera, float delta); | ||||
|  | ||||
| 		// Camera rotation | ||||
| 		RLAPI void camera_yaw( Camera* camera, f32 angle, bool rotateAroundTarget ); | ||||
| 		RLAPI void camera_pitch( Camera* camera, f32 angle, bool lockView, bool rotateAroundTarget, bool rotateUp ); | ||||
| 		RLAPI void camera_roll( Camera* camera, f32 angle ); | ||||
| // RL_Camera rotation | ||||
| RLAPI void CameraYaw(RL_Camera *camera, float angle, bool rotateAroundTarget); | ||||
| RLAPI void CameraPitch(RL_Camera *camera, float angle, bool lockView, bool rotateAroundTarget, bool rotateUp); | ||||
| RLAPI void CameraRoll(RL_Camera *camera, float angle); | ||||
|  | ||||
| 		RLAPI Matrix get_camera_view_matrix( Camera* camera ); | ||||
| 		RLAPI Matrix get_camera_projection_matrix( Camera* camera, f32 aspect ); | ||||
| RLAPI RL_Matrix GetCameraViewMatrix(RL_Camera *camera); | ||||
| RLAPI RL_Matrix GetCameraProjectionMatrix(RL_Camera* camera, float aspect); | ||||
|  | ||||
| #if defined( __cplusplus ) | ||||
| 	} | ||||
| #if defined(__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif | ||||
| // RCAMERA_H | ||||
| #endif // RCAMERA_H | ||||
|  | ||||
|  | ||||
| /*********************************************************************************** | ||||
|  * | ||||
|  *   CAMERA IMPLEMENTATION | ||||
|  * | ||||
|  ************************************************************************************/ | ||||
| * | ||||
| *   CAMERA IMPLEMENTATION | ||||
| * | ||||
| ************************************************************************************/ | ||||
|  | ||||
| #if defined( RCAMERA_IMPLEMENTATION ) | ||||
| #if defined(RCAMERA_IMPLEMENTATION) | ||||
|  | ||||
| #include "raymath.h" | ||||
| // Required for vector maths: | ||||
| // Vector3Add() | ||||
| // Vector3Subtract() | ||||
| // Vector3Scale() | ||||
| // Vector3Normalize() | ||||
| // Vector3Distance() | ||||
| // Vector3CrossProduct() | ||||
| // Vector3RotateByAxisAngle() | ||||
| // Vector3Angle() | ||||
| // Vector3Negate() | ||||
| // MatrixLookAt() | ||||
| // MatrixPerspective() | ||||
| // MatrixOrtho() | ||||
| // MatrixIdentity() | ||||
| #include "raymath.h"        // Required for vector maths: | ||||
|                             // RL_Vector3Add() | ||||
|                             // RL_Vector3Subtract() | ||||
|                             // RL_Vector3Scale() | ||||
|                             // RL_Vector3Normalize() | ||||
|                             // RL_Vector3Distance() | ||||
|                             // RL_Vector3CrossProduct() | ||||
|                             // RL_Vector3RotateByAxisAngle() | ||||
|                             // RL_Vector3Angle() | ||||
|                             // RL_Vector3Negate() | ||||
|                             // RL_MatrixLookAt() | ||||
|                             // RL_MatrixPerspective() | ||||
|                             // RL_MatrixOrtho() | ||||
|                             // RL_MatrixIdentity() | ||||
|  | ||||
| // raylib required functionality: | ||||
| // GetMouseDelta() | ||||
| // GetMouseWheelMove() | ||||
| // IsKeyDown() | ||||
| // IsKeyPressed() | ||||
| // GetFrameTime() | ||||
|                             // RL_GetMouseDelta() | ||||
|                             // RL_GetMouseWheelMove() | ||||
|                             // RL_IsKeyDown() | ||||
|                             // RL_IsKeyPressed() | ||||
|                             // RL_GetFrameTime() | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Defines and Macros | ||||
| //---------------------------------------------------------------------------------- | ||||
| #define RL_CAMERA_MOVE_SPEED     0.09f | ||||
| #define RL_CAMERA_ROTATION_SPEED 0.03f | ||||
| #define RL_CAMERA_PAN_SPEED      0.2f | ||||
| #define RL_CAMERA_MOVE_SPEED                               0.09f | ||||
| #define RL_CAMERA_ROTATION_SPEED                           0.03f | ||||
| #define RL_CAMERA_PAN_SPEED                                0.2f | ||||
|  | ||||
| // Camera mouse movement sensitivity | ||||
| #define RL_CAMERA_MOUSE_MOVE_SENSITIVITY                  0.003f    // TODO: it should be independant of framerate | ||||
| #define RL_CAMERA_MOUSE_SCROLL_SENSITIVITY                1.5f | ||||
| // RL_Camera mouse movement sensitivity | ||||
| #define RL_CAMERA_MOUSE_MOVE_SENSITIVITY                   0.003f     // TODO: it should be independant of framerate | ||||
| #define RL_CAMERA_MOUSE_SCROLL_SENSITIVITY                 1.5f | ||||
|  | ||||
| #define RL_CAMERA_ORBITAL_SPEED                           0.5f    // Radians per second | ||||
| #define RL_CAMERA_ORBITAL_SPEED                            0.5f       // Radians per second | ||||
|  | ||||
|  | ||||
| #define RL_CAMERA_FIRST_PERSON_STEP_TRIGONOMETRIC_DIVIDER 8.0f | ||||
| #define RL_CAMERA_FIRST_PERSON_STEP_DIVIDER               30.0f | ||||
| #define RL_CAMERA_FIRST_PERSON_WAVING_DIVIDER             200.0f | ||||
| #define RL_CAMERA_FIRST_PERSON_STEP_TRIGONOMETRIC_DIVIDER  8.0f | ||||
| #define RL_CAMERA_FIRST_PERSON_STEP_DIVIDER                30.0f | ||||
| #define RL_CAMERA_FIRST_PERSON_WAVING_DIVIDER              200.0f | ||||
|  | ||||
| // PLAYER (used by camera) | ||||
| #define RL_PLAYER_MOVEMENT_SENSITIVITY 20.0f | ||||
| #define RL_PLAYER_MOVEMENT_SENSITIVITY                     20.0f | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Types and Structures Definition | ||||
| @@ -249,347 +233,326 @@ namespace raylib | ||||
| // Module Functions Definition | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Returns the cameras forward vector (normalized) | ||||
| Vector3 get_camera_forward( Camera* camera ) | ||||
| RL_Vector3 GetCameraForward(RL_Camera *camera) | ||||
| { | ||||
| 	return Vector3Normalize( Vector3Subtract( camera->target, camera->position ) ); | ||||
|     return RL_Vector3Normalize(RL_Vector3Subtract(camera->target, camera->position)); | ||||
| } | ||||
|  | ||||
| // Returns the cameras up vector (normalized) | ||||
| // Note: The up vector might not be perpendicular to the forward vector | ||||
| Vector3 get_camera_up( Camera* camera ) | ||||
| RL_Vector3 GetCameraUp(RL_Camera *camera) | ||||
| { | ||||
| 	return Vector3Normalize( camera->up ); | ||||
|     return RL_Vector3Normalize(camera->up); | ||||
| } | ||||
|  | ||||
| // Returns the cameras right vector (normalized) | ||||
| Vector3 get_camera_right( Camera* camera ) | ||||
| RL_Vector3 GetCameraRight(RL_Camera *camera) | ||||
| { | ||||
| 	Vector3 forward = GetCameraForward( camera ); | ||||
| 	Vector3 up      = GetCameraUp( camera ); | ||||
|     RL_Vector3 forward = GetCameraForward(camera); | ||||
|     RL_Vector3 up = GetCameraUp(camera); | ||||
|  | ||||
| 	return Vector3CrossProduct( forward, up ); | ||||
|     return RL_Vector3CrossProduct(forward, up); | ||||
| } | ||||
|  | ||||
| // Moves the camera in its forward direction | ||||
| void camera_move_forward( Camera* camera, f32 distance, bool moveInWorldPlane ) | ||||
| void CameraMoveForward(RL_Camera *camera, float distance, bool moveInWorldPlane) | ||||
| { | ||||
| 	Vector3 forward = GetCameraForward( camera ); | ||||
|     RL_Vector3 forward = GetCameraForward(camera); | ||||
|  | ||||
| 	if ( moveInWorldPlane ) | ||||
| 	{ | ||||
| 		// Project vector onto world plane | ||||
| 		forward.y = 0; | ||||
| 		forward   = Vector3Normalize( forward ); | ||||
| 	} | ||||
|     if (moveInWorldPlane) | ||||
|     { | ||||
|         // Project vector onto world plane | ||||
|         forward.y = 0; | ||||
|         forward = RL_Vector3Normalize(forward); | ||||
|     } | ||||
|  | ||||
| 	// Scale by distance | ||||
| 	forward = Vector3Scale( forward, distance ); | ||||
|     // Scale by distance | ||||
|     forward = RL_Vector3Scale(forward, distance); | ||||
|  | ||||
| 	// Move position and target | ||||
| 	camera->position = Vector3Add( camera->position, forward ); | ||||
| 	camera->target   = Vector3Add( camera->target, forward ); | ||||
|     // Move position and target | ||||
|     camera->position = RL_Vector3Add(camera->position, forward); | ||||
|     camera->target = RL_Vector3Add(camera->target, forward); | ||||
| } | ||||
|  | ||||
| // Moves the camera in its up direction | ||||
| void camera_move_up( Camera* camera, f32 distance ) | ||||
| void CameraMoveUp(RL_Camera *camera, float distance) | ||||
| { | ||||
| 	Vector3 up = GetCameraUp( camera ); | ||||
|     RL_Vector3 up = GetCameraUp(camera); | ||||
|  | ||||
| 	// Scale by distance | ||||
| 	up = Vector3Scale( up, distance ); | ||||
|     // Scale by distance | ||||
|     up = RL_Vector3Scale(up, distance); | ||||
|  | ||||
| 	// Move position and target | ||||
| 	camera->position = Vector3Add( camera->position, up ); | ||||
| 	camera->target   = Vector3Add( camera->target, up ); | ||||
|     // Move position and target | ||||
|     camera->position = RL_Vector3Add(camera->position, up); | ||||
|     camera->target = RL_Vector3Add(camera->target, up); | ||||
| } | ||||
|  | ||||
| // Moves the camera target in its current right direction | ||||
| void camera_move_right( Camera* camera, f32 distance, bool moveInWorldPlane ) | ||||
| void CameraMoveRight(RL_Camera *camera, float distance, bool moveInWorldPlane) | ||||
| { | ||||
| 	Vector3 right = GetCameraRight( camera ); | ||||
|     RL_Vector3 right = GetCameraRight(camera); | ||||
|  | ||||
| 	if ( moveInWorldPlane ) | ||||
| 	{ | ||||
| 		// Project vector onto world plane | ||||
| 		right.y = 0; | ||||
| 		right   = Vector3Normalize( right ); | ||||
| 	} | ||||
|     if (moveInWorldPlane) | ||||
|     { | ||||
|         // Project vector onto world plane | ||||
|         right.y = 0; | ||||
|         right = RL_Vector3Normalize(right); | ||||
|     } | ||||
|  | ||||
| 	// Scale by distance | ||||
| 	right = Vector3Scale( right, distance ); | ||||
|     // Scale by distance | ||||
|     right = RL_Vector3Scale(right, distance); | ||||
|  | ||||
| 	// Move position and target | ||||
| 	camera->position = Vector3Add( camera->position, right ); | ||||
| 	camera->target   = Vector3Add( camera->target, right ); | ||||
|     // Move position and target | ||||
|     camera->position = RL_Vector3Add(camera->position, right); | ||||
|     camera->target = RL_Vector3Add(camera->target, right); | ||||
| } | ||||
|  | ||||
| // Moves the camera position closer/farther to/from the camera target | ||||
| void camera_move_to_target( Camera* camera, f32 delta ) | ||||
| void CameraMoveToTarget(RL_Camera *camera, float delta) | ||||
| { | ||||
| 	float distance = Vector3Distance( camera->position, camera->target ); | ||||
|     float distance = RL_Vector3Distance(camera->position, camera->target); | ||||
|  | ||||
| 	// Apply delta | ||||
| 	distance += delta; | ||||
|     // Apply delta | ||||
|     distance += delta; | ||||
|  | ||||
| 	// Distance must be greater than 0 | ||||
| 	if ( distance <= 0 ) | ||||
| 		distance = 0.001f; | ||||
|     // Distance must be greater than 0 | ||||
|     if (distance <= 0) distance = 0.001f; | ||||
|  | ||||
| 	// Set new distance by moving the position along the forward vector | ||||
| 	Vector3 forward  = GetCameraForward( camera ); | ||||
| 	camera->position = Vector3Add( camera->target, Vector3Scale( forward, -distance ) ); | ||||
|     // Set new distance by moving the position along the forward vector | ||||
|     RL_Vector3 forward = GetCameraForward(camera); | ||||
|     camera->position = RL_Vector3Add(camera->target, RL_Vector3Scale(forward, -distance)); | ||||
| } | ||||
|  | ||||
| // Rotates the camera around its up vector | ||||
| // Yaw is "looking left and right" | ||||
| // If rotateAroundTarget is false, the camera rotates around its position | ||||
| // Note: angle must be provided in radians | ||||
| void camera_yaw( Camera* camera, f32 angle, bool rotateAroundTarget ) | ||||
| void CameraYaw(RL_Camera *camera, float angle, bool rotateAroundTarget) | ||||
| { | ||||
| 	Vector3 up = GetCameraUp( camera ); | ||||
|     // Rotation axis | ||||
|     RL_Vector3 up = GetCameraUp(camera); | ||||
|  | ||||
| 	// View vector | ||||
| 	Vector3 targetPosition = Vector3Subtract( camera->target, camera->position ); | ||||
|     // View vector | ||||
|     RL_Vector3 targetPosition = RL_Vector3Subtract(camera->target, camera->position); | ||||
|  | ||||
| 	// Rotate view vector around up axis | ||||
| 	targetPosition = Vector3RotateByAxisAngle( targetPosition, up, angle ); | ||||
|     // Rotate view vector around up axis | ||||
|     targetPosition = RL_Vector3RotateByAxisAngle(targetPosition, up, angle); | ||||
|  | ||||
| 	if ( rotateAroundTarget ) | ||||
| 	{ | ||||
| 		// Move position relative to target | ||||
| 		camera->position = Vector3Subtract( camera->target, targetPosition ); | ||||
| 	} | ||||
| 	else    // rotate around camera.position | ||||
| 	{ | ||||
| 		// Move target relative to position | ||||
| 		camera->target = Vector3Add( camera->position, targetPosition ); | ||||
| 	} | ||||
|     if (rotateAroundTarget) | ||||
|     { | ||||
|         // Move position relative to target | ||||
|         camera->position = RL_Vector3Subtract(camera->target, targetPosition); | ||||
|     } | ||||
|     else // rotate around camera.position | ||||
|     { | ||||
|         // Move target relative to position | ||||
|         camera->target = RL_Vector3Add(camera->position, targetPosition); | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Rotates the camera around its right vector, pitch is "looking up and down" | ||||
| //  - lockView prevents camera overrotation (aka "somersaults") | ||||
| //  - rotateAroundTarget defines if rotation is around target or around its position | ||||
| //  - rotateUp rotates the up direction as well (typically only usefull in CAMERA_FREE) | ||||
| //  - rotateUp rotates the up direction as well (typically only usefull in RL_CAMERA_FREE) | ||||
| // NOTE: angle must be provided in radians | ||||
| void camera_pitch( Camera* camera, f32 angle, bool lockView, bool rotateAroundTarget, bool rotateUp ) | ||||
| void CameraPitch(RL_Camera *camera, float angle, bool lockView, bool rotateAroundTarget, bool rotateUp) | ||||
| { | ||||
| 	Vector3 up = GetCameraUp( camera ); | ||||
|     // Up direction | ||||
|     RL_Vector3 up = GetCameraUp(camera); | ||||
|  | ||||
| 	// View vector | ||||
| 	Vector3 targetPosition = Vector3Subtract( camera->target, camera->position ); | ||||
|     // View vector | ||||
|     RL_Vector3 targetPosition = RL_Vector3Subtract(camera->target, camera->position); | ||||
|  | ||||
| 	if ( lockView ) | ||||
| 	{ | ||||
| 		// In these camera modes we clamp the Pitch angle | ||||
| 		// to allow only viewing straight up or down. | ||||
|     if (lockView) | ||||
|     { | ||||
|         // In these camera modes we clamp the Pitch angle | ||||
|         // to allow only viewing straight up or down. | ||||
|  | ||||
| 		// Clamp view up | ||||
| 		float maxAngleUp  = Vector3Angle( up, targetPosition ); | ||||
| 		maxAngleUp       -= 0.001f;    // avoid numerical errors | ||||
| 		if ( angle > maxAngleUp ) | ||||
| 			angle = maxAngleUp; | ||||
|         // RL_Clamp view up | ||||
|         float maxAngleUp = RL_Vector3Angle(up, targetPosition); | ||||
|         maxAngleUp -= 0.001f; // avoid numerical errors | ||||
|         if (angle > maxAngleUp) angle = maxAngleUp; | ||||
|  | ||||
| 		// Clamp view down | ||||
| 		float maxAngleDown  = Vector3Angle( Vector3Negate( up ), targetPosition ); | ||||
| 		maxAngleDown       *= -1.0f;     // downwards angle is negative | ||||
| 		maxAngleDown       += 0.001f;    // avoid numerical errors | ||||
| 		if ( angle < maxAngleDown ) | ||||
| 			angle = maxAngleDown; | ||||
| 	} | ||||
|         // RL_Clamp view down | ||||
|         float maxAngleDown = RL_Vector3Angle(RL_Vector3Negate(up), targetPosition); | ||||
|         maxAngleDown *= -1.0f; // downwards angle is negative | ||||
|         maxAngleDown += 0.001f; // avoid numerical errors | ||||
|         if (angle < maxAngleDown) angle = maxAngleDown; | ||||
|     } | ||||
|  | ||||
| 	// Rotation axis | ||||
| 	Vector3 right = GetCameraRight( camera ); | ||||
|     // Rotation axis | ||||
|     RL_Vector3 right = GetCameraRight(camera); | ||||
|  | ||||
| 	// Rotate view vector around right axis | ||||
| 	targetPosition = Vector3RotateByAxisAngle( targetPosition, right, angle ); | ||||
|     // Rotate view vector around right axis | ||||
|     targetPosition = RL_Vector3RotateByAxisAngle(targetPosition, right, angle); | ||||
|  | ||||
| 	if ( rotateAroundTarget ) | ||||
| 	{ | ||||
| 		// Move position relative to target | ||||
| 		camera->position = Vector3Subtract( camera->target, targetPosition ); | ||||
| 	} | ||||
| 	else    // rotate around camera.position | ||||
| 	{ | ||||
| 		// Move target relative to position | ||||
| 		camera->target = Vector3Add( camera->position, targetPosition ); | ||||
| 	} | ||||
|     if (rotateAroundTarget) | ||||
|     { | ||||
|         // Move position relative to target | ||||
|         camera->position = RL_Vector3Subtract(camera->target, targetPosition); | ||||
|     } | ||||
|     else // rotate around camera.position | ||||
|     { | ||||
|         // Move target relative to position | ||||
|         camera->target = RL_Vector3Add(camera->position, targetPosition); | ||||
|     } | ||||
|  | ||||
| 	if ( rotateUp ) | ||||
| 	{ | ||||
| 		// Rotate up direction around right axis | ||||
| 		camera->up = Vector3RotateByAxisAngle( camera->up, right, angle ); | ||||
| 	} | ||||
|     if (rotateUp) | ||||
|     { | ||||
|         // Rotate up direction around right axis | ||||
|         camera->up = RL_Vector3RotateByAxisAngle(camera->up, right, angle); | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Rotates the camera around its forward vector | ||||
| // Roll is "turning your head sideways to the left or right" | ||||
| // Note: angle must be provided in radians | ||||
| void camera_roll( Camera* camera, f32 angle ) | ||||
| void CameraRoll(RL_Camera *camera, float angle) | ||||
| { | ||||
| 	Vector3 forward = GetCameraForward( camera ); | ||||
|     // Rotation axis | ||||
|     RL_Vector3 forward = GetCameraForward(camera); | ||||
|  | ||||
| 	// Rotate up direction around forward axis | ||||
| 	camera->up = Vector3RotateByAxisAngle( camera->up, forward, angle ); | ||||
|     // Rotate up direction around forward axis | ||||
|     camera->up = RL_Vector3RotateByAxisAngle(camera->up, forward, angle); | ||||
| } | ||||
|  | ||||
| // Returns the camera view matrix | ||||
| Matrix get_camera_view_matrix( Camera* camera ) | ||||
| RL_Matrix GetCameraViewMatrix(RL_Camera *camera) | ||||
| { | ||||
| 	return MatrixLookAt( camera->position, camera->target, camera->up ); | ||||
|     return RL_MatrixLookAt(camera->position, camera->target, camera->up); | ||||
| } | ||||
|  | ||||
| // Returns the camera projection matrix | ||||
| Matrix get_camera_projection_matrix( Camera* camera, f32 aspect ) | ||||
| RL_Matrix GetCameraProjectionMatrix(RL_Camera *camera, float aspect) | ||||
| { | ||||
| 	if ( camera->projection == CAMERA_PERSPECTIVE ) | ||||
| 	{ | ||||
| 		return MatrixPerspective( camera->fovy * DEG2RAD, aspect, CAMERA_CULL_DISTANCE_NEAR, CAMERA_CULL_DISTANCE_FAR ); | ||||
| 	} | ||||
| 	else if ( camera->projection == CAMERA_ORTHOGRAPHIC ) | ||||
| 	{ | ||||
| 		double top   = camera->fovy / 2.0; | ||||
| 		double right = top * aspect; | ||||
|     if (camera->projection == RL_CAMERA_PERSPECTIVE) | ||||
|     { | ||||
|         return RL_MatrixPerspective(camera->fovy*RL_DEG2RAD, aspect, RL_CAMERA_CULL_DISTANCE_NEAR, RL_CAMERA_CULL_DISTANCE_FAR); | ||||
|     } | ||||
|     else if (camera->projection == RL_CAMERA_ORTHOGRAPHIC) | ||||
|     { | ||||
|         double top = camera->fovy/2.0; | ||||
|         double right = top*aspect; | ||||
|  | ||||
| 		return MatrixOrtho( -right, right, -top, top, CAMERA_CULL_DISTANCE_NEAR, CAMERA_CULL_DISTANCE_FAR ); | ||||
| 	} | ||||
|         return RL_MatrixOrtho(-right, right, -top, top, RL_CAMERA_CULL_DISTANCE_NEAR, RL_CAMERA_CULL_DISTANCE_FAR); | ||||
|     } | ||||
|  | ||||
| 	return MatrixIdentity(); | ||||
|     return RL_MatrixIdentity(); | ||||
| } | ||||
|  | ||||
| #if ! defined( RCAMERA_STANDALONE ) | ||||
| #if !defined(RCAMERA_STANDALONE) | ||||
| // Update camera position for selected mode | ||||
| // Camera mode: CAMERA_FREE, CAMERA_FIRST_PERSON, CAMERA_THIRD_PERSON, CAMERA_ORBITAL or CUSTOM | ||||
| void update_camera( Camera* camera, s32 mode ) | ||||
| // RL_Camera mode: RL_CAMERA_FREE, RL_CAMERA_FIRST_PERSON, RL_CAMERA_THIRD_PERSON, RL_CAMERA_ORBITAL or CUSTOM | ||||
| void RL_UpdateCamera(RL_Camera *camera, int mode) | ||||
| { | ||||
| 	Vector2 mousePositionDelta = GetMouseDelta(); | ||||
|     RL_Vector2 mousePositionDelta = RL_GetMouseDelta(); | ||||
|  | ||||
| 	bool moveInWorldPlane      = ( ( mode == CAMERA_FIRST_PERSON ) || ( mode == CAMERA_THIRD_PERSON ) ); | ||||
| 	bool rotateAroundTarget    = ( ( mode == CAMERA_THIRD_PERSON ) || ( mode == CAMERA_ORBITAL ) ); | ||||
| 	bool lockView              = ( ( mode == CAMERA_FIRST_PERSON ) || ( mode == CAMERA_THIRD_PERSON ) || ( mode == CAMERA_ORBITAL ) ); | ||||
| 	bool rotateUp              = false; | ||||
|     bool moveInWorldPlane = ((mode == RL_CAMERA_FIRST_PERSON) || (mode == RL_CAMERA_THIRD_PERSON)); | ||||
|     bool rotateAroundTarget = ((mode == RL_CAMERA_THIRD_PERSON) || (mode == RL_CAMERA_ORBITAL)); | ||||
|     bool lockView = ((mode == RL_CAMERA_FIRST_PERSON) || (mode == RL_CAMERA_THIRD_PERSON) || (mode == RL_CAMERA_ORBITAL)); | ||||
|     bool rotateUp = false; | ||||
|  | ||||
| 	if ( mode == CAMERA_ORBITAL ) | ||||
| 	{ | ||||
| 		// Orbital can just orbit | ||||
| 		Matrix  rotation = MatrixRotate( GetCameraUp( camera ), CAMERA_ORBITAL_SPEED * GetFrameTime() ); | ||||
| 		Vector3 view     = Vector3Subtract( camera->position, camera->target ); | ||||
| 		view             = Vector3Transform( view, rotation ); | ||||
| 		camera->position = Vector3Add( camera->target, view ); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		// Camera rotation | ||||
| 		if ( IsKeyDown( KEY_DOWN ) ) | ||||
| 			CameraPitch( camera, -CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp ); | ||||
| 		if ( IsKeyDown( KEY_UP ) ) | ||||
| 			CameraPitch( camera, CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp ); | ||||
| 		if ( IsKeyDown( KEY_RIGHT ) ) | ||||
| 			CameraYaw( camera, -CAMERA_ROTATION_SPEED, rotateAroundTarget ); | ||||
| 		if ( IsKeyDown( KEY_LEFT ) ) | ||||
| 			CameraYaw( camera, CAMERA_ROTATION_SPEED, rotateAroundTarget ); | ||||
| 		if ( IsKeyDown( KEY_Q ) ) | ||||
| 			CameraRoll( camera, -CAMERA_ROTATION_SPEED ); | ||||
| 		if ( IsKeyDown( KEY_E ) ) | ||||
| 			CameraRoll( camera, CAMERA_ROTATION_SPEED ); | ||||
|     if (mode == RL_CAMERA_ORBITAL) | ||||
|     { | ||||
|         // Orbital can just orbit | ||||
|         RL_Matrix rotation = RL_MatrixRotate(GetCameraUp(camera), RL_CAMERA_ORBITAL_SPEED*RL_GetFrameTime()); | ||||
|         RL_Vector3 view = RL_Vector3Subtract(camera->position, camera->target); | ||||
|         view = RL_Vector3Transform(view, rotation); | ||||
|         camera->position = RL_Vector3Add(camera->target, view); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         // RL_Camera rotation | ||||
|         if (RL_IsKeyDown(RL_KEY_DOWN)) CameraPitch(camera, -RL_CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp); | ||||
|         if (RL_IsKeyDown(RL_KEY_UP)) CameraPitch(camera, RL_CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp); | ||||
|         if (RL_IsKeyDown(RL_KEY_RIGHT)) CameraYaw(camera, -RL_CAMERA_ROTATION_SPEED, rotateAroundTarget); | ||||
|         if (RL_IsKeyDown(RL_KEY_LEFT)) CameraYaw(camera, RL_CAMERA_ROTATION_SPEED, rotateAroundTarget); | ||||
|         if (RL_IsKeyDown(RL_KEY_Q)) CameraRoll(camera, -RL_CAMERA_ROTATION_SPEED); | ||||
|         if (RL_IsKeyDown(RL_KEY_E)) CameraRoll(camera, RL_CAMERA_ROTATION_SPEED); | ||||
|  | ||||
| 		// Camera movement | ||||
| 		if ( ! IsGamepadAvailable( 0 ) ) | ||||
| 		{ | ||||
| 			// Camera pan (for CAMERA_FREE) | ||||
| 			if ( ( mode == CAMERA_FREE ) && ( IsMouseButtonDown( MOUSE_BUTTON_MIDDLE ) ) ) | ||||
| 			{ | ||||
| 				const Vector2 mouseDelta = GetMouseDelta(); | ||||
| 				if ( mouseDelta.x > 0.0f ) | ||||
| 					CameraMoveRight( camera, CAMERA_PAN_SPEED, moveInWorldPlane ); | ||||
| 				if ( mouseDelta.x < 0.0f ) | ||||
| 					CameraMoveRight( camera, -CAMERA_PAN_SPEED, moveInWorldPlane ); | ||||
| 				if ( mouseDelta.y > 0.0f ) | ||||
| 					CameraMoveUp( camera, -CAMERA_PAN_SPEED ); | ||||
| 				if ( mouseDelta.y < 0.0f ) | ||||
| 					CameraMoveUp( camera, CAMERA_PAN_SPEED ); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				// Mouse support | ||||
| 				CameraYaw( camera, -mousePositionDelta.x * CAMERA_MOUSE_MOVE_SENSITIVITY, rotateAroundTarget ); | ||||
| 				CameraPitch( camera, -mousePositionDelta.y * CAMERA_MOUSE_MOVE_SENSITIVITY, lockView, rotateAroundTarget, rotateUp ); | ||||
| 			} | ||||
|         // RL_Camera movement | ||||
|         if (!RL_IsGamepadAvailable(0)) | ||||
|         { | ||||
|             // RL_Camera pan (for RL_CAMERA_FREE) | ||||
|             if ((mode == RL_CAMERA_FREE) && (RL_IsMouseButtonDown(RL_MOUSE_BUTTON_MIDDLE))) | ||||
|             { | ||||
|                 const RL_Vector2 mouseDelta = RL_GetMouseDelta(); | ||||
|                 if (mouseDelta.x > 0.0f) CameraMoveRight(camera, RL_CAMERA_PAN_SPEED, moveInWorldPlane); | ||||
|                 if (mouseDelta.x < 0.0f) CameraMoveRight(camera, -RL_CAMERA_PAN_SPEED, moveInWorldPlane); | ||||
|                 if (mouseDelta.y > 0.0f) CameraMoveUp(camera, -RL_CAMERA_PAN_SPEED); | ||||
|                 if (mouseDelta.y < 0.0f) CameraMoveUp(camera, RL_CAMERA_PAN_SPEED); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 // Mouse support | ||||
|                 CameraYaw(camera, -mousePositionDelta.x*RL_CAMERA_MOUSE_MOVE_SENSITIVITY, rotateAroundTarget); | ||||
|                 CameraPitch(camera, -mousePositionDelta.y*RL_CAMERA_MOUSE_MOVE_SENSITIVITY, lockView, rotateAroundTarget, rotateUp); | ||||
|             } | ||||
|  | ||||
| 			// Keyboard support | ||||
| 			if ( IsKeyDown( KEY_W ) ) | ||||
| 				CameraMoveForward( camera, CAMERA_MOVE_SPEED, moveInWorldPlane ); | ||||
| 			if ( IsKeyDown( KEY_A ) ) | ||||
| 				CameraMoveRight( camera, -CAMERA_MOVE_SPEED, moveInWorldPlane ); | ||||
| 			if ( IsKeyDown( KEY_S ) ) | ||||
| 				CameraMoveForward( camera, -CAMERA_MOVE_SPEED, moveInWorldPlane ); | ||||
| 			if ( IsKeyDown( KEY_D ) ) | ||||
| 				CameraMoveRight( camera, CAMERA_MOVE_SPEED, moveInWorldPlane ); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			// Gamepad controller support | ||||
| 			CameraYaw( camera, -( GetGamepadAxisMovement( 0, GAMEPAD_AXIS_RIGHT_X ) * 2 ) * CAMERA_MOUSE_MOVE_SENSITIVITY, rotateAroundTarget ); | ||||
| 			CameraPitch( | ||||
| 			    camera, | ||||
| 			    -( GetGamepadAxisMovement( 0, GAMEPAD_AXIS_RIGHT_Y ) * 2 ) * CAMERA_MOUSE_MOVE_SENSITIVITY, | ||||
| 			    lockView, | ||||
| 			    rotateAroundTarget, | ||||
| 			    rotateUp | ||||
| 			); | ||||
|             // Keyboard support | ||||
|             if (RL_IsKeyDown(RL_KEY_W)) CameraMoveForward(camera, RL_CAMERA_MOVE_SPEED, moveInWorldPlane); | ||||
|             if (RL_IsKeyDown(RL_KEY_A)) CameraMoveRight(camera, -RL_CAMERA_MOVE_SPEED, moveInWorldPlane); | ||||
|             if (RL_IsKeyDown(RL_KEY_S)) CameraMoveForward(camera, -RL_CAMERA_MOVE_SPEED, moveInWorldPlane); | ||||
|             if (RL_IsKeyDown(RL_KEY_D)) CameraMoveRight(camera, RL_CAMERA_MOVE_SPEED, moveInWorldPlane); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             // Gamepad controller support | ||||
|             CameraYaw(camera, -(RL_GetGamepadAxisMovement(0, RL_GAMEPAD_AXIS_RIGHT_X) * 2)*RL_CAMERA_MOUSE_MOVE_SENSITIVITY, rotateAroundTarget); | ||||
|             CameraPitch(camera, -(RL_GetGamepadAxisMovement(0, RL_GAMEPAD_AXIS_RIGHT_Y) * 2)*RL_CAMERA_MOUSE_MOVE_SENSITIVITY, lockView, rotateAroundTarget, rotateUp); | ||||
|  | ||||
| 			if ( GetGamepadAxisMovement( 0, GAMEPAD_AXIS_LEFT_Y ) <= -0.25f ) | ||||
| 				CameraMoveForward( camera, CAMERA_MOVE_SPEED, moveInWorldPlane ); | ||||
| 			if ( GetGamepadAxisMovement( 0, GAMEPAD_AXIS_LEFT_X ) <= -0.25f ) | ||||
| 				CameraMoveRight( camera, -CAMERA_MOVE_SPEED, moveInWorldPlane ); | ||||
| 			if ( GetGamepadAxisMovement( 0, GAMEPAD_AXIS_LEFT_Y ) >= 0.25f ) | ||||
| 				CameraMoveForward( camera, -CAMERA_MOVE_SPEED, moveInWorldPlane ); | ||||
| 			if ( GetGamepadAxisMovement( 0, GAMEPAD_AXIS_LEFT_X ) >= 0.25f ) | ||||
| 				CameraMoveRight( camera, CAMERA_MOVE_SPEED, moveInWorldPlane ); | ||||
| 		} | ||||
|             if (RL_GetGamepadAxisMovement(0, RL_GAMEPAD_AXIS_LEFT_Y) <= -0.25f) CameraMoveForward(camera, RL_CAMERA_MOVE_SPEED, moveInWorldPlane); | ||||
|             if (RL_GetGamepadAxisMovement(0, RL_GAMEPAD_AXIS_LEFT_X) <= -0.25f) CameraMoveRight(camera, -RL_CAMERA_MOVE_SPEED, moveInWorldPlane); | ||||
|             if (RL_GetGamepadAxisMovement(0, RL_GAMEPAD_AXIS_LEFT_Y) >= 0.25f) CameraMoveForward(camera, -RL_CAMERA_MOVE_SPEED, moveInWorldPlane); | ||||
|             if (RL_GetGamepadAxisMovement(0, RL_GAMEPAD_AXIS_LEFT_X) >= 0.25f) CameraMoveRight(camera, RL_CAMERA_MOVE_SPEED, moveInWorldPlane); | ||||
|         } | ||||
|  | ||||
| 		if ( mode == CAMERA_FREE ) | ||||
| 		{ | ||||
| 			if ( IsKeyDown( KEY_SPACE ) ) | ||||
| 				CameraMoveUp( camera, CAMERA_MOVE_SPEED ); | ||||
| 			if ( IsKeyDown( KEY_LEFT_CONTROL ) ) | ||||
| 				CameraMoveUp( camera, -CAMERA_MOVE_SPEED ); | ||||
| 		} | ||||
| 	} | ||||
|         if (mode == RL_CAMERA_FREE) | ||||
|         { | ||||
|             if (RL_IsKeyDown(RL_KEY_SPACE)) CameraMoveUp(camera, RL_CAMERA_MOVE_SPEED); | ||||
|             if (RL_IsKeyDown(RL_KEY_LEFT_CONTROL)) CameraMoveUp(camera, -RL_CAMERA_MOVE_SPEED); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| 	if ( ( mode == CAMERA_THIRD_PERSON ) || ( mode == CAMERA_ORBITAL ) || ( mode == CAMERA_FREE ) ) | ||||
| 	{ | ||||
| 		// Zoom target distance | ||||
| 		CameraMoveToTarget( camera, -GetMouseWheelMove() ); | ||||
| 		if ( IsKeyPressed( KEY_KP_SUBTRACT ) ) | ||||
| 			CameraMoveToTarget( camera, 2.0f ); | ||||
| 		if ( IsKeyPressed( KEY_KP_ADD ) ) | ||||
| 			CameraMoveToTarget( camera, -2.0f ); | ||||
| 	} | ||||
|     if ((mode == RL_CAMERA_THIRD_PERSON) || (mode == RL_CAMERA_ORBITAL) || (mode == RL_CAMERA_FREE)) | ||||
|     { | ||||
|         // Zoom target distance | ||||
|         CameraMoveToTarget(camera, -RL_GetMouseWheelMove()); | ||||
|         if (RL_IsKeyPressed(RL_KEY_KP_SUBTRACT)) CameraMoveToTarget(camera, 2.0f); | ||||
|         if (RL_IsKeyPressed(RL_KEY_KP_ADD)) CameraMoveToTarget(camera, -2.0f); | ||||
|     } | ||||
| } | ||||
| #endif | ||||
| // !RCAMERA_STANDALONE | ||||
| #endif // !RCAMERA_STANDALONE | ||||
|  | ||||
| // Update camera movement, movement/rotation values should be provided by user | ||||
| void update_camera_pro( Camera* camera, Vector3 movement, Vector3 rotation, f32 zoom ) | ||||
| void RL_UpdateCameraPro(RL_Camera *camera, RL_Vector3 movement, RL_Vector3 rotation, float zoom) | ||||
| { | ||||
| 	bool lockView           = true; | ||||
| 	bool rotateAroundTarget = false; | ||||
| 	bool rotateUp           = false; | ||||
| 	bool moveInWorldPlane   = true; | ||||
|     // Required values | ||||
|     // movement.x - Move forward/backward | ||||
|     // movement.y - Move right/left | ||||
|     // movement.z - Move up/down | ||||
|     // rotation.x - yaw | ||||
|     // rotation.y - pitch | ||||
|     // rotation.z - roll | ||||
|     // zoom - Move towards target | ||||
|  | ||||
| 	// Camera rotation | ||||
| 	CameraPitch( camera, -rotation.y * DEG2RAD, lockView, rotateAroundTarget, rotateUp ); | ||||
| 	CameraYaw( camera, -rotation.x * DEG2RAD, rotateAroundTarget ); | ||||
| 	CameraRoll( camera, rotation.z * DEG2RAD ); | ||||
|     bool lockView = true; | ||||
|     bool rotateAroundTarget = false; | ||||
|     bool rotateUp = false; | ||||
|     bool moveInWorldPlane = true; | ||||
|  | ||||
| 	// Camera movement | ||||
| 	CameraMoveForward( camera, movement.x, moveInWorldPlane ); | ||||
| 	CameraMoveRight( camera, movement.y, moveInWorldPlane ); | ||||
| 	CameraMoveUp( camera, movement.z ); | ||||
|     // RL_Camera rotation | ||||
|     CameraPitch(camera, -rotation.y*RL_DEG2RAD, lockView, rotateAroundTarget, rotateUp); | ||||
|     CameraYaw(camera, -rotation.x*RL_DEG2RAD, rotateAroundTarget); | ||||
|     CameraRoll(camera, rotation.z*RL_DEG2RAD); | ||||
|  | ||||
| 	// Zoom target distance | ||||
| 	CameraMoveToTarget( camera, zoom ); | ||||
|     // RL_Camera movement | ||||
|     CameraMoveForward(camera, movement.x, moveInWorldPlane); | ||||
|     CameraMoveRight(camera, movement.y, moveInWorldPlane); | ||||
|     CameraMoveUp(camera, movement.z); | ||||
|  | ||||
|     // Zoom target distance | ||||
|     CameraMoveToTarget(camera, zoom); | ||||
| } | ||||
|  | ||||
| #endif | ||||
| // RCAMERA_IMPLEMENTATION | ||||
| #endif // RCAMERA_IMPLEMENTATION | ||||
|   | ||||
| @@ -1,233 +0,0 @@ | ||||
| /********************************************************************************************** | ||||
|  * | ||||
|  *   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 | ||||
| @@ -1,57 +1,57 @@ | ||||
| /********************************************************************************************** | ||||
|  * | ||||
|  *   rgestures - Gestures system, gestures processing based on input events (touch/mouse) | ||||
|  * | ||||
|  *   CONFIGURATION: | ||||
|  *       #define RGESTURES_IMPLEMENTATION | ||||
|  *           Generates the implementation of the library into the included file. | ||||
|  *           If not defined, the library is in header only mode and can be included in other headers | ||||
|  *           or source files without problems. But only ONE file should hold the implementation. | ||||
|  * | ||||
|  *       #define RGESTURES_STANDALONE | ||||
|  *           If defined, the library can be used as standalone to process gesture events with | ||||
|  *           no external dependencies. | ||||
|  * | ||||
|  *   CONTRIBUTORS: | ||||
|  *       Marc Palau:         Initial implementation (2014) | ||||
|  *       Albert Martos:      Complete redesign and testing (2015) | ||||
|  *       Ian Eito:           Complete redesign and testing (2015) | ||||
|  *       Ramon Santamaria:   Supervision, review, update and maintenance | ||||
|  * | ||||
|  * | ||||
|  *   LICENSE: zlib/libpng | ||||
|  * | ||||
|  *   Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) | ||||
|  * | ||||
|  *   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. | ||||
|  * | ||||
|  **********************************************************************************************/ | ||||
| * | ||||
| *   rgestures - Gestures system, gestures processing based on input events (touch/mouse) | ||||
| * | ||||
| *   CONFIGURATION: | ||||
| *       #define RGESTURES_IMPLEMENTATION | ||||
| *           Generates the implementation of the library into the included file. | ||||
| *           If not defined, the library is in header only mode and can be included in other headers | ||||
| *           or source files without problems. But only ONE file should hold the implementation. | ||||
| * | ||||
| *       #define RGESTURES_STANDALONE | ||||
| *           If defined, the library can be used as standalone to process gesture events with | ||||
| *           no external dependencies. | ||||
| * | ||||
| *   CONTRIBUTORS: | ||||
| *       Marc Palau:         Initial implementation (2014) | ||||
| *       Albert Martos:      Complete redesign and testing (2015) | ||||
| *       Ian Eito:           Complete redesign and testing (2015) | ||||
| *       Ramon Santamaria:   Supervision, review, update and maintenance | ||||
| * | ||||
| * | ||||
| *   LICENSE: zlib/libpng | ||||
| * | ||||
| *   Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) | ||||
| * | ||||
| *   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 RGESTURES_H | ||||
| #define RGESTURES_H | ||||
|  | ||||
| #ifndef PI | ||||
| #define PI 3.14159265358979323846 | ||||
| #ifndef RL_PI | ||||
|     #define RL_PI 3.14159265358979323846 | ||||
| #endif | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Defines and Macros | ||||
| //---------------------------------------------------------------------------------- | ||||
| #ifndef MAX_TOUCH_POINTS | ||||
| #define MAX_TOUCH_POINTS 8    // Maximum number of touch points supported | ||||
| #ifndef RL_MAX_TOUCH_POINTS | ||||
|     #define RL_MAX_TOUCH_POINTS        8        // Maximum number of touch points supported | ||||
| #endif | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| @@ -59,60 +59,52 @@ | ||||
| // NOTE: Below types are required for standalone usage | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Boolean type | ||||
| #if ( defined( __STDC__ ) && __STDC_VERSION__ >= 199901L ) || ( defined( _MSC_VER ) && _MSC_VER >= 1800 ) | ||||
| #include <stdbool.h> | ||||
| #elif ! defined( __cplusplus ) && ! defined( bool ) && ! defined( RL_BOOL_TYPE ) | ||||
| typedef enum bool | ||||
| { | ||||
| 	false = 0, | ||||
| 	true  = ! false | ||||
| } bool; | ||||
| #if (defined(__STDC__) && __STDC_VERSION__ >= 199901L) || (defined(_MSC_VER) && _MSC_VER >= 1800) | ||||
|     #include <stdbool.h> | ||||
| #elif !defined(__cplusplus) && !defined(bool) && !defined(RL_BOOL_TYPE) | ||||
|     typedef enum bool { false = 0, true = !false } bool; | ||||
| #endif | ||||
|  | ||||
| #if ! defined( RL_VECTOR2_TYPE ) | ||||
| // Vector2 type | ||||
| typedef struct Vector2 | ||||
| { | ||||
| 	float x; | ||||
| 	float y; | ||||
| } Vector2; | ||||
| #if !defined(RL_VECTOR2_TYPE) | ||||
| // RL_Vector2 type | ||||
| typedef struct RL_Vector2 { | ||||
|     float x; | ||||
|     float y; | ||||
| } RL_Vector2; | ||||
| #endif | ||||
|  | ||||
| #if defined( RGESTURES_STANDALONE ) | ||||
| #if defined(RGESTURES_STANDALONE) | ||||
| // Gestures type | ||||
| // NOTE: It could be used as flags to enable only some gestures | ||||
| typedef enum | ||||
| { | ||||
| 	GESTURE_NONE        = 0, | ||||
| 	GESTURE_TAP         = 1, | ||||
| 	GESTURE_DOUBLETAP   = 2, | ||||
| 	GESTURE_HOLD        = 4, | ||||
| 	GESTURE_DRAG        = 8, | ||||
| 	GESTURE_SWIPE_RIGHT = 16, | ||||
| 	GESTURE_SWIPE_LEFT  = 32, | ||||
| 	GESTURE_SWIPE_UP    = 64, | ||||
| 	GESTURE_SWIPE_DOWN  = 128, | ||||
| 	GESTURE_PINCH_IN    = 256, | ||||
| 	GESTURE_PINCH_OUT   = 512 | ||||
| } Gesture; | ||||
| typedef enum { | ||||
|     RL_GESTURE_NONE        = 0, | ||||
|     RL_GESTURE_TAP         = 1, | ||||
|     RL_GESTURE_DOUBLETAP   = 2, | ||||
|     RL_GESTURE_HOLD        = 4, | ||||
|     RL_GESTURE_DRAG        = 8, | ||||
|     RL_GESTURE_SWIPE_RIGHT = 16, | ||||
|     RL_GESTURE_SWIPE_LEFT  = 32, | ||||
|     RL_GESTURE_SWIPE_UP    = 64, | ||||
|     RL_GESTURE_SWIPE_DOWN  = 128, | ||||
|     RL_GESTURE_PINCH_IN    = 256, | ||||
|     RL_GESTURE_PINCH_OUT   = 512 | ||||
| } RL_Gesture; | ||||
| #endif | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
| 	TOUCH_ACTION_UP = 0, | ||||
| 	TOUCH_ACTION_DOWN, | ||||
| 	TOUCH_ACTION_MOVE, | ||||
| 	TOUCH_ACTION_CANCEL | ||||
| } TouchAction; | ||||
| typedef enum { | ||||
|     TOUCH_ACTION_UP = 0, | ||||
|     TOUCH_ACTION_DOWN, | ||||
|     TOUCH_ACTION_MOVE, | ||||
|     TOUCH_ACTION_CANCEL | ||||
| } RL_TouchAction; | ||||
|  | ||||
| // Gesture event | ||||
| typedef struct | ||||
| { | ||||
| 	int     touchAction; | ||||
| 	int     pointCount; | ||||
| 	int     pointId[ MAX_TOUCH_POINTS ]; | ||||
| 	Vector2 position[ MAX_TOUCH_POINTS ]; | ||||
| } GestureEvent; | ||||
| // RL_Gesture event | ||||
| typedef struct { | ||||
|     int touchAction; | ||||
|     int pointCount; | ||||
|     int pointId[RL_MAX_TOUCH_POINTS]; | ||||
|     RL_Vector2 position[RL_MAX_TOUCH_POINTS]; | ||||
| } RL_GestureEvent; | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Global Variables Definition | ||||
| @@ -123,472 +115,441 @@ typedef struct | ||||
| // Module Functions Declaration | ||||
| //---------------------------------------------------------------------------------- | ||||
|  | ||||
| #if defined( __cplusplus ) | ||||
| extern "C" | ||||
| {    // Prevents name mangling of functions | ||||
| #if defined(__cplusplus) | ||||
| extern "C" {            // Prevents name mangling of functions | ||||
| #endif | ||||
|  | ||||
| 	void ProcessGestureEvent( GestureEvent event );    // Process gesture event and translate it into gestures | ||||
| 	void UpdateGestures( void );                       // Update gestures detected (must be called every frame) | ||||
| void RL_ProcessGestureEvent(RL_GestureEvent event);           // Process gesture event and translate it into gestures | ||||
| void RL_UpdateGestures(void);                              // Update gestures detected (must be called every frame) | ||||
|  | ||||
| #if defined( RGESTURES_STANDALONE ) | ||||
| 	void SetGesturesEnabled( unsigned int flags );    // Enable a set of gestures using flags | ||||
| 	bool IsGestureDetected( int gesture );            // Check if a gesture have been detected | ||||
| 	int  GetGestureDetected( void );                  // Get latest detected gesture | ||||
| #if defined(RGESTURES_STANDALONE) | ||||
| void RL_SetGesturesEnabled(unsigned int flags);            // Enable a set of gestures using flags | ||||
| bool RL_IsGestureDetected(int gesture);                    // Check if a gesture have been detected | ||||
| int RL_GetGestureDetected(void);                           // Get latest detected gesture | ||||
|  | ||||
| 	float   GetGestureHoldDuration( void );    // Get gesture hold time in seconds | ||||
| 	Vector2 GetGestureDragVector( void );      // Get gesture drag vector | ||||
| 	float   GetGestureDragAngle( void );       // Get gesture drag angle | ||||
| 	Vector2 GetGesturePinchVector( void );     // Get gesture pinch delta | ||||
| 	float   GetGesturePinchAngle( void );      // Get gesture pinch angle | ||||
| float RL_GetGestureHoldDuration(void);                     // Get gesture hold time in seconds | ||||
| RL_Vector2 RL_GetGestureDragVector(void);                     // Get gesture drag vector | ||||
| float RL_GetGestureDragAngle(void);                        // Get gesture drag angle | ||||
| RL_Vector2 RL_GetGesturePinchVector(void);                    // Get gesture pinch delta | ||||
| float RL_GetGesturePinchAngle(void);                       // Get gesture pinch angle | ||||
| #endif | ||||
|  | ||||
| #if defined( __cplusplus ) | ||||
| #if defined(__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif    // RGESTURES_H | ||||
| #endif // RGESTURES_H | ||||
|  | ||||
| /*********************************************************************************** | ||||
|  * | ||||
|  *   RGESTURES IMPLEMENTATION | ||||
|  * | ||||
|  ************************************************************************************/ | ||||
| * | ||||
| *   RGESTURES IMPLEMENTATION | ||||
| * | ||||
| ************************************************************************************/ | ||||
|  | ||||
| #if defined( RGESTURES_IMPLEMENTATION ) | ||||
| #if defined(RGESTURES_IMPLEMENTATION) | ||||
|  | ||||
| #if defined( RGESTURES_STANDALONE ) | ||||
| #if defined( _WIN32 ) | ||||
| #if defined( __cplusplus ) | ||||
| extern "C" | ||||
| {    // Prevents name mangling of functions | ||||
| #endif | ||||
| 	// Functions required to query time on Windows | ||||
| 	int __stdcall QueryPerformanceCounter( unsigned long long int* lpPerformanceCount ); | ||||
| 	int __stdcall QueryPerformanceFrequency( unsigned long long int* lpFrequency ); | ||||
| #if defined( __cplusplus ) | ||||
| } | ||||
| #endif | ||||
| #elif defined( __linux__ ) | ||||
| #if _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 | ||||
| #include <sys/time.h>    // Required for: timespec | ||||
| #include <time.h>        // Required for: clock_gettime() | ||||
| #if defined(RGESTURES_STANDALONE) | ||||
| #if defined(_WIN32) | ||||
|     #if defined(__cplusplus) | ||||
|     extern "C" {        // Prevents name mangling of functions | ||||
|     #endif | ||||
|     // Functions required to query time on Windows | ||||
|     int __stdcall RL_QueryPerformanceCounter(unsigned long long int *lpPerformanceCount); | ||||
|     int __stdcall RL_QueryPerformanceFrequency(unsigned long long int *lpFrequency); | ||||
|     #if defined(__cplusplus) | ||||
|     } | ||||
|     #endif | ||||
| #elif defined(__linux__) | ||||
|     #if _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 | ||||
|     #include <sys/time.h>               // Required for: timespec | ||||
|     #include <time.h>                   // Required for: clock_gettime() | ||||
|  | ||||
| #include <math.h>    // Required for: sqrtf(), atan2f() | ||||
|     #include <math.h>                   // Required for: sqrtf(), atan2f() | ||||
| #endif | ||||
| #if defined( __APPLE__ )    // macOS also defines __MACH__ | ||||
| #include <mach/clock.h>     // Required for: clock_get_time() | ||||
| #include <mach/mach.h>      // Required for: mach_timespec_t | ||||
| #if defined(__APPLE__)                  // macOS also defines __MACH__ | ||||
|     #include <mach/clock.h>             // Required for: clock_get_time() | ||||
|     #include <mach/mach.h>              // Required for: mach_timespec_t | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Defines and Macros | ||||
| //---------------------------------------------------------------------------------- | ||||
| #define FORCE_TO_SWIPE  0.2f      // Swipe force, measured in normalized screen units/time | ||||
| #define MINIMUM_DRAG    0.015f    // Drag minimum force, measured in normalized screen units (0.0f to 1.0f) | ||||
| #define DRAG_TIMEOUT    0.3f      // Drag minimum time for web, measured in seconds | ||||
| #define MINIMUM_PINCH   0.005f    // Pinch minimum force, measured in normalized screen units (0.0f to 1.0f) | ||||
| #define TAP_TIMEOUT     0.3f      // Tap minimum time, measured in seconds | ||||
| #define PINCH_TIMEOUT   0.3f      // Pinch minimum time, measured in seconds | ||||
| #define DOUBLETAP_RANGE 0.03f     // DoubleTap range, measured in normalized screen units (0.0f to 1.0f) | ||||
| #define RL_FORCE_TO_SWIPE      0.2f        // Swipe force, measured in normalized screen units/time | ||||
| #define RL_MINIMUM_DRAG        0.015f      // Drag minimum force, measured in normalized screen units (0.0f to 1.0f) | ||||
| #define RL_DRAG_TIMEOUT        0.3f        // Drag minimum time for web, measured in seconds | ||||
| #define RL_MINIMUM_PINCH       0.005f      // Pinch minimum force, measured in normalized screen units (0.0f to 1.0f) | ||||
| #define RL_TAP_TIMEOUT         0.3f        // Tap minimum time, measured in seconds | ||||
| #define RL_PINCH_TIMEOUT       0.3f        // Pinch minimum time, measured in seconds | ||||
| #define RL_DOUBLETAP_RANGE     0.03f       // DoubleTap range, measured in normalized screen units (0.0f to 1.0f) | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Types and Structures Definition | ||||
| //---------------------------------------------------------------------------------- | ||||
|  | ||||
| // Gestures module state context [136 bytes] | ||||
| typedef struct | ||||
| { | ||||
| 	unsigned int current;         // Current detected gesture | ||||
| 	unsigned int enabledFlags;    // Enabled gestures flags | ||||
|  | ||||
| 	struct | ||||
| 	{ | ||||
| 		int     firstId;              // Touch id for first touch point | ||||
| 		int     pointCount;           // Touch points counter | ||||
| 		double  eventTime;            // Time stamp when an event happened | ||||
| 		Vector2 upPosition;           // Touch up position | ||||
| 		Vector2 downPositionA;        // First touch down position | ||||
| 		Vector2 downPositionB;        // Second touch down position | ||||
| 		Vector2 downDragPosition;     // Touch drag position | ||||
| 		Vector2 moveDownPositionA;    // First touch down position on move | ||||
| 		Vector2 moveDownPositionB;    // Second touch down position on move | ||||
| 		Vector2 previousPositionA;    // Previous position A to compare for pinch gestures | ||||
| 		Vector2 previousPositionB;    // Previous position B to compare for pinch gestures | ||||
| 		int     tapCounter;           // TAP counter (one tap implies TOUCH_ACTION_DOWN and TOUCH_ACTION_UP actions) | ||||
| 	} Touch; | ||||
|  | ||||
| 	struct | ||||
| 	{ | ||||
| 		bool   resetRequired;    // HOLD reset to get first touch point again | ||||
| 		double timeDuration;     // HOLD duration in seconds | ||||
| 	} Hold; | ||||
|  | ||||
| 	struct | ||||
| 	{ | ||||
| 		Vector2 vector;       // DRAG vector (between initial and current position) | ||||
| 		float   angle;        // DRAG angle (relative to x-axis) | ||||
| 		float   distance;     // DRAG distance (from initial touch point to final) (normalized [0..1]) | ||||
| 		float   intensity;    // DRAG intensity, how far why did the DRAG (pixels per frame) | ||||
| 	} Drag; | ||||
|  | ||||
| 	struct | ||||
| 	{ | ||||
| 		double startTime;    // SWIPE start time to calculate drag intensity | ||||
| 	} Swipe; | ||||
|  | ||||
| 	struct | ||||
| 	{ | ||||
| 		Vector2 vector;      // PINCH vector (between first and second touch points) | ||||
| 		float   angle;       // PINCH angle (relative to x-axis) | ||||
| 		float   distance;    // PINCH displacement distance (normalized [0..1]) | ||||
| 	} Pinch; | ||||
| } GesturesData; | ||||
| typedef struct { | ||||
|     unsigned int current;               // Current detected gesture | ||||
|     unsigned int enabledFlags;          // Enabled gestures flags | ||||
|     struct { | ||||
|         int firstId;                    // Touch id for first touch point | ||||
|         int pointCount;                 // Touch points counter | ||||
|         double eventTime;               // Time stamp when an event happened | ||||
|         RL_Vector2 upPosition;             // Touch up position | ||||
|         RL_Vector2 downPositionA;          // First touch down position | ||||
|         RL_Vector2 downPositionB;          // Second touch down position | ||||
|         RL_Vector2 downDragPosition;       // Touch drag position | ||||
|         RL_Vector2 moveDownPositionA;      // First touch down position on move | ||||
|         RL_Vector2 moveDownPositionB;      // Second touch down position on move | ||||
|         RL_Vector2 previousPositionA;      // Previous position A to compare for pinch gestures | ||||
|         RL_Vector2 previousPositionB;      // Previous position B to compare for pinch gestures | ||||
|         int tapCounter;                 // TAP counter (one tap implies TOUCH_ACTION_DOWN and TOUCH_ACTION_UP actions) | ||||
|     } Touch; | ||||
|     struct { | ||||
|         bool resetRequired;             // HOLD reset to get first touch point again | ||||
|         double timeDuration;            // HOLD duration in seconds | ||||
|     } Hold; | ||||
|     struct { | ||||
|         RL_Vector2 vector;                 // DRAG vector (between initial and current position) | ||||
|         float angle;                    // DRAG angle (relative to x-axis) | ||||
|         float distance;                 // DRAG distance (from initial touch point to final) (normalized [0..1]) | ||||
|         float intensity;                // DRAG intensity, how far why did the DRAG (pixels per frame) | ||||
|     } Drag; | ||||
|     struct { | ||||
|         double startTime;               // SWIPE start time to calculate drag intensity | ||||
|     } Swipe; | ||||
|     struct { | ||||
|         RL_Vector2 vector;                 // PINCH vector (between first and second touch points) | ||||
|         float angle;                    // PINCH angle (relative to x-axis) | ||||
|         float distance;                 // PINCH displacement distance (normalized [0..1]) | ||||
|     } Pinch; | ||||
| } RL_GesturesData; | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Global Variables Definition | ||||
| //---------------------------------------------------------------------------------- | ||||
| static GesturesData GESTURES = { | ||||
| 	.Touch.firstId = -1, | ||||
| 	.current       = GESTURE_NONE,         // No current gesture detected | ||||
| 	.enabledFlags  = 0b0000001111111111    // All gestures supported by default | ||||
| static RL_GesturesData RL_GESTURES = { | ||||
|     .Touch.firstId = -1, | ||||
|     .current = RL_GESTURE_NONE,        // No current gesture detected | ||||
|     .enabledFlags = 0b0000001111111111  // All gestures supported by default | ||||
| }; | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Module specific Functions Declaration | ||||
| //---------------------------------------------------------------------------------- | ||||
| static float  rgVector2Angle( Vector2 initialPosition, Vector2 finalPosition ); | ||||
| static float  rgVector2Distance( Vector2 v1, Vector2 v2 ); | ||||
| static double rgGetCurrentTime( void ); | ||||
| static float rgVector2Angle(RL_Vector2 initialPosition, RL_Vector2 finalPosition); | ||||
| static float rgVector2Distance(RL_Vector2 v1, RL_Vector2 v2); | ||||
| static double rgGetCurrentTime(void); | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Module Functions Definition | ||||
| //---------------------------------------------------------------------------------- | ||||
|  | ||||
| // Enable only desired gestures to be detected | ||||
| void SetGesturesEnabled( unsigned int flags ) | ||||
| void RL_SetGesturesEnabled(unsigned int flags) | ||||
| { | ||||
| 	GESTURES.enabledFlags = flags; | ||||
|     RL_GESTURES.enabledFlags = flags; | ||||
| } | ||||
|  | ||||
| // Check if a gesture have been detected | ||||
| bool IsGestureDetected( unsigned int gesture ) | ||||
| bool RL_IsGestureDetected(unsigned int gesture) | ||||
| { | ||||
| 	if ( ( GESTURES.enabledFlags & GESTURES.current ) == gesture ) | ||||
| 		return true; | ||||
| 	else | ||||
| 		return false; | ||||
|     if ((RL_GESTURES.enabledFlags & RL_GESTURES.current) == gesture) return true; | ||||
|     else return false; | ||||
| } | ||||
|  | ||||
| // Process gesture event and translate it into gestures | ||||
| void ProcessGestureEvent( GestureEvent event ) | ||||
| void RL_ProcessGestureEvent(RL_GestureEvent event) | ||||
| { | ||||
| 	// Reset required variables | ||||
| 	GESTURES.Touch.pointCount = event.pointCount;    // Required on UpdateGestures() | ||||
|     // Reset required variables | ||||
|     RL_GESTURES.Touch.pointCount = event.pointCount;      // Required on RL_UpdateGestures() | ||||
|  | ||||
| 	if ( GESTURES.Touch.pointCount == 1 )    // One touch point | ||||
| 	{ | ||||
| 		if ( event.touchAction == TOUCH_ACTION_DOWN ) | ||||
| 		{ | ||||
| 			GESTURES.Touch.tapCounter++;    // Tap counter | ||||
|     if (RL_GESTURES.Touch.pointCount == 1)     // One touch point | ||||
|     { | ||||
|         if (event.touchAction == TOUCH_ACTION_DOWN) | ||||
|         { | ||||
|             RL_GESTURES.Touch.tapCounter++;    // Tap counter | ||||
|  | ||||
| 			// Detect GESTURE_DOUBLE_TAP | ||||
| 			if ( ( GESTURES.current == GESTURE_NONE ) && ( GESTURES.Touch.tapCounter >= 2 ) | ||||
| 			     && ( ( rgGetCurrentTime() - GESTURES.Touch.eventTime ) < TAP_TIMEOUT ) | ||||
| 			     && ( rgVector2Distance( GESTURES.Touch.downPositionA, event.position[ 0 ] ) < DOUBLETAP_RANGE ) ) | ||||
| 			{ | ||||
| 				GESTURES.current          = GESTURE_DOUBLETAP; | ||||
| 				GESTURES.Touch.tapCounter = 0; | ||||
| 			} | ||||
| 			else    // Detect GESTURE_TAP | ||||
| 			{ | ||||
| 				GESTURES.Touch.tapCounter = 1; | ||||
| 				GESTURES.current          = GESTURE_TAP; | ||||
| 			} | ||||
|             // Detect GESTURE_DOUBLE_TAP | ||||
|             if ((RL_GESTURES.current == RL_GESTURE_NONE) && (RL_GESTURES.Touch.tapCounter >= 2) && ((rgGetCurrentTime() - RL_GESTURES.Touch.eventTime) < RL_TAP_TIMEOUT) && (rgVector2Distance(RL_GESTURES.Touch.downPositionA, event.position[0]) < RL_DOUBLETAP_RANGE)) | ||||
|             { | ||||
|                 RL_GESTURES.current = RL_GESTURE_DOUBLETAP; | ||||
|                 RL_GESTURES.Touch.tapCounter = 0; | ||||
|             } | ||||
|             else    // Detect RL_GESTURE_TAP | ||||
|             { | ||||
|                 RL_GESTURES.Touch.tapCounter = 1; | ||||
|                 RL_GESTURES.current = RL_GESTURE_TAP; | ||||
|             } | ||||
|  | ||||
| 			GESTURES.Touch.downPositionA    = event.position[ 0 ]; | ||||
| 			GESTURES.Touch.downDragPosition = event.position[ 0 ]; | ||||
|             RL_GESTURES.Touch.downPositionA = event.position[0]; | ||||
|             RL_GESTURES.Touch.downDragPosition = event.position[0]; | ||||
|  | ||||
| 			GESTURES.Touch.upPosition       = GESTURES.Touch.downPositionA; | ||||
| 			GESTURES.Touch.eventTime        = rgGetCurrentTime(); | ||||
|             RL_GESTURES.Touch.upPosition = RL_GESTURES.Touch.downPositionA; | ||||
|             RL_GESTURES.Touch.eventTime = rgGetCurrentTime(); | ||||
|  | ||||
| 			GESTURES.Swipe.startTime        = rgGetCurrentTime(); | ||||
|             RL_GESTURES.Swipe.startTime = rgGetCurrentTime(); | ||||
|  | ||||
| 			GESTURES.Drag.vector            = ( Vector2 ) { 0.0f, 0.0f }; | ||||
| 		} | ||||
| 		else if ( event.touchAction == TOUCH_ACTION_UP ) | ||||
| 		{ | ||||
| 			// A swipe can happen while the current gesture is drag, but (specially for web) also hold, so set upPosition for both cases | ||||
| 			if ( GESTURES.current == GESTURE_DRAG || GESTURES.current == GESTURE_HOLD ) | ||||
| 				GESTURES.Touch.upPosition = event.position[ 0 ]; | ||||
|             RL_GESTURES.Drag.vector = (RL_Vector2){ 0.0f, 0.0f }; | ||||
|         } | ||||
|         else if (event.touchAction == TOUCH_ACTION_UP) | ||||
|         { | ||||
|             // A swipe can happen while the current gesture is drag, but (specially for web) also hold, so set upPosition for both cases | ||||
|             if (RL_GESTURES.current == RL_GESTURE_DRAG || RL_GESTURES.current == RL_GESTURE_HOLD) RL_GESTURES.Touch.upPosition = event.position[0]; | ||||
|  | ||||
| 			// NOTE: GESTURES.Drag.intensity dependent on the resolution of the screen | ||||
| 			GESTURES.Drag.distance  = rgVector2Distance( GESTURES.Touch.downPositionA, GESTURES.Touch.upPosition ); | ||||
| 			GESTURES.Drag.intensity = GESTURES.Drag.distance / ( float )( ( rgGetCurrentTime() - GESTURES.Swipe.startTime ) ); | ||||
|             // NOTE: RL_GESTURES.Drag.intensity dependent on the resolution of the screen | ||||
|             RL_GESTURES.Drag.distance = rgVector2Distance(RL_GESTURES.Touch.downPositionA, RL_GESTURES.Touch.upPosition); | ||||
|             RL_GESTURES.Drag.intensity = RL_GESTURES.Drag.distance/(float)((rgGetCurrentTime() - RL_GESTURES.Swipe.startTime)); | ||||
|  | ||||
| 			// Detect GESTURE_SWIPE | ||||
| 			if ( ( GESTURES.Drag.intensity > FORCE_TO_SWIPE ) && ( GESTURES.current != GESTURE_DRAG ) ) | ||||
| 			{ | ||||
| 				// NOTE: Angle should be inverted in Y | ||||
| 				GESTURES.Drag.angle = 360.0f - rgVector2Angle( GESTURES.Touch.downPositionA, GESTURES.Touch.upPosition ); | ||||
|             // Detect GESTURE_SWIPE | ||||
|             if ((RL_GESTURES.Drag.intensity > RL_FORCE_TO_SWIPE) && (RL_GESTURES.current != RL_GESTURE_DRAG)) | ||||
|             { | ||||
|                 // NOTE: Angle should be inverted in Y | ||||
|                 RL_GESTURES.Drag.angle = 360.0f - rgVector2Angle(RL_GESTURES.Touch.downPositionA, RL_GESTURES.Touch.upPosition); | ||||
|  | ||||
| 				if ( ( GESTURES.Drag.angle < 30 ) || ( GESTURES.Drag.angle > 330 ) ) | ||||
| 					GESTURES.current = GESTURE_SWIPE_RIGHT;    // Right | ||||
| 				else if ( ( GESTURES.Drag.angle >= 30 ) && ( GESTURES.Drag.angle <= 150 ) ) | ||||
| 					GESTURES.current = GESTURE_SWIPE_UP;    // Up | ||||
| 				else if ( ( GESTURES.Drag.angle > 150 ) && ( GESTURES.Drag.angle < 210 ) ) | ||||
| 					GESTURES.current = GESTURE_SWIPE_LEFT;    // Left | ||||
| 				else if ( ( GESTURES.Drag.angle >= 210 ) && ( GESTURES.Drag.angle <= 330 ) ) | ||||
| 					GESTURES.current = GESTURE_SWIPE_DOWN;    // Down | ||||
| 				else | ||||
| 					GESTURES.current = GESTURE_NONE; | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				GESTURES.Drag.distance  = 0.0f; | ||||
| 				GESTURES.Drag.intensity = 0.0f; | ||||
| 				GESTURES.Drag.angle     = 0.0f; | ||||
|                 if ((RL_GESTURES.Drag.angle < 30) || (RL_GESTURES.Drag.angle > 330)) RL_GESTURES.current = RL_GESTURE_SWIPE_RIGHT;          // Right | ||||
|                 else if ((RL_GESTURES.Drag.angle >= 30) && (RL_GESTURES.Drag.angle <= 150)) RL_GESTURES.current = RL_GESTURE_SWIPE_UP;      // Up | ||||
|                 else if ((RL_GESTURES.Drag.angle > 150) && (RL_GESTURES.Drag.angle < 210)) RL_GESTURES.current = RL_GESTURE_SWIPE_LEFT;     // Left | ||||
|                 else if ((RL_GESTURES.Drag.angle >= 210) && (RL_GESTURES.Drag.angle <= 330)) RL_GESTURES.current = RL_GESTURE_SWIPE_DOWN;   // Down | ||||
|                 else RL_GESTURES.current = RL_GESTURE_NONE; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 RL_GESTURES.Drag.distance = 0.0f; | ||||
|                 RL_GESTURES.Drag.intensity = 0.0f; | ||||
|                 RL_GESTURES.Drag.angle = 0.0f; | ||||
|  | ||||
| 				GESTURES.current        = GESTURE_NONE; | ||||
| 			} | ||||
|                 RL_GESTURES.current = RL_GESTURE_NONE; | ||||
|             } | ||||
|  | ||||
| 			GESTURES.Touch.downDragPosition = ( Vector2 ) { 0.0f, 0.0f }; | ||||
| 			GESTURES.Touch.pointCount       = 0; | ||||
| 		} | ||||
| 		else if ( event.touchAction == TOUCH_ACTION_MOVE ) | ||||
| 		{ | ||||
| 			GESTURES.Touch.moveDownPositionA = event.position[ 0 ]; | ||||
|             RL_GESTURES.Touch.downDragPosition = (RL_Vector2){ 0.0f, 0.0f }; | ||||
|             RL_GESTURES.Touch.pointCount = 0; | ||||
|         } | ||||
|         else if (event.touchAction == TOUCH_ACTION_MOVE) | ||||
|         { | ||||
|             RL_GESTURES.Touch.moveDownPositionA = event.position[0]; | ||||
|  | ||||
| 			if ( GESTURES.current == GESTURE_HOLD ) | ||||
| 			{ | ||||
| 				if ( GESTURES.Hold.resetRequired ) | ||||
| 					GESTURES.Touch.downPositionA = event.position[ 0 ]; | ||||
|             if (RL_GESTURES.current == RL_GESTURE_HOLD) | ||||
|             { | ||||
|                 if (RL_GESTURES.Hold.resetRequired) RL_GESTURES.Touch.downPositionA = event.position[0]; | ||||
|  | ||||
| 				GESTURES.Hold.resetRequired = false; | ||||
|                 RL_GESTURES.Hold.resetRequired = false; | ||||
|  | ||||
| 				// Detect GESTURE_DRAG | ||||
| 				if ( ( rgGetCurrentTime() - GESTURES.Touch.eventTime ) > DRAG_TIMEOUT ) | ||||
| 				{ | ||||
| 					GESTURES.Touch.eventTime = rgGetCurrentTime(); | ||||
| 					GESTURES.current         = GESTURE_DRAG; | ||||
| 				} | ||||
| 			} | ||||
|                 // Detect RL_GESTURE_DRAG | ||||
|                 if ((rgGetCurrentTime() - RL_GESTURES.Touch.eventTime) > RL_DRAG_TIMEOUT) | ||||
|                 { | ||||
|                     RL_GESTURES.Touch.eventTime = rgGetCurrentTime(); | ||||
|                     RL_GESTURES.current = RL_GESTURE_DRAG; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| 			GESTURES.Drag.vector.x = GESTURES.Touch.moveDownPositionA.x - GESTURES.Touch.downDragPosition.x; | ||||
| 			GESTURES.Drag.vector.y = GESTURES.Touch.moveDownPositionA.y - GESTURES.Touch.downDragPosition.y; | ||||
| 		} | ||||
| 	} | ||||
| 	else if ( GESTURES.Touch.pointCount == 2 )    // Two touch points | ||||
| 	{ | ||||
| 		if ( event.touchAction == TOUCH_ACTION_DOWN ) | ||||
| 		{ | ||||
| 			GESTURES.Touch.downPositionA     = event.position[ 0 ]; | ||||
| 			GESTURES.Touch.downPositionB     = event.position[ 1 ]; | ||||
|             RL_GESTURES.Drag.vector.x = RL_GESTURES.Touch.moveDownPositionA.x - RL_GESTURES.Touch.downDragPosition.x; | ||||
|             RL_GESTURES.Drag.vector.y = RL_GESTURES.Touch.moveDownPositionA.y - RL_GESTURES.Touch.downDragPosition.y; | ||||
|         } | ||||
|     } | ||||
|     else if (RL_GESTURES.Touch.pointCount == 2)    // Two touch points | ||||
|     { | ||||
|         if (event.touchAction == TOUCH_ACTION_DOWN) | ||||
|         { | ||||
|             RL_GESTURES.Touch.downPositionA = event.position[0]; | ||||
|             RL_GESTURES.Touch.downPositionB = event.position[1]; | ||||
|  | ||||
| 			GESTURES.Touch.previousPositionA = GESTURES.Touch.downPositionA; | ||||
| 			GESTURES.Touch.previousPositionB = GESTURES.Touch.downPositionB; | ||||
|             RL_GESTURES.Touch.previousPositionA = RL_GESTURES.Touch.downPositionA; | ||||
|             RL_GESTURES.Touch.previousPositionB = RL_GESTURES.Touch.downPositionB; | ||||
|  | ||||
| 			// GESTURES.Pinch.distance = rgVector2Distance(GESTURES.Touch.downPositionA, GESTURES.Touch.downPositionB); | ||||
|             //RL_GESTURES.Pinch.distance = rgVector2Distance(RL_GESTURES.Touch.downPositionA, RL_GESTURES.Touch.downPositionB); | ||||
|  | ||||
| 			GESTURES.Pinch.vector.x    = GESTURES.Touch.downPositionB.x - GESTURES.Touch.downPositionA.x; | ||||
| 			GESTURES.Pinch.vector.y    = GESTURES.Touch.downPositionB.y - GESTURES.Touch.downPositionA.y; | ||||
|             RL_GESTURES.Pinch.vector.x = RL_GESTURES.Touch.downPositionB.x - RL_GESTURES.Touch.downPositionA.x; | ||||
|             RL_GESTURES.Pinch.vector.y = RL_GESTURES.Touch.downPositionB.y - RL_GESTURES.Touch.downPositionA.y; | ||||
|  | ||||
| 			GESTURES.current           = GESTURE_HOLD; | ||||
| 			GESTURES.Hold.timeDuration = rgGetCurrentTime(); | ||||
| 		} | ||||
| 		else if ( event.touchAction == TOUCH_ACTION_MOVE ) | ||||
| 		{ | ||||
| 			GESTURES.Pinch.distance          = rgVector2Distance( GESTURES.Touch.moveDownPositionA, GESTURES.Touch.moveDownPositionB ); | ||||
|             RL_GESTURES.current = RL_GESTURE_HOLD; | ||||
|             RL_GESTURES.Hold.timeDuration = rgGetCurrentTime(); | ||||
|         } | ||||
|         else if (event.touchAction == TOUCH_ACTION_MOVE) | ||||
|         { | ||||
|             RL_GESTURES.Pinch.distance = rgVector2Distance(RL_GESTURES.Touch.moveDownPositionA, RL_GESTURES.Touch.moveDownPositionB); | ||||
|  | ||||
| 			GESTURES.Touch.moveDownPositionA = event.position[ 0 ]; | ||||
| 			GESTURES.Touch.moveDownPositionB = event.position[ 1 ]; | ||||
|             RL_GESTURES.Touch.moveDownPositionA = event.position[0]; | ||||
|             RL_GESTURES.Touch.moveDownPositionB = event.position[1]; | ||||
|  | ||||
| 			GESTURES.Pinch.vector.x          = GESTURES.Touch.moveDownPositionB.x - GESTURES.Touch.moveDownPositionA.x; | ||||
| 			GESTURES.Pinch.vector.y          = GESTURES.Touch.moveDownPositionB.y - GESTURES.Touch.moveDownPositionA.y; | ||||
|             RL_GESTURES.Pinch.vector.x = RL_GESTURES.Touch.moveDownPositionB.x - RL_GESTURES.Touch.moveDownPositionA.x; | ||||
|             RL_GESTURES.Pinch.vector.y = RL_GESTURES.Touch.moveDownPositionB.y - RL_GESTURES.Touch.moveDownPositionA.y; | ||||
|  | ||||
| 			if ( ( rgVector2Distance( GESTURES.Touch.previousPositionA, GESTURES.Touch.moveDownPositionA ) >= MINIMUM_PINCH ) | ||||
| 			     || ( rgVector2Distance( GESTURES.Touch.previousPositionB, GESTURES.Touch.moveDownPositionB ) >= MINIMUM_PINCH ) ) | ||||
| 			{ | ||||
| 				if ( rgVector2Distance( GESTURES.Touch.previousPositionA, GESTURES.Touch.previousPositionB ) | ||||
| 				     > rgVector2Distance( GESTURES.Touch.moveDownPositionA, GESTURES.Touch.moveDownPositionB ) ) | ||||
| 					GESTURES.current = GESTURE_PINCH_IN; | ||||
| 				else | ||||
| 					GESTURES.current = GESTURE_PINCH_OUT; | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				GESTURES.current           = GESTURE_HOLD; | ||||
| 				GESTURES.Hold.timeDuration = rgGetCurrentTime(); | ||||
| 			} | ||||
|             if ((rgVector2Distance(RL_GESTURES.Touch.previousPositionA, RL_GESTURES.Touch.moveDownPositionA) >= RL_MINIMUM_PINCH) || (rgVector2Distance(RL_GESTURES.Touch.previousPositionB, RL_GESTURES.Touch.moveDownPositionB) >= RL_MINIMUM_PINCH)) | ||||
|             { | ||||
|                 if ( rgVector2Distance(RL_GESTURES.Touch.previousPositionA, RL_GESTURES.Touch.previousPositionB) > rgVector2Distance(RL_GESTURES.Touch.moveDownPositionA, RL_GESTURES.Touch.moveDownPositionB) ) RL_GESTURES.current = RL_GESTURE_PINCH_IN; | ||||
|                 else RL_GESTURES.current = RL_GESTURE_PINCH_OUT; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 RL_GESTURES.current = RL_GESTURE_HOLD; | ||||
|                 RL_GESTURES.Hold.timeDuration = rgGetCurrentTime(); | ||||
|             } | ||||
|  | ||||
| 			// NOTE: Angle should be inverted in Y | ||||
| 			GESTURES.Pinch.angle = 360.0f - rgVector2Angle( GESTURES.Touch.moveDownPositionA, GESTURES.Touch.moveDownPositionB ); | ||||
| 		} | ||||
| 		else if ( event.touchAction == TOUCH_ACTION_UP ) | ||||
| 		{ | ||||
| 			GESTURES.Pinch.distance   = 0.0f; | ||||
| 			GESTURES.Pinch.angle      = 0.0f; | ||||
| 			GESTURES.Pinch.vector     = ( Vector2 ) { 0.0f, 0.0f }; | ||||
| 			GESTURES.Touch.pointCount = 0; | ||||
|             // NOTE: Angle should be inverted in Y | ||||
|             RL_GESTURES.Pinch.angle = 360.0f - rgVector2Angle(RL_GESTURES.Touch.moveDownPositionA, RL_GESTURES.Touch.moveDownPositionB); | ||||
|         } | ||||
|         else if (event.touchAction == TOUCH_ACTION_UP) | ||||
|         { | ||||
|             RL_GESTURES.Pinch.distance = 0.0f; | ||||
|             RL_GESTURES.Pinch.angle = 0.0f; | ||||
|             RL_GESTURES.Pinch.vector = (RL_Vector2){ 0.0f, 0.0f }; | ||||
|             RL_GESTURES.Touch.pointCount = 0; | ||||
|  | ||||
| 			GESTURES.current          = GESTURE_NONE; | ||||
| 		} | ||||
| 	} | ||||
| 	else if ( GESTURES.Touch.pointCount > 2 )    // More than two touch points | ||||
| 	{ | ||||
| 		// TODO: Process gesture events for more than two points | ||||
| 	} | ||||
|             RL_GESTURES.current = RL_GESTURE_NONE; | ||||
|         } | ||||
|     } | ||||
|     else if (RL_GESTURES.Touch.pointCount > 2)     // More than two touch points | ||||
|     { | ||||
|         // TODO: Process gesture events for more than two points | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Update gestures detected (must be called every frame) | ||||
| void UpdateGestures( void ) | ||||
| void RL_UpdateGestures(void) | ||||
| { | ||||
| 	// NOTE: Gestures are processed through system callbacks on touch events | ||||
|     // NOTE: Gestures are processed through system callbacks on touch events | ||||
|  | ||||
| 	// Detect GESTURE_HOLD | ||||
| 	if ( ( ( GESTURES.current == GESTURE_TAP ) || ( GESTURES.current == GESTURE_DOUBLETAP ) ) && ( GESTURES.Touch.pointCount < 2 ) ) | ||||
| 	{ | ||||
| 		GESTURES.current           = GESTURE_HOLD; | ||||
| 		GESTURES.Hold.timeDuration = rgGetCurrentTime(); | ||||
| 	} | ||||
|     // Detect RL_GESTURE_HOLD | ||||
|     if (((RL_GESTURES.current == RL_GESTURE_TAP) || (RL_GESTURES.current == RL_GESTURE_DOUBLETAP)) && (RL_GESTURES.Touch.pointCount < 2)) | ||||
|     { | ||||
|         RL_GESTURES.current = RL_GESTURE_HOLD; | ||||
|         RL_GESTURES.Hold.timeDuration = rgGetCurrentTime(); | ||||
|     } | ||||
|  | ||||
| 	// Detect GESTURE_NONE | ||||
| 	if ( ( GESTURES.current == GESTURE_SWIPE_RIGHT ) || ( GESTURES.current == GESTURE_SWIPE_UP ) || ( GESTURES.current == GESTURE_SWIPE_LEFT ) | ||||
| 	     || ( GESTURES.current == GESTURE_SWIPE_DOWN ) ) | ||||
| 	{ | ||||
| 		GESTURES.current = GESTURE_NONE; | ||||
| 	} | ||||
|     // Detect RL_GESTURE_NONE | ||||
|     if ((RL_GESTURES.current == RL_GESTURE_SWIPE_RIGHT) || (RL_GESTURES.current == RL_GESTURE_SWIPE_UP) || (RL_GESTURES.current == RL_GESTURE_SWIPE_LEFT) || (RL_GESTURES.current == RL_GESTURE_SWIPE_DOWN)) | ||||
|     { | ||||
|         RL_GESTURES.current = RL_GESTURE_NONE; | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Get latest detected gesture | ||||
| int GetGestureDetected( void ) | ||||
| int RL_GetGestureDetected(void) | ||||
| { | ||||
| 	// Get current gesture only if enabled | ||||
| 	return ( GESTURES.enabledFlags & GESTURES.current ); | ||||
|     // Get current gesture only if enabled | ||||
|     return (RL_GESTURES.enabledFlags & RL_GESTURES.current); | ||||
| } | ||||
|  | ||||
| // Hold time measured in ms | ||||
| float GetGestureHoldDuration( void ) | ||||
| float RL_GetGestureHoldDuration(void) | ||||
| { | ||||
| 	// NOTE: time is calculated on current gesture HOLD | ||||
|     // NOTE: time is calculated on current gesture HOLD | ||||
|  | ||||
| 	double time = 0.0; | ||||
|     double time = 0.0; | ||||
|  | ||||
| 	if ( GESTURES.current == GESTURE_HOLD ) | ||||
| 		time = rgGetCurrentTime() - GESTURES.Hold.timeDuration; | ||||
|     if (RL_GESTURES.current == RL_GESTURE_HOLD) time = rgGetCurrentTime() - RL_GESTURES.Hold.timeDuration; | ||||
|  | ||||
| 	return ( float )time; | ||||
|     return (float)time; | ||||
| } | ||||
|  | ||||
| // Get drag vector (between initial touch point to current) | ||||
| Vector2 GetGestureDragVector( void ) | ||||
| RL_Vector2 RL_GetGestureDragVector(void) | ||||
| { | ||||
| 	// NOTE: drag vector is calculated on one touch points TOUCH_ACTION_MOVE | ||||
|     // NOTE: drag vector is calculated on one touch points TOUCH_ACTION_MOVE | ||||
|  | ||||
| 	return GESTURES.Drag.vector; | ||||
|     return RL_GESTURES.Drag.vector; | ||||
| } | ||||
|  | ||||
| // Get drag angle | ||||
| // NOTE: Angle in degrees, horizontal-right is 0, counterclockwise | ||||
| float GetGestureDragAngle( void ) | ||||
| float RL_GetGestureDragAngle(void) | ||||
| { | ||||
| 	// NOTE: drag angle is calculated on one touch points TOUCH_ACTION_UP | ||||
|     // NOTE: drag angle is calculated on one touch points TOUCH_ACTION_UP | ||||
|  | ||||
| 	return GESTURES.Drag.angle; | ||||
|     return RL_GESTURES.Drag.angle; | ||||
| } | ||||
|  | ||||
| // Get distance between two pinch points | ||||
| Vector2 GetGesturePinchVector( void ) | ||||
| RL_Vector2 RL_GetGesturePinchVector(void) | ||||
| { | ||||
| 	// NOTE: Pinch distance is calculated on two touch points TOUCH_ACTION_MOVE | ||||
|     // NOTE: Pinch distance is calculated on two touch points TOUCH_ACTION_MOVE | ||||
|  | ||||
| 	return GESTURES.Pinch.vector; | ||||
|     return RL_GESTURES.Pinch.vector; | ||||
| } | ||||
|  | ||||
| // Get angle between two pinch points | ||||
| // NOTE: Angle in degrees, horizontal-right is 0, counterclockwise | ||||
| float GetGesturePinchAngle( void ) | ||||
| float RL_GetGesturePinchAngle(void) | ||||
| { | ||||
| 	// NOTE: pinch angle is calculated on two touch points TOUCH_ACTION_MOVE | ||||
|     // NOTE: pinch angle is calculated on two touch points TOUCH_ACTION_MOVE | ||||
|  | ||||
| 	return GESTURES.Pinch.angle; | ||||
|     return RL_GESTURES.Pinch.angle; | ||||
| } | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Module specific Functions Definition | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Get angle from two-points vector with X-axis | ||||
| static float rgVector2Angle( Vector2 v1, Vector2 v2 ) | ||||
| static float rgVector2Angle(RL_Vector2 v1, RL_Vector2 v2) | ||||
| { | ||||
| 	float angle = atan2f( v2.y - v1.y, v2.x - v1.x ) * ( 180.0f / PI ); | ||||
|     float angle = atan2f(v2.y - v1.y, v2.x - v1.x)*(180.0f/RL_PI); | ||||
|  | ||||
| 	if ( angle < 0 ) | ||||
| 		angle += 360.0f; | ||||
|     if (angle < 0) angle += 360.0f; | ||||
|  | ||||
| 	return angle; | ||||
|     return angle; | ||||
| } | ||||
|  | ||||
| // Calculate distance between two Vector2 | ||||
| static float rgVector2Distance( Vector2 v1, Vector2 v2 ) | ||||
| // Calculate distance between two RL_Vector2 | ||||
| static float rgVector2Distance(RL_Vector2 v1, RL_Vector2 v2) | ||||
| { | ||||
| 	float result; | ||||
|     float result; | ||||
|  | ||||
| 	float dx = v2.x - v1.x; | ||||
| 	float dy = v2.y - v1.y; | ||||
|     float dx = v2.x - v1.x; | ||||
|     float dy = v2.y - v1.y; | ||||
|  | ||||
| 	result   = ( float )sqrt( dx * dx + dy * dy ); | ||||
|     result = (float)sqrt(dx*dx + dy*dy); | ||||
|  | ||||
| 	return result; | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| // Time measure returned are seconds | ||||
| static double rgGetCurrentTime( void ) | ||||
| static double rgGetCurrentTime(void) | ||||
| { | ||||
| 	double time = 0; | ||||
|     double time = 0; | ||||
|  | ||||
| #if ! defined( RGESTURES_STANDALONE ) | ||||
| 	time = GetTime(); | ||||
| #if !defined(RGESTURES_STANDALONE) | ||||
|     time = RL_GetTime(); | ||||
| #else | ||||
| #if defined( _WIN32 ) | ||||
| 	unsigned long long int clockFrequency, currentTime; | ||||
| #if defined(_WIN32) | ||||
|     unsigned long long int clockFrequency, currentTime; | ||||
|  | ||||
| 	QueryPerformanceFrequency( &clockFrequency );    // BE CAREFUL: Costly operation! | ||||
| 	QueryPerformanceCounter( ¤tTime ); | ||||
|     RL_QueryPerformanceFrequency(&clockFrequency);     // BE CAREFUL: Costly operation! | ||||
|     RL_QueryPerformanceCounter(¤tTime); | ||||
|  | ||||
| 	time = ( double )currentTime / clockFrequency;    // Time in seconds | ||||
|     time = (double)currentTime/clockFrequency;  // Time in seconds | ||||
| #endif | ||||
|  | ||||
| #if defined( __linux__ ) | ||||
| 	// NOTE: Only for Linux-based systems | ||||
| 	struct timespec now; | ||||
| 	clock_gettime( CLOCK_MONOTONIC, &now ); | ||||
| 	unsigned long long int nowTime = ( unsigned long long int )now.tv_sec * 1000000000LLU + ( unsigned long long int )now.tv_nsec;    // Time in nanoseconds | ||||
| #if defined(__linux__) | ||||
|     // NOTE: Only for Linux-based systems | ||||
|     struct timespec now; | ||||
|     clock_gettime(CLOCK_MONOTONIC, &now); | ||||
|     unsigned long long int nowTime = (unsigned long long int)now.tv_sec*1000000000LLU + (unsigned long long int)now.tv_nsec;     // Time in nanoseconds | ||||
|  | ||||
| 	time                           = ( ( double )nowTime * 1e-9 );    // Time in seconds | ||||
|     time = ((double)nowTime*1e-9);     // Time in seconds | ||||
| #endif | ||||
|  | ||||
| #if defined( __APPLE__ ) | ||||
| 	// #define CLOCK_REALTIME  CALENDAR_CLOCK    // returns UTC time since 1970-01-01 | ||||
| 	// #define CLOCK_MONOTONIC SYSTEM_CLOCK      // returns the time since boot time | ||||
| #if defined(__APPLE__) | ||||
|     //#define CLOCK_REALTIME  CALENDAR_CLOCK    // returns UTC time since 1970-01-01 | ||||
|     //#define CLOCK_MONOTONIC SYSTEM_CLOCK      // returns the time since boot time | ||||
|  | ||||
| 	clock_serv_t    cclock; | ||||
| 	mach_timespec_t now; | ||||
| 	host_get_clock_service( mach_host_self(), SYSTEM_CLOCK, &cclock ); | ||||
|     clock_serv_t cclock; | ||||
|     mach_timespec_t now; | ||||
|     host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock); | ||||
|  | ||||
| 	// NOTE: OS X does not have clock_gettime(), using clock_get_time() | ||||
| 	clock_get_time( cclock, &now ); | ||||
| 	mach_port_deallocate( mach_task_self(), cclock ); | ||||
| 	unsigned long long int nowTime = ( unsigned long long int )now.tv_sec * 1000000000LLU + ( unsigned long long int )now.tv_nsec;    // Time in nanoseconds | ||||
|     // NOTE: OS X does not have clock_gettime(), using clock_get_time() | ||||
|     clock_get_time(cclock, &now); | ||||
|     mach_port_deallocate(mach_task_self(), cclock); | ||||
|     unsigned long long int nowTime = (unsigned long long int)now.tv_sec*1000000000LLU + (unsigned long long int)now.tv_nsec;     // Time in nanoseconds | ||||
|  | ||||
| 	time                           = ( ( double )nowTime * 1e-9 );    // Time in seconds | ||||
|     time = ((double)nowTime*1e-9);     // Time in seconds | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| 	return time; | ||||
|     return time; | ||||
| } | ||||
|  | ||||
| #endif    // RGESTURES_IMPLEMENTATION | ||||
| #endif // RGESTURES_IMPLEMENTATION | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,55 +1,55 @@ | ||||
| /********************************************************************************************** | ||||
|  * | ||||
|  *   raylib.utils - Some common utility functions | ||||
|  * | ||||
|  * | ||||
|  *   LICENSE: zlib/libpng | ||||
|  * | ||||
|  *   Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) | ||||
|  * | ||||
|  *   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. | ||||
|  * | ||||
|  **********************************************************************************************/ | ||||
| * | ||||
| *   raylib.utils - Some common utility functions | ||||
| * | ||||
| * | ||||
| *   LICENSE: zlib/libpng | ||||
| * | ||||
| *   Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) | ||||
| * | ||||
| *   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 UTILS_H | ||||
| #define UTILS_H | ||||
|  | ||||
| #if defined( PLATFORM_ANDROID ) | ||||
| #include <stdio.h>                    // Required for: FILE | ||||
| #include <android/asset_manager.h>    // Required for: AAssetManager | ||||
| #if defined(PLATFORM_ANDROID) | ||||
|     #include <stdio.h>                      // Required for: FILE | ||||
|     #include <android/asset_manager.h>      // Required for: AAssetManager | ||||
| #endif | ||||
|  | ||||
| #if defined( SUPPORT_TRACELOG ) | ||||
| #define TRACELOG( level, ... ) TraceLog( level, __VA_ARGS__ ) | ||||
| #if defined(RL_SUPPORT_TRACELOG) | ||||
|     #define RL_TRACELOG(level, ...) RL_TraceLog(level, __VA_ARGS__) | ||||
|  | ||||
| #if defined( SUPPORT_TRACELOG_DEBUG ) | ||||
| #define TRACELOGD( ... ) TraceLog( LOG_DEBUG, __VA_ARGS__ ) | ||||
|     #if defined(RL_SUPPORT_TRACELOG_DEBUG) | ||||
|         #define TRACELOGD(...) RL_TraceLog(RL_LOG_DEBUG, __VA_ARGS__) | ||||
|     #else | ||||
|         #define TRACELOGD(...) (void)0 | ||||
|     #endif | ||||
| #else | ||||
| #define TRACELOGD( ... ) ( void )0 | ||||
| #endif | ||||
| #else | ||||
| #define TRACELOG( level, ... ) ( void )0 | ||||
| #define TRACELOGD( ... )       ( void )0 | ||||
|     #define RL_TRACELOG(level, ...) (void)0 | ||||
|     #define TRACELOGD(...) (void)0 | ||||
| #endif | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Some basic Defines | ||||
| //---------------------------------------------------------------------------------- | ||||
| #if defined( PLATFORM_ANDROID ) | ||||
| #define fopen( name, mode ) android_fopen( name, mode ) | ||||
| #if defined(PLATFORM_ANDROID) | ||||
|     #define fopen(name, mode) android_fopen(name, mode) | ||||
| #endif | ||||
|  | ||||
| //---------------------------------------------------------------------------------- | ||||
| @@ -65,18 +65,17 @@ | ||||
| //---------------------------------------------------------------------------------- | ||||
| // Module Functions Declaration | ||||
| //---------------------------------------------------------------------------------- | ||||
| #if defined( __cplusplus ) | ||||
| extern "C" | ||||
| {    // Prevents name mangling of functions | ||||
| #if defined(__cplusplus) | ||||
| extern "C" {            // Prevents name mangling of functions | ||||
| #endif | ||||
|  | ||||
| #if defined( PLATFORM_ANDROID ) | ||||
| 	void  InitAssetManager( AAssetManager* manager, const char* dataPath );    // Initialize asset manager from android app | ||||
| 	FILE* android_fopen( const char* fileName, const char* mode );             // Replacement for fopen() -> Read-only! | ||||
| #if defined(PLATFORM_ANDROID) | ||||
| void InitAssetManager(AAssetManager *manager, const char *dataPath);   // Initialize asset manager from android app | ||||
| FILE *android_fopen(const char *fileName, const char *mode);           // Replacement for fopen() -> Read-only! | ||||
| #endif | ||||
|  | ||||
| #if defined( __cplusplus ) | ||||
| #if defined(__cplusplus) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif    // UTILS_H | ||||
| #endif // UTILS_H | ||||
|   | ||||
| @@ -1,9 +0,0 @@ | ||||
|  __VERSION 1 | ||||
|  | ||||
|  | ||||
| word SUPPORT_MODULE_RSHAPES,   RL_SUPPORT_MODULE_RSHAPES | ||||
| word SUPPORT_MODULE_RTEXTURES, RL_SUPPORT_MODULE_RTEXTURES | ||||
| word SUPPORT_MODULE_RTEXT,     RL_SUPPORT_MODULE_RTEXT | ||||
| word SUPPORT_MODULE_RMODELS,   RL_SUPPORT_MODULE_RMODELS | ||||
| word SUPPORT_MODULE_RAUDIO,    RL_SUPPORT_MODULE_RAUDIO | ||||
|  | ||||
							
								
								
									
										1340
									
								
								project/auxillary/vis_ast/dependencies/raylib/raylib_c.refactor
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1340
									
								
								project/auxillary/vis_ast/dependencies/raylib/raylib_c.refactor
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -0,0 +1,34 @@ | ||||
| // rlgl.h | ||||
|  | ||||
| //namespace rlgl, RL_ | ||||
| namespace rl,   RLGL_ | ||||
| //namespace RL_,  RLGL_ | ||||
|  | ||||
| namespace RL_OPENGL, RLGL_OPENGL | ||||
|  | ||||
| //word RLAPI, RLGLAPI | ||||
|  | ||||
| not include rlgl.h | ||||
|  | ||||
| word TRACELOG, RL_TRACELOG | ||||
|  | ||||
| not word RL_TEXTURE_MIN_FILTER | ||||
| not word RL_TEXTURE_MAG_FILTER | ||||
| not word RL_TEXTURE_FILTER_LINEAR | ||||
| not word RL_PROJECTION | ||||
| not word RL_MODELVIEW | ||||
| not word RL_LINES | ||||
| not word RL_TRIANGLES | ||||
| not word RL_QUADS | ||||
| not word RL_FLOAT | ||||
| not word RL_UNSIGNED_BYTE | ||||
| not word RL_MATRIX | ||||
|  | ||||
| word RLGL, RLGL_GLOBAL_DATA | ||||
|  | ||||
| word Matrix, RL_Matrix | ||||
|  | ||||
| word LOG_WARNING, RL_LOG_WARNING | ||||
|  | ||||
| word rlglInit, RLGL_Init | ||||
| word rlglClose, RLGL_Close | ||||
| @@ -6,15 +6,24 @@ | ||||
| #include "gen.builder.cpp" | ||||
|  | ||||
|  | ||||
| constexpr char const* path_config    = "config.h"; | ||||
| constexpr char const* path_raylib    = "raylib.h"; | ||||
| constexpr char const* path_raymath   = "raymath.h"; | ||||
| constexpr char const* path_rcamera   = "rcamera.h"; | ||||
| constexpr char const* path_rcore     = "rcore.h"; | ||||
| constexpr char const* path_rgestures = "rgestures.h"; | ||||
| constexpr char const* path_rgl       = "rgl.h"; | ||||
| constexpr char const* path_rtext     = "rtext.h"; | ||||
| constexpr char const* path_config_h    = "config.h"; | ||||
| constexpr char const* path_raylib_h    = "raylib.h"; | ||||
| constexpr char const* path_raymath_h   = "raymath.h"; | ||||
| constexpr char const* path_rcamera_h   = "rcamera.h"; | ||||
| constexpr char const* path_rcore_h     = "rcore.h"; | ||||
| constexpr char const* path_rgestures_h = "rgestures.h"; | ||||
| constexpr char const* path_rgl_h       = "rgl.h"; | ||||
| constexpr char const* path_rtext_h     = "rtext.h"; | ||||
|  | ||||
| constexpr char const* path_rcore_desktop_c = "rcore_desktop.c"; | ||||
|  | ||||
| constexpr char const* path_raudio_c    = "raudio.c"; | ||||
| constexpr char const* path_rcore_c     = "rcore.c"; | ||||
| constexpr char const* path_rglfw_c     = "rglfw.c"; | ||||
| constexpr char const* path_rmodels_c   = "rmodels.c"; | ||||
| constexpr char const* path_rtext_c     = "rtext.c"; | ||||
| constexpr char const* path_rtextures_c = "rtextures.c"; | ||||
| constexpr char const* path_rutils_c    = "rutils.c"; | ||||
|  | ||||
| using namespace gen; | ||||
|  | ||||
| @@ -117,6 +126,18 @@ StringCached pascal_to_lower_snake(StringCached str) | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| void refactor_define( CodeDefine& code ) | ||||
| { | ||||
| 	local_persist String name_scratch = String::make_reserve( GlobalAllocator, kilobytes(1) ); | ||||
|  | ||||
| 	if ( str_compare( elem->Name, txt("RL"), 2 ) == 0 || str_compare( elem->Name, txt("RAYLIB"), 6 ) == 0 ) | ||||
| 		continue; | ||||
|  | ||||
| 	name_scratch.append_fmt( "%RL_%S", elem->Name ); | ||||
| 	elem->Name = get_cached_string( name_scratch ); | ||||
| 	name_scratch.clear(); | ||||
| } | ||||
|  | ||||
| void refactor_enum( CodeEnum& code ) | ||||
| { | ||||
| 	for ( Code elem : code->Body ) | ||||
| @@ -181,8 +202,11 @@ void refactor_typename( CodeType& type ) | ||||
|  | ||||
| void refactor_fn( CodeFn& fn ) | ||||
| { | ||||
| 	StringCached original_name = fn->Name; | ||||
| 	fn->Name = pascal_to_lower_snake( fn->Name ); | ||||
|  | ||||
| 	log_fmt( "%S", "Proc ID: %S -> %S", original_name, fn->Name ); | ||||
|  | ||||
| 	for ( CodeParam param : fn->Params ) | ||||
| 	{ | ||||
| 		refactor_typename( param->ValueType ); | ||||
| @@ -206,9 +230,9 @@ void refactor_file( char const* path ) | ||||
| 	FileContents contents = file_read_contents( GlobalAllocator, true, path ); | ||||
| 	CodeBody     code     = parse_global_body( { contents.size, rcast(char const*, contents.data) } ); | ||||
|  | ||||
| 	String name_scratch = String::make_reserve( GlobalAllocator, kilobytes(1) ); | ||||
| 	local_perist String name_scratch = String::make_reserve( GlobalAllocator, kilobytes(1) ); | ||||
|  | ||||
| 	// CodeBody includes  | ||||
| 	// CodeBody includes | ||||
| 	// CodeBody nspace_body = def_body( ECode::Namespace ); | ||||
| 	CodeBody new_code = def_body( ECode::Global_Body ); | ||||
|  | ||||
| @@ -216,12 +240,7 @@ void refactor_file( char const* path ) | ||||
| 	{ | ||||
| 		if ( elem->Type == ECode::Preprocess_Define ) | ||||
| 		{ | ||||
| 			if ( str_compare( elem->Name, txt("RL"), 2 ) == 0 || str_compare( elem->Name, txt("RAYLIB"), 6 ) == 0 ) | ||||
| 				continue; | ||||
|  | ||||
| 			name_scratch.append_fmt( "%RL_%S", elem->Name ); | ||||
| 			elem->Name = get_cached_string( name_scratch ); | ||||
| 			name_scratch.clear(); | ||||
| 			refactor_define( elem.cast<CodeDefine>() ); | ||||
| 		} | ||||
|  | ||||
| 		if ( elem->Type == ECode::Enum ) | ||||
| @@ -275,16 +294,29 @@ void refactor_file( char const* path ) | ||||
| 	Builder builder = Builder::open( path ); | ||||
| 	builder.print( new_code ); | ||||
| 	builder.write(); | ||||
|  | ||||
| 	name_scratch.clear(); | ||||
| } | ||||
|  | ||||
| int gen_main() | ||||
| { | ||||
| 	gen::init(); | ||||
|  | ||||
| 	refactor_file( path_config ); | ||||
| 	refactor_file( path_raylib ); | ||||
| 	refactor_file( path_raymath ); | ||||
| 	refactor_file( path_rcamera ); | ||||
| 	refactor_file( path_config_h ); | ||||
| 	refactor_file( path_raylib_h ); | ||||
| 	refactor_file( path_rcamera_h ); | ||||
| 	refactor_file( path_raymath_h ); | ||||
| 	refactor_file( path_rcore_h ); | ||||
| 	refactor_file( path_rgl_h ); | ||||
| 	refactor_file( path_rtext_h ); | ||||
|  | ||||
| 	refactor_file( path_rcore_desktop_c ); | ||||
| 	refactor_file( path_raudio_c ); | ||||
| 	refactor_file( path_rcore_c ); | ||||
| 	refactor_file( path_rglfw_c ); | ||||
| 	refactor_file( path_rmodels_c ); | ||||
| 	refactor_file( path_rtext_c ); | ||||
| 	refactor_file( path_rutils_c ); | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|   | ||||
| @@ -67,15 +67,17 @@ function setup-raylib { | ||||
| 	new-item -path $path_raylib_inc -ItemType Directory | ||||
| 	new-item -path $path_raylib_lib -ItemType Directory | ||||
|  | ||||
| 	$url_raylib_zip  = 'https://github.com/raysan5/raylib/archive/refs/heads/master.zip' | ||||
| 	$url_raylib_zip  = 'https://github.com/Ed94/raylib_refactored/archive/refs/heads/refactor-support.zip' | ||||
| 	$path_raylib_zip = join-path $path_temp 'raylib.zip' | ||||
|  | ||||
| 	$path_raylib_master      = join-path $path_temp          'raylib-master' | ||||
| 	$path_raylib_master      = join-path $path_temp          'raylib_refactored-refactor-support' | ||||
| 	$path_raylib_src         = join-path $path_raylib_master 'src' | ||||
| 	$path_raylib_platforms   = join-path $path_raylib_src    'platforms' | ||||
| 	$path_raylib_glfw_inc    = join-path $path_raylib_src    'external/glfw/include' | ||||
| 	$path_raylib_gputex      = join-path $path_raylib_src    'external/rl_gputex.h' | ||||
|  | ||||
| 	remove-item $path_raylib_master -Recurse | ||||
| 	# invoke-webrequest -uri $url_raylib_zip   -outfile $path_raylib_zip | ||||
| 	#invoke-webrequest -uri $url_raylib_zip   -outfile $path_raylib_zip | ||||
| 	expand-archive    -path $path_raylib_zip -destinationpath $path_temp | ||||
|  | ||||
| 	write-host "Building raylib with $vendor" | ||||
| @@ -85,11 +87,79 @@ function setup-raylib { | ||||
| 		New-Item $path_build -ItemType Directory | ||||
| 	} | ||||
|  | ||||
| 	$raylib_headers = Get-ChildItem -Path $path_raylib_src -Filter "*.h" -File | ||||
| 	$raylib_modules = get-childitem -path $path_raylib_src -filter "*.c" -file | ||||
| 	$raylib_headers  = Get-ChildItem -Path $path_raylib_src       -Filter '*.h' -File | ||||
| 	$raylib_modules  = get-childitem -path $path_raylib_src       -filter '*.c' -file | ||||
|  | ||||
| 	# Refactor raylib | ||||
| 	# Refactor with refactor.exe | ||||
| 	if ( $true ) { | ||||
| 		$path_refactor      = join-path $path_raylib 'raylib_c.refactor' | ||||
| 		$path_refactor_rlgl = join-path $path_raylib 'raylib_c_gl.refactor' | ||||
|  | ||||
| 		$fmt_includes = @() | ||||
| 		foreach ( $header in $raylib_headers ) { | ||||
| 			$file_name = split-path $header -leaf | ||||
|  | ||||
| 			if ( -not $file_name.Equals('rlgl.h' ) ) { | ||||
| 				$fmt_includes += "$header" | ||||
| 			} | ||||
| 		} | ||||
| 		foreach ( $module in $raylib_modules ) { | ||||
| 			$fmt_includes += "$module" | ||||
| 		} | ||||
|  | ||||
| 		$fmt_includes += "$path_raylib_gputex" | ||||
|  | ||||
| 		$platform_modules = @() | ||||
| 		foreach ( $module in (get-childitem -path $path_raylib_platforms -filter '*.c' -file) ) { | ||||
| 			$platform_modules += "$module" | ||||
| 		} | ||||
|  | ||||
| 		$path_rlgl = join-path $path_raylib_src 'rlgl.h' | ||||
|  | ||||
| 		Push-Location $path_raylib_src | ||||
| 			write-host "Beginning refactor...`n" | ||||
| 			$refactors = @(@()) | ||||
| 			$refactorParams = @( | ||||
| 				"-debug", | ||||
| 				"-num=$($fmt_includes.Count)" | ||||
| 				"-src=$($fmt_includes)", | ||||
| 				"-spec=$($path_refactor)" | ||||
| 			) | ||||
| 			& refactor $refactorParams | ||||
| 			Write-Host "`nRefactoring complete`n`n" | ||||
| 		Pop-Location | ||||
|  | ||||
| 		Push-Location $path_raylib_platforms | ||||
| 		write-host "Beginning refactor...`n" | ||||
| 			$refactors = @(@()) | ||||
| 			$refactorParams = @( | ||||
| 				"-debug", | ||||
| 				"-num=$($platform_modules.Count)" | ||||
| 				"-src=$($platform_modules)", | ||||
| 				"-spec=$($path_refactor)" | ||||
| 			) | ||||
| 			& refactor $refactorParams | ||||
| 			Write-Host "`nRefactoring complete`n`n" | ||||
| 		Pop-Location | ||||
|  | ||||
| 		Push-Location $path_raylib_src | ||||
| 			$gl_modules = @( "$path_rlgl", "$path_raylib_gputex" ) | ||||
|  | ||||
| 			write-host "Beginning refactor just for rlgl.h...`n" | ||||
| 			$refactors = @(@()) | ||||
| 			$refactorParams = @( | ||||
| 				"-debug", | ||||
| 				"-num=$($gl_modules.Count)" | ||||
| 				"-src=$($gl_modules)", | ||||
| 				"-spec=$($path_refactor_rlgl)" | ||||
| 			) | ||||
| 			& refactor $refactorParams | ||||
| 			Write-Host "`nRefactoring complete`n`n" | ||||
| 		Pop-Location | ||||
| 	} | ||||
|  | ||||
| 	# Refactor raylib with gencpp | ||||
| 	if ( $false ) { | ||||
| 	# if ( $false ) { | ||||
| 		$path_gencpp = join-path $path_root 'project/gen' | ||||
|  | ||||
| @@ -133,7 +203,7 @@ function setup-raylib { | ||||
| 	} | ||||
|  | ||||
| 	# Build raylib | ||||
| 	if ( $false ) { | ||||
| 	if ( $true ) { | ||||
| 		# Microsoft | ||||
| 		$lib_gdi32   = 'Gdi32.lib' | ||||
| 		$lib_shell32 = 'Shell32.lib' | ||||
|   | ||||
		Reference in New Issue
	
	Block a user