diff --git a/.gitmodules b/.gitmodules index af55ebc..b70b943 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,11 +4,11 @@ [submodule "thirdparty/raylib"] path = thirdparty/raylib url = https://github.com/raysan5/raylib.git - branch = tags/4.5.0 + branch = main [submodule "thirdparty/raygui"] path = thirdparty/raygui url = https://github.com/raysan5/raygui.git - branch = tags/3.6 + branch = main [submodule "thirdparty/lightmapper"] path = thirdparty/lightmapper url = https://github.com/ands/lightmapper.git diff --git a/examples/lib.raylib.d.ts b/examples/lib.raylib.d.ts index 3afb149..753df65 100644 --- a/examples/lib.raylib.d.ts +++ b/examples/lib.raylib.d.ts @@ -1419,9 +1419,9 @@ declare function matrixScale(x: number, y: number, z: number): Matrix; declare function matrixFrustum(left: number, right: number, bottom: number, top: number, near: number, far: number): Matrix; /** Get perspective projection matrix NOTE: Fovy angle must be provided in radians */ -declare function matrixPerspective(fovy: number, aspect: number, near: number, far: number): Matrix; +declare function matrixPerspective(fovY: number, aspect: number, nearPlane: number, farPlane: number): Matrix; /** Get orthographic projection matrix */ -declare function matrixOrtho(left: number, right: number, bottom: number, top: number, near: number, far: number): Matrix; +declare function matrixOrtho(left: number, right: number, bottom: number, top: number, nearPlane: number, farPlane: number): Matrix; /** Get camera look-at matrix (view matrix) */ declare function matrixLookAt(eye: Vector3, target: Vector3, up: Vector3): Matrix; /** Add two quaternions */ diff --git a/examples/shaders/shaders_basic_lighting2.js b/examples/shaders/shaders_basic_lighting2.js index 1ded493..219158b 100644 --- a/examples/shaders/shaders_basic_lighting2.js +++ b/examples/shaders/shaders_basic_lighting2.js @@ -41,8 +41,8 @@ const model = loadModelFromMesh(genMeshPlane(100.0, 100.0, 3, 3)); //const cube = loadModelFromMesh(genMeshCube(2.0, 4.0, 2.0)); const cube = loadModel("resources/models/icosphere.glb") -const g1 = genImageGradientH(128, 1, YELLOW, DARKBLUE) -const g2 = genImageGradientH(128, 1, DARKBLUE, PURPLE) +const g1 = genImageGradientLinear(128, 1, 90, YELLOW, DARKBLUE) +const g2 = genImageGradientLinear(128, 1, 90, DARKBLUE, PURPLE) const image= genImageColor(256,1,WHITE) const src = new Rectangle(0,0,128,1) imageDraw(image,g1,src,src,WHITE) @@ -68,7 +68,7 @@ setShaderValue(shader, ambientLoc, new Vector4(0.1, 0.1, 0.1, 1.0), SHADER_UNIFO // Assign out lighting shader to model const matModel = loadMaterialDefault() matModel.shader = shader -setModelMaterial(floor, 0, matModel) +setModelMaterial(model, 0, matModel) setMaterialTexture(matModel, MATERIAL_MAP_DIFFUSE, texture) const matCube = loadMaterialDefault() matCube.shader = shader @@ -107,7 +107,7 @@ while (!windowShouldClose()) // Detect window close button or ESC key clearBackground(RAYWHITE); beginMode3D(camera); - drawModel(floor, vector3Zero(), 1.0, WHITE); + drawModel(model, vector3Zero(), 1.0, WHITE); drawModel(cube, new Vector3(0,1,0), 1.0, WHITE); if (light.enabled) drawSphereEx(light.position, 0.2, 8, 8, light.color); diff --git a/examples/shaders/shaders_custom_uniform.c b/examples/shaders/shaders_custom_uniform.c deleted file mode 100644 index eaeca5e..0000000 --- a/examples/shaders/shaders_custom_uniform.c +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Apply a postprocessing shader and connect a custom uniform variable -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3), to test this example -* on OpenGL ES 2.0 platforms (Android, Raspberry Pi, HTML5), use #version 100 shaders -* raylib comes with shaders ready for both versions, check raylib/shaders install folder -* -* Example originally created with raylib 1.3, last time updated with raylib 4.0 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2015-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - custom uniform variable"); - - // Define the camera to look into our 3d world - Camera camera = { 0 }; - camera.position = (Vector3){ 8.0f, 8.0f, 8.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 1.5f, 0.0f }; // Camera looking at point - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) - camera.fovy = 45.0f; // Camera field-of-view Y - camera.projection = CAMERA_PERSPECTIVE; // Camera projection type - - Model model = LoadModel("resources/models/barracks.obj"); // Load OBJ model - Texture2D texture = LoadTexture("resources/models/barracks_diffuse.png"); // Load model texture (diffuse map) - model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; // Set model diffuse texture - - Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position - - // Load postprocessing shader - // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/swirl.fs", GLSL_VERSION)); - - // Get variable (uniform) location on the shader to connect with the program - // NOTE: If uniform variable could not be found in the shader, function returns -1 - int swirlCenterLoc = GetShaderLocation(shader, "center"); - - float swirlCenter[2] = { (float)screenWidth/2, (float)screenHeight/2 }; - - // Create a RenderTexture2D to be used for render to texture - RenderTexture2D target = LoadRenderTexture(screenWidth, screenHeight); - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera, CAMERA_ORBITAL); - - Vector2 mousePosition = GetMousePosition(); - - swirlCenter[0] = mousePosition.x; - swirlCenter[1] = screenHeight - mousePosition.y; - - // Send new value to the shader to be used on drawing - SetShaderValue(shader, swirlCenterLoc, swirlCenter, SHADER_UNIFORM_VEC2); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginTextureMode(target); // Enable drawing to texture - ClearBackground(RAYWHITE); // Clear texture background - - BeginMode3D(camera); // Begin 3d mode drawing - DrawModel(model, position, 0.5f, WHITE); // Draw 3d model with texture - DrawGrid(10, 1.0f); // Draw a grid - EndMode3D(); // End 3d mode drawing, returns to orthographic 2d mode - - DrawText("TEXT DRAWN IN RENDER TEXTURE", 200, 10, 30, RED); - EndTextureMode(); // End drawing to texture (now we have a texture available for next passes) - - BeginDrawing(); - ClearBackground(RAYWHITE); // Clear screen background - - // Enable shader using the custom uniform - BeginShaderMode(shader); - // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) - DrawTextureRec(target.texture, (Rectangle){ 0, 0, (float)target.texture.width, (float)-target.texture.height }, (Vector2){ 0, 0 }, WHITE); - EndShaderMode(); - - // Draw some 2d text over drawn texture - DrawText("(c) Barracks 3D model by Alberto Cano", screenWidth - 220, screenHeight - 20, 10, GRAY); - DrawFPS(10, 10); - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadShader(shader); // Unload shader - UnloadTexture(texture); // Unload texture - UnloadModel(model); // Unload model - UnloadRenderTexture(target); // Unload render texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shaders/shaders_eratosthenes.c b/examples/shaders/shaders_eratosthenes.c deleted file mode 100644 index a481f30..0000000 --- a/examples/shaders/shaders_eratosthenes.c +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Sieve of Eratosthenes -* -* NOTE: Sieve of Eratosthenes, the earliest known (ancient Greek) prime number sieve. -* -* "Sift the twos and sift the threes, -* The Sieve of Eratosthenes. -* When the multiples sublime, -* the numbers that are left are prime." -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3). -* -* Example originally created with raylib 2.5, last time updated with raylib 4.0 -* -* Example contributed by ProfJski and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 ProfJski and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - Sieve of Eratosthenes"); - - RenderTexture2D target = LoadRenderTexture(screenWidth, screenHeight); - - // Load Eratosthenes shader - // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/eratosthenes.fs", GLSL_VERSION)); - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // Nothing to do here, everything is happening in the shader - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginTextureMode(target); // Enable drawing to texture - ClearBackground(BLACK); // Clear the render texture - - // Draw a rectangle in shader mode to be used as shader canvas - // NOTE: Rectangle uses font white character texture coordinates, - // so shader can not be applied here directly because input vertexTexCoord - // do not represent full screen coordinates (space where want to apply shader) - DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), BLACK); - EndTextureMode(); // End drawing to texture (now we have a blank texture available for the shader) - - BeginDrawing(); - ClearBackground(RAYWHITE); // Clear screen background - - BeginShaderMode(shader); - // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) - DrawTextureRec(target.texture, (Rectangle){ 0, 0, (float)target.texture.width, (float)-target.texture.height }, (Vector2){ 0.0f, 0.0f }, WHITE); - EndShaderMode(); - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadShader(shader); // Unload shader - UnloadRenderTexture(target); // Unload render texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shaders/shaders_fog.c b/examples/shaders/shaders_fog.c deleted file mode 100644 index 24a1c10..0000000 --- a/examples/shaders/shaders_fog.c +++ /dev/null @@ -1,155 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - fog -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3). -* -* Example originally created with raylib 2.5, last time updated with raylib 3.7 -* -* Example contributed by Chris Camacho (@chriscamacho) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 Chris Camacho (@chriscamacho) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include "raymath.h" - -#define RLIGHTS_IMPLEMENTATION -#include "rlights.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - fog"); - - // Define the camera to look into our 3d world - Camera camera = { 0 }; - camera.position = (Vector3){ 2.0f, 2.0f, 6.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 0.5f, 0.0f }; // Camera looking at point - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) - camera.fovy = 45.0f; // Camera field-of-view Y - camera.projection = CAMERA_PERSPECTIVE; // Camera projection type - - // Load models and texture - Model modelA = LoadModelFromMesh(GenMeshTorus(0.4f, 1.0f, 16, 32)); - Model modelB = LoadModelFromMesh(GenMeshCube(1.0f, 1.0f, 1.0f)); - Model modelC = LoadModelFromMesh(GenMeshSphere(0.5f, 32, 32)); - Texture texture = LoadTexture("resources/texel_checker.png"); - - // Assign texture to default model material - modelA.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; - modelB.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; - modelC.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; - - // Load shader and set up some uniforms - Shader shader = LoadShader(TextFormat("resources/shaders/glsl%i/lighting.vs", GLSL_VERSION), - TextFormat("resources/shaders/glsl%i/fog.fs", GLSL_VERSION)); - shader.locs[SHADER_LOC_MATRIX_MODEL] = GetShaderLocation(shader, "matModel"); - shader.locs[SHADER_LOC_VECTOR_VIEW] = GetShaderLocation(shader, "viewPos"); - - // Ambient light level - int ambientLoc = GetShaderLocation(shader, "ambient"); - SetShaderValue(shader, ambientLoc, (float[4]){ 0.2f, 0.2f, 0.2f, 1.0f }, SHADER_UNIFORM_VEC4); - - float fogDensity = 0.15f; - int fogDensityLoc = GetShaderLocation(shader, "fogDensity"); - SetShaderValue(shader, fogDensityLoc, &fogDensity, SHADER_UNIFORM_FLOAT); - - // NOTE: All models share the same shader - modelA.materials[0].shader = shader; - modelB.materials[0].shader = shader; - modelC.materials[0].shader = shader; - - // Using just 1 point lights - CreateLight(LIGHT_POINT, (Vector3){ 0, 2, 6 }, Vector3Zero(), WHITE, shader); - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera, CAMERA_ORBITAL); - - if (IsKeyDown(KEY_UP)) - { - fogDensity += 0.001f; - if (fogDensity > 1.0f) fogDensity = 1.0f; - } - - if (IsKeyDown(KEY_DOWN)) - { - fogDensity -= 0.001f; - if (fogDensity < 0.0f) fogDensity = 0.0f; - } - - SetShaderValue(shader, fogDensityLoc, &fogDensity, SHADER_UNIFORM_FLOAT); - - // Rotate the torus - modelA.transform = MatrixMultiply(modelA.transform, MatrixRotateX(-0.025f)); - modelA.transform = MatrixMultiply(modelA.transform, MatrixRotateZ(0.012f)); - - // Update the light shader with the camera view position - SetShaderValue(shader, shader.locs[SHADER_LOC_VECTOR_VIEW], &camera.position.x, SHADER_UNIFORM_VEC3); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(GRAY); - - BeginMode3D(camera); - - // Draw the three models - DrawModel(modelA, Vector3Zero(), 1.0f, WHITE); - DrawModel(modelB, (Vector3){ -2.6f, 0, 0 }, 1.0f, WHITE); - DrawModel(modelC, (Vector3){ 2.6f, 0, 0 }, 1.0f, WHITE); - - for (int i = -20; i < 20; i += 2) DrawModel(modelA,(Vector3){ (float)i, 0, 2 }, 1.0f, WHITE); - - EndMode3D(); - - DrawText(TextFormat("Use KEY_UP/KEY_DOWN to change fog density [%.2f]", fogDensity), 10, 10, 20, RAYWHITE); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadModel(modelA); // Unload the model A - UnloadModel(modelB); // Unload the model B - UnloadModel(modelC); // Unload the model C - UnloadTexture(texture); // Unload the texture - UnloadShader(shader); // Unload shader - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shaders/shaders_hot_reloading.c b/examples/shaders/shaders_hot_reloading.c deleted file mode 100644 index 395d44c..0000000 --- a/examples/shaders/shaders_hot_reloading.c +++ /dev/null @@ -1,135 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Hot reloading -* -* NOTE: This example requires raylib OpenGL 3.3 for shaders support and only #version 330 -* is currently supported. OpenGL ES 2.0 platforms are not supported at the moment. -* -* Example originally created with raylib 3.0, last time updated with raylib 3.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2020-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" -#include "rlgl.h" - -#include // Required for: localtime(), asctime() - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - hot reloading"); - - const char *fragShaderFileName = "resources/shaders/glsl%i/reload.fs"; - time_t fragShaderFileModTime = GetFileModTime(TextFormat(fragShaderFileName, GLSL_VERSION)); - - // Load raymarching shader - // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader - Shader shader = LoadShader(0, TextFormat(fragShaderFileName, GLSL_VERSION)); - - // Get shader locations for required uniforms - int resolutionLoc = GetShaderLocation(shader, "resolution"); - int mouseLoc = GetShaderLocation(shader, "mouse"); - int timeLoc = GetShaderLocation(shader, "time"); - - float resolution[2] = { (float)screenWidth, (float)screenHeight }; - SetShaderValue(shader, resolutionLoc, resolution, SHADER_UNIFORM_VEC2); - - float totalTime = 0.0f; - bool shaderAutoReloading = false; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - totalTime += GetFrameTime(); - Vector2 mouse = GetMousePosition(); - float mousePos[2] = { mouse.x, mouse.y }; - - // Set shader required uniform values - SetShaderValue(shader, timeLoc, &totalTime, SHADER_UNIFORM_FLOAT); - SetShaderValue(shader, mouseLoc, mousePos, SHADER_UNIFORM_VEC2); - - // Hot shader reloading - if (shaderAutoReloading || (IsMouseButtonPressed(MOUSE_BUTTON_LEFT))) - { - long currentFragShaderModTime = GetFileModTime(TextFormat(fragShaderFileName, GLSL_VERSION)); - - // Check if shader file has been modified - if (currentFragShaderModTime != fragShaderFileModTime) - { - // Try reloading updated shader - Shader updatedShader = LoadShader(0, TextFormat(fragShaderFileName, GLSL_VERSION)); - - if (updatedShader.id != rlGetShaderIdDefault()) // It was correctly loaded - { - UnloadShader(shader); - shader = updatedShader; - - // Get shader locations for required uniforms - resolutionLoc = GetShaderLocation(shader, "resolution"); - mouseLoc = GetShaderLocation(shader, "mouse"); - timeLoc = GetShaderLocation(shader, "time"); - - // Reset required uniforms - SetShaderValue(shader, resolutionLoc, resolution, SHADER_UNIFORM_VEC2); - } - - fragShaderFileModTime = currentFragShaderModTime; - } - } - - if (IsKeyPressed(KEY_A)) shaderAutoReloading = !shaderAutoReloading; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - // We only draw a white full-screen rectangle, frame is generated in shader - BeginShaderMode(shader); - DrawRectangle(0, 0, screenWidth, screenHeight, WHITE); - EndShaderMode(); - - DrawText(TextFormat("PRESS [A] to TOGGLE SHADER AUTOLOADING: %s", - shaderAutoReloading? "AUTO" : "MANUAL"), 10, 10, 10, shaderAutoReloading? RED : BLACK); - if (!shaderAutoReloading) DrawText("MOUSE CLICK to SHADER RE-LOADING", 10, 30, 10, BLACK); - - DrawText(TextFormat("Shader last modification: %s", asctime(localtime(&fragShaderFileModTime))), 10, 430, 10, BLACK); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadShader(shader); // Unload shader - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shaders/shaders_hybrid_render.c b/examples/shaders/shaders_hybrid_render.c deleted file mode 100644 index f07917f..0000000 --- a/examples/shaders/shaders_hybrid_render.c +++ /dev/null @@ -1,208 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Hybrid Rendering -* -* Example originally created with raylib 4.2, last time updated with raylib 4.2 -* -* Example contributed by Buğra Alptekin Sarı (@BugraAlptekinSari) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2022-2023 Buğra Alptekin Sarı (@BugraAlptekinSari) -* -********************************************************************************************/ - -#include "raylib.h" -#include "rlgl.h" -#include "math.h" // Used for tan() -#include "raymath.h" // Used to calculate camera Direction - -#if defined(PLATFORM_DESKTOP) -#define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB -#define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Declare custom functions required for the example -//------------------------------------------------------------------------------------ -// Load custom render texture, create a writable depth texture buffer -static RenderTexture2D LoadRenderTextureDepthTex(int width, int height); -// Unload render texture from GPU memory (VRAM) -static void UnloadRenderTextureDepthTex(RenderTexture2D target); - -//------------------------------------------------------------------------------------ -// Declare custom Structs -//------------------------------------------------------------------------------------ - -typedef struct { - unsigned int camPos, camDir, screenCenter; -}RayLocs ; - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - write depth buffer"); - - // This Shader calculates pixel depth and color using raymarch - Shader shdrRaymarch = LoadShader(0, TextFormat("resources/shaders/glsl%i/hybrid_raymarch.fs", GLSL_VERSION)); - - // This Shader is a standard rasterization fragment shader with the addition of depth writing - // You are required to write depth for all shaders if one shader does it - Shader shdrRaster = LoadShader(0, TextFormat("resources/shaders/glsl%i/hybrid_raster.fs", GLSL_VERSION)); - - // Declare Struct used to store camera locs. - RayLocs marchLocs = {0}; - - // Fill the struct with shader locs. - marchLocs.camPos = GetShaderLocation(shdrRaymarch, "camPos"); - marchLocs.camDir = GetShaderLocation(shdrRaymarch, "camDir"); - marchLocs.screenCenter = GetShaderLocation(shdrRaymarch, "screenCenter"); - - // Transfer screenCenter position to shader. Which is used to calculate ray direction. - Vector2 screenCenter = {.x = screenWidth/2.0, .y = screenHeight/2.0}; - SetShaderValue(shdrRaymarch, marchLocs.screenCenter , &screenCenter , SHADER_UNIFORM_VEC2); - - // Use Customized function to create writable depth texture buffer - RenderTexture2D target = LoadRenderTextureDepthTex(screenWidth, screenHeight); - - // Define the camera to look into our 3d world - Camera camera = { - .position = (Vector3){ 0.5f, 1.0f, 1.5f }, // Camera position - .target = (Vector3){ 0.0f, 0.5f, 0.0f }, // Camera looking at point - .up = (Vector3){ 0.0f, 1.0f, 0.0f }, // Camera up vector (rotation towards target) - .fovy = 45.0f, // Camera field-of-view Y - .projection = CAMERA_PERSPECTIVE // Camera projection type - }; - - // Camera FOV is pre-calculated in the camera Distance. - double camDist = 1.0/(tan(camera.fovy*0.5*DEG2RAD)); - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera, CAMERA_ORBITAL); - - // Update Camera Postion in the ray march shader. - SetShaderValue(shdrRaymarch, marchLocs.camPos, &(camera.position), RL_SHADER_UNIFORM_VEC3); - - // Update Camera Looking Vector. Vector length determines FOV. - Vector3 camDir = Vector3Scale( Vector3Normalize( Vector3Subtract(camera.target, camera.position)) , camDist); - SetShaderValue(shdrRaymarch, marchLocs.camDir, &(camDir), RL_SHADER_UNIFORM_VEC3); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - // Draw into our custom render texture (framebuffer) - BeginTextureMode(target); - ClearBackground(WHITE); - - // Raymarch Scene - rlEnableDepthTest(); //Manually enable Depth Test to handle multiple rendering methods. - BeginShaderMode(shdrRaymarch); - DrawRectangleRec((Rectangle){0,0,screenWidth,screenHeight},WHITE); - EndShaderMode(); - - // Raserize Scene - BeginMode3D(camera); - BeginShaderMode(shdrRaster); - DrawCubeWiresV((Vector3){ 0.0f, 0.5f, 1.0f }, (Vector3){ 1.0f, 1.0f, 1.0f }, RED); - DrawCubeV((Vector3){ 0.0f, 0.5f, 1.0f }, (Vector3){ 1.0f, 1.0f, 1.0f }, PURPLE); - DrawCubeWiresV((Vector3){ 0.0f, 0.5f, -1.0f }, (Vector3){ 1.0f, 1.0f, 1.0f }, DARKGREEN); - DrawCubeV((Vector3) { 0.0f, 0.5f, -1.0f }, (Vector3){ 1.0f, 1.0f, 1.0f }, YELLOW); - DrawGrid(10, 1.0f); - EndShaderMode(); - EndMode3D(); - EndTextureMode(); - - // Draw into screen our custom render texture - BeginDrawing(); - ClearBackground(RAYWHITE); - - DrawTextureRec(target.texture, (Rectangle) { 0, 0, screenWidth, -screenHeight }, (Vector2) { 0, 0 }, WHITE); - DrawFPS(10, 10); - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadRenderTextureDepthTex(target); - UnloadShader(shdrRaymarch); - UnloadShader(shdrRaster); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//------------------------------------------------------------------------------------ -// Define custom functions required for the example -//------------------------------------------------------------------------------------ -// Load custom render texture, create a writable depth texture buffer -RenderTexture2D LoadRenderTextureDepthTex(int width, int height) -{ - RenderTexture2D target = { 0 }; - - target.id = rlLoadFramebuffer(width, height); // Load an empty framebuffer - - if (target.id > 0) - { - rlEnableFramebuffer(target.id); - - // Create color texture (default to RGBA) - target.texture.id = rlLoadTexture(0, width, height, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, 1); - target.texture.width = width; - target.texture.height = height; - target.texture.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8; - target.texture.mipmaps = 1; - - // Create depth texture buffer (instead of raylib default renderbuffer) - target.depth.id = rlLoadTextureDepth(width, height, false); - target.depth.width = width; - target.depth.height = height; - target.depth.format = 19; //DEPTH_COMPONENT_24BIT? - target.depth.mipmaps = 1; - - // Attach color texture and depth texture to FBO - rlFramebufferAttach(target.id, target.texture.id, RL_ATTACHMENT_COLOR_CHANNEL0, RL_ATTACHMENT_TEXTURE2D, 0); - rlFramebufferAttach(target.id, target.depth.id, RL_ATTACHMENT_DEPTH, RL_ATTACHMENT_TEXTURE2D, 0); - - // Check if fbo is complete with attachments (valid) - if (rlFramebufferComplete(target.id)) TRACELOG(LOG_INFO, "FBO: [ID %i] Framebuffer object created successfully", target.id); - - rlDisableFramebuffer(); - } - else TRACELOG(LOG_WARNING, "FBO: Framebuffer object can not be created"); - - return target; -} - -// Unload render texture from GPU memory (VRAM) -void UnloadRenderTextureDepthTex(RenderTexture2D target) -{ - if (target.id > 0) - { - // Color texture attached to FBO is deleted - rlUnloadTexture(target.texture.id); - rlUnloadTexture(target.depth.id); - - // NOTE: Depth texture is automatically - // queried and deleted before deleting framebuffer - rlUnloadFramebuffer(target.id); - } -} \ No newline at end of file diff --git a/examples/shaders/shaders_julia_set.c b/examples/shaders/shaders_julia_set.c deleted file mode 100644 index ee19880..0000000 --- a/examples/shaders/shaders_julia_set.c +++ /dev/null @@ -1,196 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Julia sets -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3). -* -* Example originally created with raylib 2.5, last time updated with raylib 4.0 -* -* Example contributed by eggmund (@eggmund) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 eggmund (@eggmund) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -// A few good julia sets -const float pointsOfInterest[6][2] = -{ - { -0.348827f, 0.607167f }, - { -0.786268f, 0.169728f }, - { -0.8f, 0.156f }, - { 0.285f, 0.0f }, - { -0.835f, -0.2321f }, - { -0.70176f, -0.3842f }, -}; - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - //SetConfigFlags(FLAG_WINDOW_HIGHDPI); - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - julia sets"); - - // Load julia set shader - // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/julia_set.fs", GLSL_VERSION)); - - // Create a RenderTexture2D to be used for render to texture - RenderTexture2D target = LoadRenderTexture(GetScreenWidth(), GetScreenHeight()); - - // c constant to use in z^2 + c - float c[2] = { pointsOfInterest[0][0], pointsOfInterest[0][1] }; - - // Offset and zoom to draw the julia set at. (centered on screen and default size) - float offset[2] = { -(float)GetScreenWidth()/2, -(float)GetScreenHeight()/2 }; - float zoom = 1.0f; - - Vector2 offsetSpeed = { 0.0f, 0.0f }; - - // Get variable (uniform) locations on the shader to connect with the program - // NOTE: If uniform variable could not be found in the shader, function returns -1 - int cLoc = GetShaderLocation(shader, "c"); - int zoomLoc = GetShaderLocation(shader, "zoom"); - int offsetLoc = GetShaderLocation(shader, "offset"); - - // Tell the shader what the screen dimensions, zoom, offset and c are - float screenDims[2] = { (float)GetScreenWidth(), (float)GetScreenHeight() }; - SetShaderValue(shader, GetShaderLocation(shader, "screenDims"), screenDims, SHADER_UNIFORM_VEC2); - - SetShaderValue(shader, cLoc, c, SHADER_UNIFORM_VEC2); - SetShaderValue(shader, zoomLoc, &zoom, SHADER_UNIFORM_FLOAT); - SetShaderValue(shader, offsetLoc, offset, SHADER_UNIFORM_VEC2); - - int incrementSpeed = 0; // Multiplier of speed to change c value - bool showControls = true; // Show controls - bool pause = false; // Pause animation - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // Press [1 - 6] to reset c to a point of interest - if (IsKeyPressed(KEY_ONE) || - IsKeyPressed(KEY_TWO) || - IsKeyPressed(KEY_THREE) || - IsKeyPressed(KEY_FOUR) || - IsKeyPressed(KEY_FIVE) || - IsKeyPressed(KEY_SIX)) - { - if (IsKeyPressed(KEY_ONE)) c[0] = pointsOfInterest[0][0], c[1] = pointsOfInterest[0][1]; - else if (IsKeyPressed(KEY_TWO)) c[0] = pointsOfInterest[1][0], c[1] = pointsOfInterest[1][1]; - else if (IsKeyPressed(KEY_THREE)) c[0] = pointsOfInterest[2][0], c[1] = pointsOfInterest[2][1]; - else if (IsKeyPressed(KEY_FOUR)) c[0] = pointsOfInterest[3][0], c[1] = pointsOfInterest[3][1]; - else if (IsKeyPressed(KEY_FIVE)) c[0] = pointsOfInterest[4][0], c[1] = pointsOfInterest[4][1]; - else if (IsKeyPressed(KEY_SIX)) c[0] = pointsOfInterest[5][0], c[1] = pointsOfInterest[5][1]; - - SetShaderValue(shader, cLoc, c, SHADER_UNIFORM_VEC2); - } - - if (IsKeyPressed(KEY_SPACE)) pause = !pause; // Pause animation (c change) - if (IsKeyPressed(KEY_F1)) showControls = !showControls; // Toggle whether or not to show controls - - if (!pause) - { - if (IsKeyPressed(KEY_RIGHT)) incrementSpeed++; - else if (IsKeyPressed(KEY_LEFT)) incrementSpeed--; - - // TODO: The idea is to zoom and move around with mouse - // Probably offset movement should be proportional to zoom level - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT) || IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) - { - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) zoom += zoom*0.003f; - if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) zoom -= zoom*0.003f; - - Vector2 mousePos = GetMousePosition(); - - offsetSpeed.x = mousePos.x -(float)screenWidth/2; - offsetSpeed.y = mousePos.y -(float)screenHeight/2; - - // Slowly move camera to targetOffset - offset[0] += GetFrameTime()*offsetSpeed.x*0.8f; - offset[1] += GetFrameTime()*offsetSpeed.y*0.8f; - } - else offsetSpeed = (Vector2){ 0.0f, 0.0f }; - - SetShaderValue(shader, zoomLoc, &zoom, SHADER_UNIFORM_FLOAT); - SetShaderValue(shader, offsetLoc, offset, SHADER_UNIFORM_VEC2); - - // Increment c value with time - float amount = GetFrameTime()*incrementSpeed*0.0005f; - c[0] += amount; - c[1] += amount; - - SetShaderValue(shader, cLoc, c, SHADER_UNIFORM_VEC2); - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - // Using a render texture to draw Julia set - BeginTextureMode(target); // Enable drawing to texture - ClearBackground(BLACK); // Clear the render texture - - // Draw a rectangle in shader mode to be used as shader canvas - // NOTE: Rectangle uses font white character texture coordinates, - // so shader can not be applied here directly because input vertexTexCoord - // do not represent full screen coordinates (space where want to apply shader) - DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), BLACK); - EndTextureMode(); - - BeginDrawing(); - ClearBackground(BLACK); // Clear screen background - - // Draw the saved texture and rendered julia set with shader - // NOTE: We do not invert texture on Y, already considered inside shader - BeginShaderMode(shader); - // WARNING: If FLAG_WINDOW_HIGHDPI is enabled, HighDPI monitor scaling should be considered - // when rendering the RenderTexture2D to fit in the HighDPI scaled Window - DrawTextureEx(target.texture, (Vector2){ 0.0f, 0.0f }, 0.0f, 1.0f, WHITE); - EndShaderMode(); - - if (showControls) - { - DrawText("Press Mouse buttons right/left to zoom in/out and move", 10, 15, 10, RAYWHITE); - DrawText("Press KEY_F1 to toggle these controls", 10, 30, 10, RAYWHITE); - DrawText("Press KEYS [1 - 6] to change point of interest", 10, 45, 10, RAYWHITE); - DrawText("Press KEY_LEFT | KEY_RIGHT to change speed", 10, 60, 10, RAYWHITE); - DrawText("Press KEY_SPACE to pause movement animation", 10, 75, 10, RAYWHITE); - } - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadShader(shader); // Unload shader - UnloadRenderTexture(target); // Unload render texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shaders/shaders_mesh_instancing.c b/examples/shaders/shaders_mesh_instancing.c deleted file mode 100644 index 7789f2c..0000000 --- a/examples/shaders/shaders_mesh_instancing.c +++ /dev/null @@ -1,147 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Mesh instancing -* -* Example originally created with raylib 3.7, last time updated with raylib 4.2 -* -* Example contributed by @seanpringle and reviewed by Max (@moliad) and Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2020-2023 @seanpringle, Max (@moliad) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - - -#include "raylib.h" -#include "raymath.h" - -#define RLIGHTS_IMPLEMENTATION -#include "rlights.h" - -#include // Required for: calloc(), free() - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -#define MAX_INSTANCES 10000 - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - mesh instancing"); - - // Define the camera to look into our 3d world - Camera camera = { 0 }; - camera.position = (Vector3){ -125.0f, 125.0f, -125.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) - camera.fovy = 45.0f; // Camera field-of-view Y - camera.projection = CAMERA_PERSPECTIVE; // Camera projection type - - // Define mesh to be instanced - Mesh cube = GenMeshCube(1.0f, 1.0f, 1.0f); - - // Define transforms to be uploaded to GPU for instances - Matrix *transforms = (Matrix *)RL_CALLOC(MAX_INSTANCES, sizeof(Matrix)); // Pre-multiplied transformations passed to rlgl - - // Translate and rotate cubes randomly - for (int i = 0; i < MAX_INSTANCES; i++) - { - Matrix translation = MatrixTranslate((float)GetRandomValue(-50, 50), (float)GetRandomValue(-50, 50), (float)GetRandomValue(-50, 50)); - Vector3 axis = Vector3Normalize((Vector3){ (float)GetRandomValue(0, 360), (float)GetRandomValue(0, 360), (float)GetRandomValue(0, 360) }); - float angle = (float)GetRandomValue(0, 10)*DEG2RAD; - Matrix rotation = MatrixRotate(axis, angle); - - transforms[i] = MatrixMultiply(rotation, translation); - } - - // Load lighting shader - Shader shader = LoadShader(TextFormat("resources/shaders/glsl%i/lighting_instancing.vs", GLSL_VERSION), - TextFormat("resources/shaders/glsl%i/lighting.fs", GLSL_VERSION)); - // Get shader locations - shader.locs[SHADER_LOC_MATRIX_MVP] = GetShaderLocation(shader, "mvp"); - shader.locs[SHADER_LOC_VECTOR_VIEW] = GetShaderLocation(shader, "viewPos"); - shader.locs[SHADER_LOC_MATRIX_MODEL] = GetShaderLocationAttrib(shader, "instanceTransform"); - - // Set shader value: ambient light level - int ambientLoc = GetShaderLocation(shader, "ambient"); - SetShaderValue(shader, ambientLoc, (float[4]){ 0.2f, 0.2f, 0.2f, 1.0f }, SHADER_UNIFORM_VEC4); - - // Create one light - CreateLight(LIGHT_DIRECTIONAL, (Vector3){ 50.0f, 50.0f, 0.0f }, Vector3Zero(), WHITE, shader); - - // NOTE: We are assigning the intancing shader to material.shader - // to be used on mesh drawing with DrawMeshInstanced() - Material matInstances = LoadMaterialDefault(); - matInstances.shader = shader; - matInstances.maps[MATERIAL_MAP_DIFFUSE].color = RED; - - // Load default material (using raylib intenral default shader) for non-instanced mesh drawing - // WARNING: Default shader enables vertex color attribute BUT GenMeshCube() does not generate vertex colors, so, - // when drawing the color attribute is disabled and a default color value is provided as input for thevertex attribute - Material matDefault = LoadMaterialDefault(); - matDefault.maps[MATERIAL_MAP_DIFFUSE].color = BLUE; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera, CAMERA_ORBITAL); - - // Update the light shader with the camera view position - float cameraPos[3] = { camera.position.x, camera.position.y, camera.position.z }; - SetShaderValue(shader, shader.locs[SHADER_LOC_VECTOR_VIEW], cameraPos, SHADER_UNIFORM_VEC3); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - // Draw cube mesh with default material (BLUE) - DrawMesh(cube, matDefault, MatrixTranslate(-10.0f, 0.0f, 0.0f)); - - // Draw meshes instanced using material containing instancing shader (RED + lighting), - // transforms[] for the instances should be provided, they are dynamically - // updated in GPU every frame, so we can animate the different mesh instances - DrawMeshInstanced(cube, matInstances, transforms, MAX_INSTANCES); - - // Draw cube mesh with default material (BLUE) - DrawMesh(cube, matDefault, MatrixTranslate(10.0f, 0.0f, 0.0f)); - - EndMode3D(); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - RL_FREE(transforms); // Free transforms - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shaders/shaders_model_shader.c b/examples/shaders/shaders_model_shader.c deleted file mode 100644 index e84ecbf..0000000 --- a/examples/shaders/shaders_model_shader.c +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Model shader -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3), to test this example -* on OpenGL ES 2.0 platforms (Android, Raspberry Pi, HTML5), use #version 100 shaders -* raylib comes with shaders ready for both versions, check raylib/shaders install folder -* -* Example originally created with raylib 1.3, last time updated with raylib 3.7 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - model shader"); - - // Define the camera to look into our 3d world - Camera camera = { 0 }; - camera.position = (Vector3){ 4.0f, 4.0f, 4.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 1.0f, -1.0f }; // Camera looking at point - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) - camera.fovy = 45.0f; // Camera field-of-view Y - camera.projection = CAMERA_PERSPECTIVE; // Camera projection type - - Model model = LoadModel("resources/models/watermill.obj"); // Load OBJ model - Texture2D texture = LoadTexture("resources/models/watermill_diffuse.png"); // Load model texture - - // Load shader for model - // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION)); - - model.materials[0].shader = shader; // Set shader effect to 3d model - model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; // Bind texture to model - - Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position - - DisableCursor(); // Limit cursor to relative movement inside the window - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera, CAMERA_FIRST_PERSON); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawModel(model, position, 0.2f, WHITE); // Draw 3d model with texture - - DrawGrid(10, 1.0f); // Draw a grid - - EndMode3D(); - - DrawText("(c) Watermill 3D model by Alberto Cano", screenWidth - 210, screenHeight - 20, 10, GRAY); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadShader(shader); // Unload shader - UnloadTexture(texture); // Unload texture - UnloadModel(model); // Unload model - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shaders/shaders_multi_sample2d.c b/examples/shaders/shaders_multi_sample2d.c deleted file mode 100644 index d6f8803..0000000 --- a/examples/shaders/shaders_multi_sample2d.c +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Multiple sample2D with default batch system -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3), to test this example -* on OpenGL ES 2.0 platforms (Android, Raspberry Pi, HTML5), use #version 100 shaders -* raylib comes with shaders ready for both versions, check raylib/shaders install folder -* -* Example originally created with raylib 3.5, last time updated with raylib 3.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2020-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib - multiple sample2D"); - - Image imRed = GenImageColor(800, 450, (Color){ 255, 0, 0, 255 }); - Texture texRed = LoadTextureFromImage(imRed); - UnloadImage(imRed); - - Image imBlue = GenImageColor(800, 450, (Color){ 0, 0, 255, 255 }); - Texture texBlue = LoadTextureFromImage(imBlue); - UnloadImage(imBlue); - - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/color_mix.fs", GLSL_VERSION)); - - // Get an additional sampler2D location to be enabled on drawing - int texBlueLoc = GetShaderLocation(shader, "texture1"); - - // Get shader uniform for divider - int dividerLoc = GetShaderLocation(shader, "divider"); - float dividerValue = 0.5f; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - if (IsKeyDown(KEY_RIGHT)) dividerValue += 0.01f; - else if (IsKeyDown(KEY_LEFT)) dividerValue -= 0.01f; - - if (dividerValue < 0.0f) dividerValue = 0.0f; - else if (dividerValue > 1.0f) dividerValue = 1.0f; - - SetShaderValue(shader, dividerLoc, ÷rValue, SHADER_UNIFORM_FLOAT); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginShaderMode(shader); - - // WARNING: Additional samplers are enabled for all draw calls in the batch, - // EndShaderMode() forces batch drawing and consequently resets active textures - // to let other sampler2D to be activated on consequent drawings (if required) - SetShaderValueTexture(shader, texBlueLoc, texBlue); - - // We are drawing texRed using default sampler2D texture0 but - // an additional texture units is enabled for texBlue (sampler2D texture1) - DrawTexture(texRed, 0, 0, WHITE); - - EndShaderMode(); - - DrawText("Use KEY_LEFT/KEY_RIGHT to move texture mixing in shader!", 80, GetScreenHeight() - 40, 20, RAYWHITE); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadShader(shader); // Unload shader - UnloadTexture(texRed); // Unload texture - UnloadTexture(texBlue); // Unload texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shaders/shaders_palette_switch.c b/examples/shaders/shaders_palette_switch.c deleted file mode 100644 index bb1eda4..0000000 --- a/examples/shaders/shaders_palette_switch.c +++ /dev/null @@ -1,152 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Color palette switch -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3), to test this example -* on OpenGL ES 2.0 platforms (Android, Raspberry Pi, HTML5), use #version 100 shaders -* raylib comes with shaders ready for both versions, check raylib/shaders install folder -* -* Example originally created with raylib 2.5, last time updated with raylib 3.7 -* -* Example contributed by Marco Lizza (@MarcoLizza) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 Marco Lizza (@MarcoLizza) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -#define MAX_PALETTES 3 -#define COLORS_PER_PALETTE 8 -#define VALUES_PER_COLOR 3 - -static const int palettes[MAX_PALETTES][COLORS_PER_PALETTE*VALUES_PER_COLOR] = { - { // 3-BIT RGB - 0, 0, 0, - 255, 0, 0, - 0, 255, 0, - 0, 0, 255, - 0, 255, 255, - 255, 0, 255, - 255, 255, 0, - 255, 255, 255, - }, - { // AMMO-8 (GameBoy-like) - 4, 12, 6, - 17, 35, 24, - 30, 58, 41, - 48, 93, 66, - 77, 128, 97, - 137, 162, 87, - 190, 220, 127, - 238, 255, 204, - }, - { // RKBV (2-strip film) - 21, 25, 26, - 138, 76, 88, - 217, 98, 117, - 230, 184, 193, - 69, 107, 115, - 75, 151, 166, - 165, 189, 194, - 255, 245, 247, - } -}; - -static const char *paletteText[] = { - "3-BIT RGB", - "AMMO-8 (GameBoy-like)", - "RKBV (2-strip film)" -}; - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - color palette switch"); - - // Load shader to be used on some parts drawing - // NOTE 1: Using GLSL 330 shader version, on OpenGL ES 2.0 use GLSL 100 shader version - // NOTE 2: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/palette_switch.fs", GLSL_VERSION)); - - // Get variable (uniform) location on the shader to connect with the program - // NOTE: If uniform variable could not be found in the shader, function returns -1 - int paletteLoc = GetShaderLocation(shader, "palette"); - - int currentPalette = 0; - int lineHeight = screenHeight/COLORS_PER_PALETTE; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - if (IsKeyPressed(KEY_RIGHT)) currentPalette++; - else if (IsKeyPressed(KEY_LEFT)) currentPalette--; - - if (currentPalette >= MAX_PALETTES) currentPalette = 0; - else if (currentPalette < 0) currentPalette = MAX_PALETTES - 1; - - // Send new value to the shader to be used on drawing. - // NOTE: We are sending RGB triplets w/o the alpha channel - SetShaderValueV(shader, paletteLoc, palettes[currentPalette], SHADER_UNIFORM_IVEC3, COLORS_PER_PALETTE); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginShaderMode(shader); - - for (int i = 0; i < COLORS_PER_PALETTE; i++) - { - // Draw horizontal screen-wide rectangles with increasing "palette index" - // The used palette index is encoded in the RGB components of the pixel - DrawRectangle(0, lineHeight*i, GetScreenWidth(), lineHeight, (Color){ i, i, i, 255 }); - } - - EndShaderMode(); - - DrawText("< >", 10, 10, 30, DARKBLUE); - DrawText("CURRENT PALETTE:", 60, 15, 20, RAYWHITE); - DrawText(paletteText[currentPalette], 300, 15, 20, RED); - - DrawFPS(700, 15); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadShader(shader); // Unload shader - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shaders/shaders_postprocessing.c b/examples/shaders/shaders_postprocessing.c deleted file mode 100644 index 7f6bd00..0000000 --- a/examples/shaders/shaders_postprocessing.c +++ /dev/null @@ -1,177 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Apply a postprocessing shader to a scene -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3), to test this example -* on OpenGL ES 2.0 platforms (Android, Raspberry Pi, HTML5), use #version 100 shaders -* raylib comes with shaders ready for both versions, check raylib/shaders install folder -* -* Example originally created with raylib 1.3, last time updated with raylib 4.0 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2015-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -#define MAX_POSTPRO_SHADERS 12 - -typedef enum { - FX_GRAYSCALE = 0, - FX_POSTERIZATION, - FX_DREAM_VISION, - FX_PIXELIZER, - FX_CROSS_HATCHING, - FX_CROSS_STITCHING, - FX_PREDATOR_VIEW, - FX_SCANLINES, - FX_FISHEYE, - FX_SOBEL, - FX_BLOOM, - FX_BLUR, - //FX_FXAA -} PostproShader; - -static const char *postproShaderText[] = { - "GRAYSCALE", - "POSTERIZATION", - "DREAM_VISION", - "PIXELIZER", - "CROSS_HATCHING", - "CROSS_STITCHING", - "PREDATOR_VIEW", - "SCANLINES", - "FISHEYE", - "SOBEL", - "BLOOM", - "BLUR", - //"FXAA" -}; - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - postprocessing shader"); - - // Define the camera to look into our 3d world - Camera camera = { 0 }; - camera.position = (Vector3){ 2.0f, 3.0f, 2.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera looking at point - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) - camera.fovy = 45.0f; // Camera field-of-view Y - camera.projection = CAMERA_PERSPECTIVE; // Camera projection type - - Model model = LoadModel("resources/models/church.obj"); // Load OBJ model - Texture2D texture = LoadTexture("resources/models/church_diffuse.png"); // Load model texture (diffuse map) - model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; // Set model diffuse texture - - Vector3 position = { 0.0f, 0.0f, 0.0f }; // Set model position - - // Load all postpro shaders - // NOTE 1: All postpro shader use the base vertex shader (DEFAULT_VERTEX_SHADER) - // NOTE 2: We load the correct shader depending on GLSL version - Shader shaders[MAX_POSTPRO_SHADERS] = { 0 }; - - // NOTE: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader - shaders[FX_GRAYSCALE] = LoadShader(0, TextFormat("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION)); - shaders[FX_POSTERIZATION] = LoadShader(0, TextFormat("resources/shaders/glsl%i/posterization.fs", GLSL_VERSION)); - shaders[FX_DREAM_VISION] = LoadShader(0, TextFormat("resources/shaders/glsl%i/dream_vision.fs", GLSL_VERSION)); - shaders[FX_PIXELIZER] = LoadShader(0, TextFormat("resources/shaders/glsl%i/pixelizer.fs", GLSL_VERSION)); - shaders[FX_CROSS_HATCHING] = LoadShader(0, TextFormat("resources/shaders/glsl%i/cross_hatching.fs", GLSL_VERSION)); - shaders[FX_CROSS_STITCHING] = LoadShader(0, TextFormat("resources/shaders/glsl%i/cross_stitching.fs", GLSL_VERSION)); - shaders[FX_PREDATOR_VIEW] = LoadShader(0, TextFormat("resources/shaders/glsl%i/predator.fs", GLSL_VERSION)); - shaders[FX_SCANLINES] = LoadShader(0, TextFormat("resources/shaders/glsl%i/scanlines.fs", GLSL_VERSION)); - shaders[FX_FISHEYE] = LoadShader(0, TextFormat("resources/shaders/glsl%i/fisheye.fs", GLSL_VERSION)); - shaders[FX_SOBEL] = LoadShader(0, TextFormat("resources/shaders/glsl%i/sobel.fs", GLSL_VERSION)); - shaders[FX_BLOOM] = LoadShader(0, TextFormat("resources/shaders/glsl%i/bloom.fs", GLSL_VERSION)); - shaders[FX_BLUR] = LoadShader(0, TextFormat("resources/shaders/glsl%i/blur.fs", GLSL_VERSION)); - - int currentShader = FX_GRAYSCALE; - - // Create a RenderTexture2D to be used for render to texture - RenderTexture2D target = LoadRenderTexture(screenWidth, screenHeight); - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera, CAMERA_ORBITAL); - - if (IsKeyPressed(KEY_RIGHT)) currentShader++; - else if (IsKeyPressed(KEY_LEFT)) currentShader--; - - if (currentShader >= MAX_POSTPRO_SHADERS) currentShader = 0; - else if (currentShader < 0) currentShader = MAX_POSTPRO_SHADERS - 1; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginTextureMode(target); // Enable drawing to texture - ClearBackground(RAYWHITE); // Clear texture background - - BeginMode3D(camera); // Begin 3d mode drawing - DrawModel(model, position, 0.1f, WHITE); // Draw 3d model with texture - DrawGrid(10, 1.0f); // Draw a grid - EndMode3D(); // End 3d mode drawing, returns to orthographic 2d mode - EndTextureMode(); // End drawing to texture (now we have a texture available for next passes) - - BeginDrawing(); - ClearBackground(RAYWHITE); // Clear screen background - - // Render generated texture using selected postprocessing shader - BeginShaderMode(shaders[currentShader]); - // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) - DrawTextureRec(target.texture, (Rectangle){ 0, 0, (float)target.texture.width, (float)-target.texture.height }, (Vector2){ 0, 0 }, WHITE); - EndShaderMode(); - - // Draw 2d shapes and text over drawn texture - DrawRectangle(0, 9, 580, 30, Fade(LIGHTGRAY, 0.7f)); - - DrawText("(c) Church 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY); - DrawText("CURRENT POSTPRO SHADER:", 10, 15, 20, BLACK); - DrawText(postproShaderText[currentShader], 330, 15, 20, RED); - DrawText("< >", 540, 10, 30, DARKBLUE); - DrawFPS(700, 15); - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - // Unload all postpro shaders - for (int i = 0; i < MAX_POSTPRO_SHADERS; i++) UnloadShader(shaders[i]); - - UnloadTexture(texture); // Unload texture - UnloadModel(model); // Unload model - UnloadRenderTexture(target); // Unload render texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shaders/shaders_shapes_textures.c b/examples/shaders/shaders_shapes_textures.c deleted file mode 100644 index d3ec8da..0000000 --- a/examples/shaders/shaders_shapes_textures.c +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Apply a shader to some shape or texture -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3), to test this example -* on OpenGL ES 2.0 platforms (Android, Raspberry Pi, HTML5), use #version 100 shaders -* raylib comes with shaders ready for both versions, check raylib/shaders install folder -* -* Example originally created with raylib 1.7, last time updated with raylib 3.7 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2015-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - shapes and texture shaders"); - - Texture2D fudesumi = LoadTexture("resources/fudesumi.png"); - - // Load shader to be used on some parts drawing - // NOTE 1: Using GLSL 330 shader version, on OpenGL ES 2.0 use GLSL 100 shader version - // NOTE 2: Defining 0 (NULL) for vertex shader forces usage of internal default vertex shader - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/grayscale.fs", GLSL_VERSION)); - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // TODO: Update your variables here - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - // Start drawing with default shader - - DrawText("USING DEFAULT SHADER", 20, 40, 10, RED); - - DrawCircle(80, 120, 35, DARKBLUE); - DrawCircleGradient(80, 220, 60, GREEN, SKYBLUE); - DrawCircleLines(80, 340, 80, DARKBLUE); - - - // Activate our custom shader to be applied on next shapes/textures drawings - BeginShaderMode(shader); - - DrawText("USING CUSTOM SHADER", 190, 40, 10, RED); - - DrawRectangle(250 - 60, 90, 120, 60, RED); - DrawRectangleGradientH(250 - 90, 170, 180, 130, MAROON, GOLD); - DrawRectangleLines(250 - 40, 320, 80, 60, ORANGE); - - // Activate our default shader for next drawings - EndShaderMode(); - - DrawText("USING DEFAULT SHADER", 370, 40, 10, RED); - - DrawTriangle((Vector2){430, 80}, - (Vector2){430 - 60, 150}, - (Vector2){430 + 60, 150}, VIOLET); - - DrawTriangleLines((Vector2){430, 160}, - (Vector2){430 - 20, 230}, - (Vector2){430 + 20, 230}, DARKBLUE); - - DrawPoly((Vector2){430, 320}, 6, 80, 0, BROWN); - - // Activate our custom shader to be applied on next shapes/textures drawings - BeginShaderMode(shader); - - DrawTexture(fudesumi, 500, -30, WHITE); // Using custom shader - - // Activate our default shader for next drawings - EndShaderMode(); - - DrawText("(c) Fudesumi sprite by Eiden Marsal", 380, screenHeight - 20, 10, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadShader(shader); // Unload shader - UnloadTexture(fudesumi); // Unload texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shaders/shaders_simple_mask.c b/examples/shaders/shaders_simple_mask.c deleted file mode 100644 index 6283ccb..0000000 --- a/examples/shaders/shaders_simple_mask.c +++ /dev/null @@ -1,150 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Simple shader mask -* -* Example originally created with raylib 2.5, last time updated with raylib 3.7 -* -* Example contributed by Chris Camacho (@chriscamacho) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 Chris Camacho (@chriscamacho) and Ramon Santamaria (@raysan5) -* -******************************************************************************************** -* -* After a model is loaded it has a default material, this material can be -* modified in place rather than creating one from scratch... -* While all of the maps have particular names, they can be used for any purpose -* except for three maps that are applied as cubic maps (see below) -* -********************************************************************************************/ - -#include "raylib.h" -#include "raymath.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - simple shader mask"); - - // Define the camera to look into our 3d world - Camera camera = { 0 }; - camera.position = (Vector3){ 0.0f, 1.0f, 2.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) - camera.fovy = 45.0f; // Camera field-of-view Y - camera.projection = CAMERA_PERSPECTIVE; // Camera projection type - - // Define our three models to show the shader on - Mesh torus = GenMeshTorus(0.3f, 1, 16, 32); - Model model1 = LoadModelFromMesh(torus); - - Mesh cube = GenMeshCube(0.8f,0.8f,0.8f); - Model model2 = LoadModelFromMesh(cube); - - // Generate model to be shaded just to see the gaps in the other two - Mesh sphere = GenMeshSphere(1, 16, 16); - Model model3 = LoadModelFromMesh(sphere); - - // Load the shader - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/mask.fs", GLSL_VERSION)); - - // Load and apply the diffuse texture (colour map) - Texture texDiffuse = LoadTexture("resources/plasma.png"); - model1.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texDiffuse; - model2.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texDiffuse; - - // Using MATERIAL_MAP_EMISSION as a spare slot to use for 2nd texture - // NOTE: Don't use MATERIAL_MAP_IRRADIANCE, MATERIAL_MAP_PREFILTER or MATERIAL_MAP_CUBEMAP as they are bound as cube maps - Texture texMask = LoadTexture("resources/mask.png"); - model1.materials[0].maps[MATERIAL_MAP_EMISSION].texture = texMask; - model2.materials[0].maps[MATERIAL_MAP_EMISSION].texture = texMask; - shader.locs[SHADER_LOC_MAP_EMISSION] = GetShaderLocation(shader, "mask"); - - // Frame is incremented each frame to animate the shader - int shaderFrame = GetShaderLocation(shader, "frame"); - - // Apply the shader to the two models - model1.materials[0].shader = shader; - model2.materials[0].shader = shader; - - int framesCounter = 0; - Vector3 rotation = { 0 }; // Model rotation angles - - DisableCursor(); // Limit cursor to relative movement inside the window - SetTargetFPS(60); // Set to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera, CAMERA_FIRST_PERSON); - - framesCounter++; - rotation.x += 0.01f; - rotation.y += 0.005f; - rotation.z -= 0.0025f; - - // Send frames counter to shader for animation - SetShaderValue(shader, shaderFrame, &framesCounter, SHADER_UNIFORM_INT); - - // Rotate one of the models - model1.transform = MatrixRotateXYZ(rotation); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(DARKBLUE); - - BeginMode3D(camera); - - DrawModel(model1, (Vector3){ 0.5f, 0.0f, 0.0f }, 1, WHITE); - DrawModelEx(model2, (Vector3){ -0.5f, 0.0f, 0.0f }, (Vector3){ 1.0f, 1.0f, 0.0f }, 50, (Vector3){ 1.0f, 1.0f, 1.0f }, WHITE); - DrawModel(model3,(Vector3){ 0.0f, 0.0f, -1.5f }, 1, WHITE); - DrawGrid(10, 1.0f); // Draw a grid - - EndMode3D(); - - DrawRectangle(16, 698, MeasureText(TextFormat("Frame: %i", framesCounter), 20) + 8, 42, BLUE); - DrawText(TextFormat("Frame: %i", framesCounter), 20, 700, 20, WHITE); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadModel(model1); - UnloadModel(model2); - UnloadModel(model3); - - UnloadTexture(texDiffuse); // Unload default diffuse texture - UnloadTexture(texMask); // Unload texture mask - - UnloadShader(shader); // Unload shader - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shaders/shaders_spotlight.c b/examples/shaders/shaders_spotlight.c deleted file mode 100644 index c96c983..0000000 --- a/examples/shaders/shaders_spotlight.c +++ /dev/null @@ -1,255 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Simple shader mask -* -* Example originally created with raylib 2.5, last time updated with raylib 3.7 -* -* Example contributed by Chris Camacho (@chriscamacho) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 Chris Camacho (@chriscamacho) and Ramon Santamaria (@raysan5) -* -******************************************************************************************** -* -* The shader makes alpha holes in the forground to give the appearance of a top -* down look at a spotlight casting a pool of light... -* -* The right hand side of the screen there is just enough light to see whats -* going on without the spot light, great for a stealth type game where you -* have to avoid the spotlights. -* -* The left hand side of the screen is in pitch dark except for where the spotlights are. -* -* Although this example doesn't scale like the letterbox example, you could integrate -* the two techniques, but by scaling the actual colour of the render texture rather -* than using alpha as a mask. -* -********************************************************************************************/ - -#include "raylib.h" - -#include "raymath.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -#define MAX_SPOTS 3 // NOTE: It must be the same as define in shader -#define MAX_STARS 400 - -// Spot data -typedef struct Spot { - Vector2 position; - Vector2 speed; - float inner; - float radius; - - // Shader locations - unsigned int positionLoc; - unsigned int innerLoc; - unsigned int radiusLoc; -} Spot; - -// Stars in the star field have a position and velocity -typedef struct Star { - Vector2 position; - Vector2 speed; -} Star; - -static void UpdateStar(Star *s); -static void ResetStar(Star *s); - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - shader spotlight"); - HideCursor(); - - Texture texRay = LoadTexture("resources/raysan.png"); - - Star stars[MAX_STARS] = { 0 }; - - for (int n = 0; n < MAX_STARS; n++) ResetStar(&stars[n]); - - // Progress all the stars on, so they don't all start in the centre - for (int m = 0; m < screenWidth/2.0; m++) - { - for (int n = 0; n < MAX_STARS; n++) UpdateStar(&stars[n]); - } - - int frameCounter = 0; - - // Use default vert shader - Shader shdrSpot = LoadShader(0, TextFormat("resources/shaders/glsl%i/spotlight.fs", GLSL_VERSION)); - - // Get the locations of spots in the shader - Spot spots[MAX_SPOTS]; - - for (int i = 0; i < MAX_SPOTS; i++) - { - char posName[32] = "spots[x].pos\0"; - char innerName[32] = "spots[x].inner\0"; - char radiusName[32] = "spots[x].radius\0"; - - posName[6] = '0' + i; - innerName[6] = '0' + i; - radiusName[6] = '0' + i; - - spots[i].positionLoc = GetShaderLocation(shdrSpot, posName); - spots[i].innerLoc = GetShaderLocation(shdrSpot, innerName); - spots[i].radiusLoc = GetShaderLocation(shdrSpot, radiusName); - - } - - // Tell the shader how wide the screen is so we can have - // a pitch black half and a dimly lit half. - unsigned int wLoc = GetShaderLocation(shdrSpot, "screenWidth"); - float sw = (float)GetScreenWidth(); - SetShaderValue(shdrSpot, wLoc, &sw, SHADER_UNIFORM_FLOAT); - - // Randomize the locations and velocities of the spotlights - // and initialize the shader locations - for (int i = 0; i < MAX_SPOTS; i++) - { - spots[i].position.x = (float)GetRandomValue(64, screenWidth - 64); - spots[i].position.y = (float)GetRandomValue(64, screenHeight - 64); - spots[i].speed = (Vector2){ 0, 0 }; - - while ((fabs(spots[i].speed.x) + fabs(spots[i].speed.y)) < 2) - { - spots[i].speed.x = GetRandomValue(-400, 40) / 10.0f; - spots[i].speed.y = GetRandomValue(-400, 40) / 10.0f; - } - - spots[i].inner = 28.0f * (i + 1); - spots[i].radius = 48.0f * (i + 1); - - SetShaderValue(shdrSpot, spots[i].positionLoc, &spots[i].position.x, SHADER_UNIFORM_VEC2); - SetShaderValue(shdrSpot, spots[i].innerLoc, &spots[i].inner, SHADER_UNIFORM_FLOAT); - SetShaderValue(shdrSpot, spots[i].radiusLoc, &spots[i].radius, SHADER_UNIFORM_FLOAT); - } - - SetTargetFPS(60); // Set to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - frameCounter++; - - // Move the stars, resetting them if the go offscreen - for (int n = 0; n < MAX_STARS; n++) UpdateStar(&stars[n]); - - // Update the spots, send them to the shader - for (int i = 0; i < MAX_SPOTS; i++) - { - if (i == 0) - { - Vector2 mp = GetMousePosition(); - spots[i].position.x = mp.x; - spots[i].position.y = screenHeight - mp.y; - } - else - { - spots[i].position.x += spots[i].speed.x; - spots[i].position.y += spots[i].speed.y; - - if (spots[i].position.x < 64) spots[i].speed.x = -spots[i].speed.x; - if (spots[i].position.x > (screenWidth - 64)) spots[i].speed.x = -spots[i].speed.x; - if (spots[i].position.y < 64) spots[i].speed.y = -spots[i].speed.y; - if (spots[i].position.y > (screenHeight - 64)) spots[i].speed.y = -spots[i].speed.y; - } - - SetShaderValue(shdrSpot, spots[i].positionLoc, &spots[i].position.x, SHADER_UNIFORM_VEC2); - } - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(DARKBLUE); - - // Draw stars and bobs - for (int n = 0; n < MAX_STARS; n++) - { - // Single pixel is just too small these days! - DrawRectangle((int)stars[n].position.x, (int)stars[n].position.y, 2, 2, WHITE); - } - - for (int i = 0; i < 16; i++) - { - DrawTexture(texRay, - (int)((screenWidth/2.0f) + cos((frameCounter + i*8)/51.45f)*(screenWidth/2.2f) - 32), - (int)((screenHeight/2.0f) + sin((frameCounter + i*8)/17.87f)*(screenHeight/4.2f)), WHITE); - } - - // Draw spot lights - BeginShaderMode(shdrSpot); - // Instead of a blank rectangle you could render here - // a render texture of the full screen used to do screen - // scaling (slight adjustment to shader would be required - // to actually pay attention to the colour!) - DrawRectangle(0, 0, screenWidth, screenHeight, WHITE); - EndShaderMode(); - - DrawFPS(10, 10); - - DrawText("Move the mouse!", 10, 30, 20, GREEN); - DrawText("Pitch Black", (int)(screenWidth*0.2f), screenHeight/2, 20, GREEN); - DrawText("Dark", (int)(screenWidth*.66f), screenHeight/2, 20, GREEN); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texRay); - UnloadShader(shdrSpot); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - - -static void ResetStar(Star *s) -{ - s->position = (Vector2){ GetScreenWidth()/2.0f, GetScreenHeight()/2.0f }; - - do - { - s->speed.x = (float)GetRandomValue(-1000, 1000)/100.0f; - s->speed.y = (float)GetRandomValue(-1000, 1000)/100.0f; - - } while (!(fabs(s->speed.x) + (fabs(s->speed.y) > 1))); - - s->position = Vector2Add(s->position, Vector2Multiply(s->speed, (Vector2){ 8.0f, 8.0f })); -} - -static void UpdateStar(Star *s) -{ - s->position = Vector2Add(s->position, s->speed); - - if ((s->position.x < 0) || (s->position.x > GetScreenWidth()) || - (s->position.y < 0) || (s->position.y > GetScreenHeight())) - { - ResetStar(s); - } -} - - diff --git a/examples/shaders/shaders_texture_drawing.c b/examples/shaders/shaders_texture_drawing.c deleted file mode 100644 index 006168d..0000000 --- a/examples/shaders/shaders_texture_drawing.c +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Texture drawing -* -* NOTE: This example illustrates how to draw into a blank texture using a shader -* -* Example originally created with raylib 2.0, last time updated with raylib 3.7 -* -* Example contributed by Michał Ciesielski and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 Michał Ciesielski and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - texture drawing"); - - Image imBlank = GenImageColor(1024, 1024, BLANK); - Texture2D texture = LoadTextureFromImage(imBlank); // Load blank texture to fill on shader - UnloadImage(imBlank); - - // NOTE: Using GLSL 330 shader version, on OpenGL ES 2.0 use GLSL 100 shader version - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/cubes_panning.fs", GLSL_VERSION)); - - float time = 0.0f; - int timeLoc = GetShaderLocation(shader, "uTime"); - SetShaderValue(shader, timeLoc, &time, SHADER_UNIFORM_FLOAT); - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - // ------------------------------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - time = (float)GetTime(); - SetShaderValue(shader, timeLoc, &time, SHADER_UNIFORM_FLOAT); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginShaderMode(shader); // Enable our custom shader for next shapes/textures drawings - DrawTexture(texture, 0, 0, WHITE); // Drawing BLANK texture, all magic happens on shader - EndShaderMode(); // Disable our custom shader, return to default shader - - DrawText("BACKGROUND is PAINTED and ANIMATED on SHADER!", 10, 10, 20, MAROON); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadShader(shader); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shaders/shaders_texture_outline.c b/examples/shaders/shaders_texture_outline.c deleted file mode 100644 index a28ab80..0000000 --- a/examples/shaders/shaders_texture_outline.c +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Apply an shdrOutline to a texture -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* Example originally created with raylib 4.0, last time updated with raylib 4.0 -* -* Example contributed by Samuel Skiff (@GoldenThumbs) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2021-2023 Samuel SKiff (@GoldenThumbs) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - Apply an outline to a texture"); - - Texture2D texture = LoadTexture("resources/fudesumi.png"); - - Shader shdrOutline = LoadShader(0, TextFormat("resources/shaders/glsl%i/outline.fs", GLSL_VERSION)); - - float outlineSize = 2.0f; - float outlineColor[4] = { 1.0f, 0.0f, 0.0f, 1.0f }; // Normalized RED color - float textureSize[2] = { (float)texture.width, (float)texture.height }; - - // Get shader locations - int outlineSizeLoc = GetShaderLocation(shdrOutline, "outlineSize"); - int outlineColorLoc = GetShaderLocation(shdrOutline, "outlineColor"); - int textureSizeLoc = GetShaderLocation(shdrOutline, "textureSize"); - - // Set shader values (they can be changed later) - SetShaderValue(shdrOutline, outlineSizeLoc, &outlineSize, SHADER_UNIFORM_FLOAT); - SetShaderValue(shdrOutline, outlineColorLoc, outlineColor, SHADER_UNIFORM_VEC4); - SetShaderValue(shdrOutline, textureSizeLoc, textureSize, SHADER_UNIFORM_VEC2); - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - outlineSize += GetMouseWheelMove(); - if (outlineSize < 1.0f) outlineSize = 1.0f; - - SetShaderValue(shdrOutline, outlineSizeLoc, &outlineSize, SHADER_UNIFORM_FLOAT); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginShaderMode(shdrOutline); - - DrawTexture(texture, GetScreenWidth()/2 - texture.width/2, -30, WHITE); - - EndShaderMode(); - - DrawText("Shader-based\ntexture\noutline", 10, 10, 20, GRAY); - - DrawText(TextFormat("Outline size: %i px", (int)outlineSize), 10, 120, 20, MAROON); - - DrawFPS(710, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); - UnloadShader(shdrOutline); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shaders/shaders_texture_waves.c b/examples/shaders/shaders_texture_waves.c deleted file mode 100644 index a087ec4..0000000 --- a/examples/shaders/shaders_texture_waves.c +++ /dev/null @@ -1,115 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Texture Waves -* -* NOTE: This example requires raylib OpenGL 3.3 or ES2 versions for shaders support, -* OpenGL 1.1 does not support shaders, recompile raylib to OpenGL 3.3 version. -* -* NOTE: Shaders used in this example are #version 330 (OpenGL 3.3), to test this example -* on OpenGL ES 2.0 platforms (Android, Raspberry Pi, HTML5), use #version 100 shaders -* raylib comes with shaders ready for both versions, check raylib/shaders install folder -* -* Example originally created with raylib 2.5, last time updated with raylib 3.7 -* -* Example contributed by Anata (@anatagawa) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 Anata (@anatagawa) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_DESKTOP) - #define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - #define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - texture waves"); - - // Load texture texture to apply shaders - Texture2D texture = LoadTexture("resources/space.png"); - - // Load shader and setup location points and values - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/wave.fs", GLSL_VERSION)); - - int secondsLoc = GetShaderLocation(shader, "secondes"); - int freqXLoc = GetShaderLocation(shader, "freqX"); - int freqYLoc = GetShaderLocation(shader, "freqY"); - int ampXLoc = GetShaderLocation(shader, "ampX"); - int ampYLoc = GetShaderLocation(shader, "ampY"); - int speedXLoc = GetShaderLocation(shader, "speedX"); - int speedYLoc = GetShaderLocation(shader, "speedY"); - - // Shader uniform values that can be updated at any time - float freqX = 25.0f; - float freqY = 25.0f; - float ampX = 5.0f; - float ampY = 5.0f; - float speedX = 8.0f; - float speedY = 8.0f; - - float screenSize[2] = { (float)GetScreenWidth(), (float)GetScreenHeight() }; - SetShaderValue(shader, GetShaderLocation(shader, "size"), &screenSize, SHADER_UNIFORM_VEC2); - SetShaderValue(shader, freqXLoc, &freqX, SHADER_UNIFORM_FLOAT); - SetShaderValue(shader, freqYLoc, &freqY, SHADER_UNIFORM_FLOAT); - SetShaderValue(shader, ampXLoc, &X, SHADER_UNIFORM_FLOAT); - SetShaderValue(shader, ampYLoc, &Y, SHADER_UNIFORM_FLOAT); - SetShaderValue(shader, speedXLoc, &speedX, SHADER_UNIFORM_FLOAT); - SetShaderValue(shader, speedYLoc, &speedY, SHADER_UNIFORM_FLOAT); - - float seconds = 0.0f; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - // ------------------------------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - seconds += GetFrameTime(); - - SetShaderValue(shader, secondsLoc, &seconds, SHADER_UNIFORM_FLOAT); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginShaderMode(shader); - - DrawTexture(texture, 0, 0, WHITE); - DrawTexture(texture, texture.width, 0, WHITE); - - EndShaderMode(); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadShader(shader); // Unload shader - UnloadTexture(texture); // Unload texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shaders/shaders_write_depth.c b/examples/shaders/shaders_write_depth.c deleted file mode 100644 index 048e297..0000000 --- a/examples/shaders/shaders_write_depth.c +++ /dev/null @@ -1,167 +0,0 @@ -/******************************************************************************************* -* -* raylib [shaders] example - Depth buffer writing -* -* Example originally created with raylib 4.2, last time updated with raylib 4.2 -* -* Example contributed by Buğra Alptekin Sarı (@BugraAlptekinSari) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2022-2023 Buğra Alptekin Sarı (@BugraAlptekinSari) -* -********************************************************************************************/ - -#include "raylib.h" - -#include "rlgl.h" - -#if defined(PLATFORM_DESKTOP) -#define GLSL_VERSION 330 -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB -#define GLSL_VERSION 100 -#endif - -//------------------------------------------------------------------------------------ -// Declare custom functions required for the example -//------------------------------------------------------------------------------------ -// Load custom render texture, create a writable depth texture buffer -static RenderTexture2D LoadRenderTextureDepthTex(int width, int height); - -// Unload render texture from GPU memory (VRAM) -static void UnloadRenderTextureDepthTex(RenderTexture2D target); - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - write depth buffer"); - - // The shader inverts the depth buffer by writing into it by `gl_FragDepth = 1 - gl_FragCoord.z;` - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/write_depth.fs", GLSL_VERSION)); - - // Use Customized function to create writable depth texture buffer - RenderTexture2D target = LoadRenderTextureDepthTex(screenWidth, screenHeight); - - // Define the camera to look into our 3d world - Camera camera = { - .position = (Vector3){ 2.0f, 2.0f, 3.0f }, // Camera position - .target = (Vector3){ 0.0f, 0.5f, 0.0f }, // Camera looking at point - .up = (Vector3){ 0.0f, 1.0f, 0.0f }, // Camera up vector (rotation towards target) - .fovy = 45.0f, // Camera field-of-view Y - .projection = CAMERA_PERSPECTIVE // Camera projection type - }; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera, CAMERA_ORBITAL); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - - // Draw into our custom render texture (framebuffer) - BeginTextureMode(target); - ClearBackground(WHITE); - - BeginMode3D(camera); - BeginShaderMode(shader); - DrawCubeWiresV((Vector3){ 0.0f, 0.5f, 1.0f }, (Vector3){ 1.0f, 1.0f, 1.0f }, RED); - DrawCubeV((Vector3){ 0.0f, 0.5f, 1.0f }, (Vector3){ 1.0f, 1.0f, 1.0f }, PURPLE); - DrawCubeWiresV((Vector3){ 0.0f, 0.5f, -1.0f }, (Vector3){ 1.0f, 1.0f, 1.0f }, DARKGREEN); - DrawCubeV((Vector3) { 0.0f, 0.5f, -1.0f }, (Vector3){ 1.0f, 1.0f, 1.0f }, YELLOW); - DrawGrid(10, 1.0f); - EndShaderMode(); - EndMode3D(); - EndTextureMode(); - - // Draw into screen our custom render texture - BeginDrawing(); - ClearBackground(RAYWHITE); - - DrawTextureRec(target.texture, (Rectangle) { 0, 0, screenWidth, -screenHeight }, (Vector2) { 0, 0 }, WHITE); - DrawFPS(10, 10); - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadRenderTextureDepthTex(target); - UnloadShader(shader); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//------------------------------------------------------------------------------------ -// Define custom functions required for the example -//------------------------------------------------------------------------------------ -// Load custom render texture, create a writable depth texture buffer -RenderTexture2D LoadRenderTextureDepthTex(int width, int height) -{ - RenderTexture2D target = { 0 }; - - target.id = rlLoadFramebuffer(width, height); // Load an empty framebuffer - - if (target.id > 0) - { - rlEnableFramebuffer(target.id); - - // Create color texture (default to RGBA) - target.texture.id = rlLoadTexture(0, width, height, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, 1); - target.texture.width = width; - target.texture.height = height; - target.texture.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8; - target.texture.mipmaps = 1; - - // Create depth texture buffer (instead of raylib default renderbuffer) - target.depth.id = rlLoadTextureDepth(width, height, false); - target.depth.width = width; - target.depth.height = height; - target.depth.format = 19; //DEPTH_COMPONENT_24BIT? - target.depth.mipmaps = 1; - - // Attach color texture and depth texture to FBO - rlFramebufferAttach(target.id, target.texture.id, RL_ATTACHMENT_COLOR_CHANNEL0, RL_ATTACHMENT_TEXTURE2D, 0); - rlFramebufferAttach(target.id, target.depth.id, RL_ATTACHMENT_DEPTH, RL_ATTACHMENT_TEXTURE2D, 0); - - // Check if fbo is complete with attachments (valid) - if (rlFramebufferComplete(target.id)) TRACELOG(LOG_INFO, "FBO: [ID %i] Framebuffer object created successfully", target.id); - - rlDisableFramebuffer(); - } - else TRACELOG(LOG_WARNING, "FBO: Framebuffer object can not be created"); - - return target; -} - -// Unload render texture from GPU memory (VRAM) -void UnloadRenderTextureDepthTex(RenderTexture2D target) -{ - if (target.id > 0) - { - // Color texture attached to FBO is deleted - rlUnloadTexture(target.texture.id); - rlUnloadTexture(target.depth.id); - - // NOTE: Depth texture is automatically - // queried and deleted before deleting framebuffer - rlUnloadFramebuffer(target.id); - } -} \ No newline at end of file diff --git a/examples/shapes/raygui.h b/examples/shapes/raygui.h deleted file mode 100644 index 112370a..0000000 --- a/examples/shapes/raygui.h +++ /dev/null @@ -1,4491 +0,0 @@ -/******************************************************************************************* -* -* raygui v3.2 - A simple and easy-to-use immediate-mode gui library -* -* DESCRIPTION: -* -* raygui is a tools-dev-focused immediate-mode-gui library based on raylib but also -* available as a standalone library, as long as input and drawing functions are provided. -* -* Controls provided: -* -* # Container/separators Controls -* - WindowBox --> StatusBar, Panel -* - GroupBox --> Line -* - Line -* - Panel --> StatusBar -* - ScrollPanel --> StatusBar -* -* # Basic Controls -* - Label -* - Button -* - LabelButton --> Label -* - Toggle -* - ToggleGroup --> Toggle -* - CheckBox -* - ComboBox -* - DropdownBox -* - TextBox -* - TextBoxMulti -* - ValueBox --> TextBox -* - Spinner --> Button, ValueBox -* - Slider -* - SliderBar --> Slider -* - ProgressBar -* - StatusBar -* - DummyRec -* - Grid -* -* # Advance Controls -* - ListView -* - ColorPicker --> ColorPanel, ColorBarHue -* - MessageBox --> Window, Label, Button -* - TextInputBox --> Window, Label, TextBox, Button -* -* It also provides a set of functions for styling the controls based on its properties (size, color). -* -* -* RAYGUI STYLE (guiStyle): -* -* raygui uses a global data array for all gui style properties (allocated on data segment by default), -* when a new style is loaded, it is loaded over the global style... but a default gui style could always be -* recovered with GuiLoadStyleDefault() function, that overwrites the current style to the default one -* -* The global style array size is fixed and depends on the number of controls and properties: -* -* static unsigned int guiStyle[RAYGUI_MAX_CONTROLS*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED)]; -* -* guiStyle size is by default: 16*(16 + 8) = 384*4 = 1536 bytes = 1.5 KB -* -* Note that the first set of BASE properties (by default guiStyle[0..15]) belong to the generic style -* used for all controls, when any of those base values is set, it is automatically populated to all -* controls, so, specific control values overwriting generic style should be set after base values. -* -* After the first BASE set we have the EXTENDED properties (by default guiStyle[16..23]), those -* properties are actually common to all controls and can not be overwritten individually (like BASE ones) -* Some of those properties are: TEXT_SIZE, TEXT_SPACING, LINE_COLOR, BACKGROUND_COLOR -* -* Custom control properties can be defined using the EXTENDED properties for each independent control. -* -* TOOL: rGuiStyler is a visual tool to customize raygui style. -* -* -* RAYGUI ICONS (guiIcons): -* -* raygui could use a global array containing icons data (allocated on data segment by default), -* a custom icons set could be loaded over this array using GuiLoadIcons(), but loaded icons set -* must be same RAYGUI_ICON_SIZE and no more than RAYGUI_ICON_MAX_ICONS will be loaded -* -* Every icon is codified in binary form, using 1 bit per pixel, so, every 16x16 icon -* requires 8 integers (16*16/32) to be stored in memory. -* -* When the icon is draw, actually one quad per pixel is drawn if the bit for that pixel is set. -* -* The global icons array size is fixed and depends on the number of icons and size: -* -* static unsigned int guiIcons[RAYGUI_ICON_MAX_ICONS*RAYGUI_ICON_DATA_ELEMENTS]; -* -* guiIcons size is by default: 256*(16*16/32) = 2048*4 = 8192 bytes = 8 KB -* -* TOOL: rGuiIcons is a visual tool to customize raygui icons. -* -* -* CONFIGURATION: -* -* #define RAYGUI_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 RAYGUI_STANDALONE -* Avoid raylib.h header inclusion in this file. Data types defined on raylib are defined -* internally in the library and input management and drawing functions must be provided by -* the user (check library implementation for further details). -* -* #define RAYGUI_NO_ICONS -* Avoid including embedded ricons data (256 icons, 16x16 pixels, 1-bit per pixel, 2KB) -* -* #define RAYGUI_CUSTOM_ICONS -* Includes custom ricons.h header defining a set of custom icons, -* this file can be generated using rGuiIcons tool -* -* -* VERSIONS HISTORY: -* 3.2 (22-May-2022) RENAMED: Some enum values, for unification, avoiding prefixes -* REMOVED: GuiScrollBar(), only internal -* REDESIGNED: GuiPanel() to support text parameter -* REDESIGNED: GuiScrollPanel() to support text parameter -* REDESIGNED: GuiColorPicker() to support text parameter -* REDESIGNED: GuiColorPanel() to support text parameter -* REDESIGNED: GuiColorBarAlpha() to support text parameter -* REDESIGNED: GuiColorBarHue() to support text parameter -* REDESIGNED: GuiTextInputBox() to support password -* 3.1 (12-Jan-2022) REVIEWED: Default style for consistency (aligned with rGuiLayout v2.5 tool) -* REVIEWED: GuiLoadStyle() to support compressed font atlas image data and unload previous textures -* REVIEWED: External icons usage logic -* REVIEWED: GuiLine() for centered alignment when including text -* RENAMED: Multiple controls properties definitions to prepend RAYGUI_ -* RENAMED: RICON_ references to RAYGUI_ICON_ for library consistency -* Projects updated and multiple tweaks -* 3.0 (04-Nov-2021) Integrated ricons data to avoid external file -* REDESIGNED: GuiTextBoxMulti() -* REMOVED: GuiImageButton*() -* Multiple minor tweaks and bugs corrected -* 2.9 (17-Mar-2021) REMOVED: Tooltip API -* 2.8 (03-May-2020) Centralized rectangles drawing to GuiDrawRectangle() -* 2.7 (20-Feb-2020) ADDED: Possible tooltips API -* 2.6 (09-Sep-2019) ADDED: GuiTextInputBox() -* REDESIGNED: GuiListView*(), GuiDropdownBox(), GuiSlider*(), GuiProgressBar(), GuiMessageBox() -* REVIEWED: GuiTextBox(), GuiSpinner(), GuiValueBox(), GuiLoadStyle() -* Replaced property INNER_PADDING by TEXT_PADDING, renamed some properties -* ADDED: 8 new custom styles ready to use -* Multiple minor tweaks and bugs corrected -* 2.5 (28-May-2019) Implemented extended GuiTextBox(), GuiValueBox(), GuiSpinner() -* 2.3 (29-Apr-2019) ADDED: rIcons auxiliar library and support for it, multiple controls reviewed -* Refactor all controls drawing mechanism to use control state -* 2.2 (05-Feb-2019) ADDED: GuiScrollBar(), GuiScrollPanel(), reviewed GuiListView(), removed Gui*Ex() controls -* 2.1 (26-Dec-2018) REDESIGNED: GuiCheckBox(), GuiComboBox(), GuiDropdownBox(), GuiToggleGroup() > Use combined text string -* REDESIGNED: Style system (breaking change) -* 2.0 (08-Nov-2018) ADDED: Support controls guiLock and custom fonts -* REVIEWED: GuiComboBox(), GuiListView()... -* 1.9 (09-Oct-2018) REVIEWED: GuiGrid(), GuiTextBox(), GuiTextBoxMulti(), GuiValueBox()... -* 1.8 (01-May-2018) Lot of rework and redesign to align with rGuiStyler and rGuiLayout -* 1.5 (21-Jun-2017) Working in an improved styles system -* 1.4 (15-Jun-2017) Rewritten all GUI functions (removed useless ones) -* 1.3 (12-Jun-2017) Complete redesign of style system -* 1.1 (01-Jun-2017) Complete review of the library -* 1.0 (07-Jun-2016) Converted to header-only by Ramon Santamaria. -* 0.9 (07-Mar-2016) Reviewed and tested by Albert Martos, Ian Eito, Sergio Martinez and Ramon Santamaria. -* 0.8 (27-Aug-2015) Initial release. Implemented by Kevin Gato, Daniel Nicolás and Ramon Santamaria. -* -* -* CONTRIBUTORS: -* -* Ramon Santamaria: Supervision, review, redesign, update and maintenance -* Vlad Adrian: Complete rewrite of GuiTextBox() to support extended features (2019) -* Sergio Martinez: Review, testing (2015) and redesign of multiple controls (2018) -* Adria Arranz: Testing and Implementation of additional controls (2018) -* Jordi Jorba: Testing and Implementation of additional controls (2018) -* Albert Martos: Review and testing of the library (2015) -* Ian Eito: Review and testing of the library (2015) -* Kevin Gato: Initial implementation of basic components (2014) -* Daniel Nicolas: Initial implementation of basic components (2014) -* -* -* LICENSE: zlib/libpng -* -* Copyright (c) 2014-2022 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 RAYGUI_H -#define RAYGUI_H - -#define RAYGUI_VERSION "3.2" - -#if !defined(RAYGUI_STANDALONE) - #include "raylib.h" -#endif - -// 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) - #define RAYGUIAPI __declspec(dllexport) // We are building the library as a Win32 shared library (.dll) - #elif defined(USE_LIBTYPE_SHARED) - #define RAYGUIAPI __declspec(dllimport) // We are using the library as a Win32 shared library (.dll) - #endif -#endif - -// Function specifiers definition -#ifndef RAYGUIAPI - #define RAYGUIAPI // Functions defined as 'extern' by default (implicit specifiers) -#endif - -//---------------------------------------------------------------------------------- -// Defines and Macros -//---------------------------------------------------------------------------------- -// Allow custom memory allocators -#ifndef RAYGUI_MALLOC - #define RAYGUI_MALLOC(sz) malloc(sz) -#endif -#ifndef RAYGUI_CALLOC - #define RAYGUI_CALLOC(n,sz) calloc(n,sz) -#endif -#ifndef RAYGUI_FREE - #define RAYGUI_FREE(p) free(p) -#endif - -// Simple log system to avoid printf() calls if required -// NOTE: Avoiding those calls, also avoids const strings memory usage -#define RAYGUI_SUPPORT_LOG_INFO -#if defined(RAYGUI_SUPPORT_LOG_INFO) - #define RAYGUI_LOG(...) printf(__VA_ARGS__) -#else - #define RAYGUI_LOG(...) -#endif - -//---------------------------------------------------------------------------------- -// Types and Structures Definition -// NOTE: Some types are required for RAYGUI_STANDALONE usage -//---------------------------------------------------------------------------------- -#if defined(RAYGUI_STANDALONE) - #ifndef __cplusplus - // Boolean type - #ifndef true - typedef enum { false, true } bool; - #endif - #endif - - // Vector2 type - typedef struct Vector2 { - float x; - float y; - } Vector2; - - // Vector3 type // -- ConvertHSVtoRGB(), ConvertRGBtoHSV() - typedef struct Vector3 { - float x; - float y; - float z; - } Vector3; - - // Color type, RGBA (32bit) - typedef struct Color { - unsigned char r; - unsigned char g; - unsigned char b; - unsigned char a; - } Color; - - // Rectangle type - typedef struct Rectangle { - float x; - float y; - float width; - float height; - } Rectangle; - - // TODO: Texture2D type is very coupled to raylib, required by Font type - // It should be redesigned to be provided by user - typedef struct Texture2D { - unsigned int id; // OpenGL texture id - int width; // Texture base width - int height; // Texture base height - int mipmaps; // Mipmap levels, 1 by default - int format; // Data format (PixelFormat type) - } Texture2D; - - // GlyphInfo, font characters glyphs info - typedef struct GlyphInfo { - int value; // Character value (Unicode) - int offsetX; // Character offset X when drawing - int offsetY; // Character offset Y when drawing - int advanceX; // Character advance position X - Image image; // Character image data - } GlyphInfo; - - // TODO: Font type is very coupled to raylib, mostly required by GuiLoadStyle() - // It should be redesigned to be provided by user - typedef struct Font { - int baseSize; // Base size (default chars height) - int glyphCount; // Number of characters - Texture2D texture; // Characters texture atlas - Rectangle *recs; // Characters rectangles in texture - GlyphInfo *chars; // Characters info data - } Font; -#endif - -// Style property -typedef struct GuiStyleProp { - unsigned short controlId; - unsigned short propertyId; - unsigned int propertyValue; -} GuiStyleProp; - -// Gui control state -typedef enum { - STATE_NORMAL = 0, - STATE_FOCUSED, - STATE_PRESSED, - STATE_DISABLED, -} GuiState; - -// Gui control text alignment -typedef enum { - TEXT_ALIGN_LEFT = 0, - TEXT_ALIGN_CENTER, - TEXT_ALIGN_RIGHT, -} GuiTextAlignment; - -// Gui controls -typedef enum { - // Default -> populates to all controls when set - DEFAULT = 0, - // Basic controls - LABEL, // Used also for: LABELBUTTON - BUTTON, - TOGGLE, // Used also for: TOGGLEGROUP - SLIDER, // Used also for: SLIDERBAR - PROGRESSBAR, - CHECKBOX, - COMBOBOX, - DROPDOWNBOX, - TEXTBOX, // Used also for: TEXTBOXMULTI - VALUEBOX, - SPINNER, // Uses: BUTTON, VALUEBOX - LISTVIEW, - COLORPICKER, - SCROLLBAR, - STATUSBAR -} GuiControl; - -// Gui base properties for every control -// NOTE: RAYGUI_MAX_PROPS_BASE properties (by default 16 properties) -typedef enum { - BORDER_COLOR_NORMAL = 0, - BASE_COLOR_NORMAL, - TEXT_COLOR_NORMAL, - BORDER_COLOR_FOCUSED, - BASE_COLOR_FOCUSED, - TEXT_COLOR_FOCUSED, - BORDER_COLOR_PRESSED, - BASE_COLOR_PRESSED, - TEXT_COLOR_PRESSED, - BORDER_COLOR_DISABLED, - BASE_COLOR_DISABLED, - TEXT_COLOR_DISABLED, - BORDER_WIDTH, - TEXT_PADDING, - TEXT_ALIGNMENT, - RESERVED -} GuiControlProperty; - -// Gui extended properties depend on control -// NOTE: RAYGUI_MAX_PROPS_EXTENDED properties (by default 8 properties) -//---------------------------------------------------------------------------------- - -// DEFAULT extended properties -// NOTE: Those properties are common to all controls or global -typedef enum { - TEXT_SIZE = 16, // Text size (glyphs max height) - TEXT_SPACING, // Text spacing between glyphs - LINE_COLOR, // Line control color - BACKGROUND_COLOR, // Background color -} GuiDefaultProperty; - -// Label -//typedef enum { } GuiLabelProperty; - -// Button/Spinner -//typedef enum { } GuiButtonProperty; - -// Toggle/ToggleGroup -typedef enum { - GROUP_PADDING = 16, // ToggleGroup separation between toggles -} GuiToggleProperty; - -// Slider/SliderBar -typedef enum { - SLIDER_WIDTH = 16, // Slider size of internal bar - SLIDER_PADDING // Slider/SliderBar internal bar padding -} GuiSliderProperty; - -// ProgressBar -typedef enum { - PROGRESS_PADDING = 16, // ProgressBar internal padding -} GuiProgressBarProperty; - -// ScrollBar -typedef enum { - ARROWS_SIZE = 16, - ARROWS_VISIBLE, - SCROLL_SLIDER_PADDING, // (SLIDERBAR, SLIDER_PADDING) - SCROLL_SLIDER_SIZE, - SCROLL_PADDING, - SCROLL_SPEED, -} GuiScrollBarProperty; - -// CheckBox -typedef enum { - CHECK_PADDING = 16 // CheckBox internal check padding -} GuiCheckBoxProperty; - -// ComboBox -typedef enum { - COMBO_BUTTON_WIDTH = 16, // ComboBox right button width - COMBO_BUTTON_SPACING // ComboBox button separation -} GuiComboBoxProperty; - -// DropdownBox -typedef enum { - ARROW_PADDING = 16, // DropdownBox arrow separation from border and items - DROPDOWN_ITEMS_SPACING // DropdownBox items separation -} GuiDropdownBoxProperty; - -// TextBox/TextBoxMulti/ValueBox/Spinner -typedef enum { - TEXT_INNER_PADDING = 16, // TextBox/TextBoxMulti/ValueBox/Spinner inner text padding - TEXT_LINES_SPACING, // TextBoxMulti lines separation -} GuiTextBoxProperty; - -// Spinner -typedef enum { - SPIN_BUTTON_WIDTH = 16, // Spinner left/right buttons width - SPIN_BUTTON_SPACING, // Spinner buttons separation -} GuiSpinnerProperty; - -// ListView -typedef enum { - LIST_ITEMS_HEIGHT = 16, // ListView items height - LIST_ITEMS_SPACING, // ListView items separation - SCROLLBAR_WIDTH, // ListView scrollbar size (usually width) - SCROLLBAR_SIDE, // ListView scrollbar side (0-left, 1-right) -} GuiListViewProperty; - -// ColorPicker -typedef enum { - COLOR_SELECTOR_SIZE = 16, - HUEBAR_WIDTH, // ColorPicker right hue bar width - HUEBAR_PADDING, // ColorPicker right hue bar separation from panel - HUEBAR_SELECTOR_HEIGHT, // ColorPicker right hue bar selector height - HUEBAR_SELECTOR_OVERFLOW // ColorPicker right hue bar selector overflow -} GuiColorPickerProperty; - -#define SCROLLBAR_LEFT_SIDE 0 -#define SCROLLBAR_RIGHT_SIDE 1 - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -// ... - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- - -#if defined(__cplusplus) -extern "C" { // Prevents name mangling of functions -#endif - -// Global gui state control functions -RAYGUIAPI void GuiEnable(void); // Enable gui controls (global state) -RAYGUIAPI void GuiDisable(void); // Disable gui controls (global state) -RAYGUIAPI void GuiLock(void); // Lock gui controls (global state) -RAYGUIAPI void GuiUnlock(void); // Unlock gui controls (global state) -RAYGUIAPI bool GuiIsLocked(void); // Check if gui is locked (global state) -RAYGUIAPI void GuiFade(float alpha); // Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f -RAYGUIAPI void GuiSetState(int state); // Set gui state (global state) -RAYGUIAPI int GuiGetState(void); // Get gui state (global state) - -// Font set/get functions -RAYGUIAPI void GuiSetFont(Font font); // Set gui custom font (global state) -RAYGUIAPI Font GuiGetFont(void); // Get gui custom font (global state) - -// Style set/get functions -RAYGUIAPI void GuiSetStyle(int control, int property, int value); // Set one style property -RAYGUIAPI int GuiGetStyle(int control, int property); // Get one style property - -// Container/separator controls, useful for controls organization -RAYGUIAPI bool GuiWindowBox(Rectangle bounds, const char *title); // Window Box control, shows a window that can be closed -RAYGUIAPI void GuiGroupBox(Rectangle bounds, const char *text); // Group Box control with text name -RAYGUIAPI void GuiLine(Rectangle bounds, const char *text); // Line separator control, could contain text -RAYGUIAPI void GuiPanel(Rectangle bounds, const char *text); // Panel control, useful to group controls -RAYGUIAPI Rectangle GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector2 *scroll); // Scroll Panel control - -// Basic controls set -RAYGUIAPI void GuiLabel(Rectangle bounds, const char *text); // Label control, shows text -RAYGUIAPI bool GuiButton(Rectangle bounds, const char *text); // Button control, returns true when clicked -RAYGUIAPI bool GuiLabelButton(Rectangle bounds, const char *text); // Label button control, show true when clicked -RAYGUIAPI bool GuiToggle(Rectangle bounds, const char *text, bool active); // Toggle Button control, returns true when active -RAYGUIAPI int GuiToggleGroup(Rectangle bounds, const char *text, int active); // Toggle Group control, returns active toggle index -RAYGUIAPI bool GuiCheckBox(Rectangle bounds, const char *text, bool checked); // Check Box control, returns true when active -RAYGUIAPI int GuiComboBox(Rectangle bounds, const char *text, int active); // Combo Box control, returns selected item index -RAYGUIAPI bool GuiDropdownBox(Rectangle bounds, const char *text, int *active, bool editMode); // Dropdown Box control, returns selected item -RAYGUIAPI bool GuiSpinner(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode); // Spinner control, returns selected value -RAYGUIAPI bool GuiValueBox(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode); // Value Box control, updates input text with numbers -RAYGUIAPI bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode); // Text Box control, updates input text -RAYGUIAPI bool GuiTextBoxMulti(Rectangle bounds, char *text, int textSize, bool editMode); // Text Box control with multiple lines -RAYGUIAPI float GuiSlider(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue); // Slider control, returns selected value -RAYGUIAPI float GuiSliderBar(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue); // Slider Bar control, returns selected value -RAYGUIAPI float GuiProgressBar(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue); // Progress Bar control, shows current progress value -RAYGUIAPI void GuiStatusBar(Rectangle bounds, const char *text); // Status Bar control, shows info text -RAYGUIAPI void GuiDummyRec(Rectangle bounds, const char *text); // Dummy control for placeholders -RAYGUIAPI Vector2 GuiGrid(Rectangle bounds, const char *text, float spacing, int subdivs); // Grid control, returns mouse cell position - -// Advance controls set -RAYGUIAPI int GuiListView(Rectangle bounds, const char *text, int *scrollIndex, int active); // List View control, returns selected list item index -RAYGUIAPI int GuiListViewEx(Rectangle bounds, const char **text, int count, int *focus, int *scrollIndex, int active); // List View with extended parameters -RAYGUIAPI int GuiMessageBox(Rectangle bounds, const char *title, const char *message, const char *buttons); // Message Box control, displays a message -RAYGUIAPI int GuiTextInputBox(Rectangle bounds, const char *title, const char *message, const char *buttons, char *text, int textMaxSize, int *secretViewActive); // Text Input Box control, ask for text, supports secret -RAYGUIAPI Color GuiColorPicker(Rectangle bounds, const char *text, Color color); // Color Picker control (multiple color controls) -RAYGUIAPI Color GuiColorPanel(Rectangle bounds, const char *text, Color color); // Color Panel control -RAYGUIAPI float GuiColorBarAlpha(Rectangle bounds, const char *text, float alpha); // Color Bar Alpha control -RAYGUIAPI float GuiColorBarHue(Rectangle bounds, const char *text, float value); // Color Bar Hue control - -// Styles loading functions -RAYGUIAPI void GuiLoadStyle(const char *fileName); // Load style file over global style variable (.rgs) -RAYGUIAPI void GuiLoadStyleDefault(void); // Load style default over global style - -// Icons functionality -RAYGUIAPI const char *GuiIconText(int iconId, const char *text); // Get text with icon id prepended (if supported) - -#if !defined(RAYGUI_NO_ICONS) -RAYGUIAPI void GuiDrawIcon(int iconId, int posX, int posY, int pixelSize, Color color); - -RAYGUIAPI unsigned int *GuiGetIcons(void); // Get full icons data pointer -RAYGUIAPI unsigned int *GuiGetIconData(int iconId); // Get icon bit data -RAYGUIAPI void GuiSetIconData(int iconId, unsigned int *data); // Set icon bit data -RAYGUIAPI void GuiSetIconScale(unsigned int scale); // Set icon scale (1 by default) - -RAYGUIAPI void GuiSetIconPixel(int iconId, int x, int y); // Set icon pixel value -RAYGUIAPI void GuiClearIconPixel(int iconId, int x, int y); // Clear icon pixel value -RAYGUIAPI bool GuiCheckIconPixel(int iconId, int x, int y); // Check icon pixel value - -#if !defined(RAYGUI_CUSTOM_ICONS) -//---------------------------------------------------------------------------------- -// Icons enumeration -//---------------------------------------------------------------------------------- -typedef enum { - ICON_NONE = 0, - ICON_FOLDER_FILE_OPEN = 1, - ICON_FILE_SAVE_CLASSIC = 2, - ICON_FOLDER_OPEN = 3, - ICON_FOLDER_SAVE = 4, - ICON_FILE_OPEN = 5, - ICON_FILE_SAVE = 6, - ICON_FILE_EXPORT = 7, - ICON_FILE_ADD = 8, - ICON_FILE_DELETE = 9, - ICON_FILETYPE_TEXT = 10, - ICON_FILETYPE_AUDIO = 11, - ICON_FILETYPE_IMAGE = 12, - ICON_FILETYPE_PLAY = 13, - ICON_FILETYPE_VIDEO = 14, - ICON_FILETYPE_INFO = 15, - ICON_FILE_COPY = 16, - ICON_FILE_CUT = 17, - ICON_FILE_PASTE = 18, - ICON_CURSOR_HAND = 19, - ICON_CURSOR_POINTER = 20, - ICON_CURSOR_CLASSIC = 21, - ICON_PENCIL = 22, - ICON_PENCIL_BIG = 23, - ICON_BRUSH_CLASSIC = 24, - ICON_BRUSH_PAINTER = 25, - ICON_WATER_DROP = 26, - ICON_COLOR_PICKER = 27, - ICON_RUBBER = 28, - ICON_COLOR_BUCKET = 29, - ICON_TEXT_T = 30, - ICON_TEXT_A = 31, - ICON_SCALE = 32, - ICON_RESIZE = 33, - ICON_FILTER_POINT = 34, - ICON_FILTER_BILINEAR = 35, - ICON_CROP = 36, - ICON_CROP_ALPHA = 37, - ICON_SQUARE_TOGGLE = 38, - ICON_SYMMETRY = 39, - ICON_SYMMETRY_HORIZONTAL = 40, - ICON_SYMMETRY_VERTICAL = 41, - ICON_LENS = 42, - ICON_LENS_BIG = 43, - ICON_EYE_ON = 44, - ICON_EYE_OFF = 45, - ICON_FILTER_TOP = 46, - ICON_FILTER = 47, - ICON_TARGET_POINT = 48, - ICON_TARGET_SMALL = 49, - ICON_TARGET_BIG = 50, - ICON_TARGET_MOVE = 51, - ICON_CURSOR_MOVE = 52, - ICON_CURSOR_SCALE = 53, - ICON_CURSOR_SCALE_RIGHT = 54, - ICON_CURSOR_SCALE_LEFT = 55, - ICON_UNDO = 56, - ICON_REDO = 57, - ICON_REREDO = 58, - ICON_MUTATE = 59, - ICON_ROTATE = 60, - ICON_REPEAT = 61, - ICON_SHUFFLE = 62, - ICON_EMPTYBOX = 63, - ICON_TARGET = 64, - ICON_TARGET_SMALL_FILL = 65, - ICON_TARGET_BIG_FILL = 66, - ICON_TARGET_MOVE_FILL = 67, - ICON_CURSOR_MOVE_FILL = 68, - ICON_CURSOR_SCALE_FILL = 69, - ICON_CURSOR_SCALE_RIGHT_FILL = 70, - ICON_CURSOR_SCALE_LEFT_FILL = 71, - ICON_UNDO_FILL = 72, - ICON_REDO_FILL = 73, - ICON_REREDO_FILL = 74, - ICON_MUTATE_FILL = 75, - ICON_ROTATE_FILL = 76, - ICON_REPEAT_FILL = 77, - ICON_SHUFFLE_FILL = 78, - ICON_EMPTYBOX_SMALL = 79, - ICON_BOX = 80, - ICON_BOX_TOP = 81, - ICON_BOX_TOP_RIGHT = 82, - ICON_BOX_RIGHT = 83, - ICON_BOX_BOTTOM_RIGHT = 84, - ICON_BOX_BOTTOM = 85, - ICON_BOX_BOTTOM_LEFT = 86, - ICON_BOX_LEFT = 87, - ICON_BOX_TOP_LEFT = 88, - ICON_BOX_CENTER = 89, - ICON_BOX_CIRCLE_MASK = 90, - ICON_POT = 91, - ICON_ALPHA_MULTIPLY = 92, - ICON_ALPHA_CLEAR = 93, - ICON_DITHERING = 94, - ICON_MIPMAPS = 95, - ICON_BOX_GRID = 96, - ICON_GRID = 97, - ICON_BOX_CORNERS_SMALL = 98, - ICON_BOX_CORNERS_BIG = 99, - ICON_FOUR_BOXES = 100, - ICON_GRID_FILL = 101, - ICON_BOX_MULTISIZE = 102, - ICON_ZOOM_SMALL = 103, - ICON_ZOOM_MEDIUM = 104, - ICON_ZOOM_BIG = 105, - ICON_ZOOM_ALL = 106, - ICON_ZOOM_CENTER = 107, - ICON_BOX_DOTS_SMALL = 108, - ICON_BOX_DOTS_BIG = 109, - ICON_BOX_CONCENTRIC = 110, - ICON_BOX_GRID_BIG = 111, - ICON_OK_TICK = 112, - ICON_CROSS = 113, - ICON_ARROW_LEFT = 114, - ICON_ARROW_RIGHT = 115, - ICON_ARROW_DOWN = 116, - ICON_ARROW_UP = 117, - ICON_ARROW_LEFT_FILL = 118, - ICON_ARROW_RIGHT_FILL = 119, - ICON_ARROW_DOWN_FILL = 120, - ICON_ARROW_UP_FILL = 121, - ICON_AUDIO = 122, - ICON_FX = 123, - ICON_WAVE = 124, - ICON_WAVE_SINUS = 125, - ICON_WAVE_SQUARE = 126, - ICON_WAVE_TRIANGULAR = 127, - ICON_CROSS_SMALL = 128, - ICON_PLAYER_PREVIOUS = 129, - ICON_PLAYER_PLAY_BACK = 130, - ICON_PLAYER_PLAY = 131, - ICON_PLAYER_PAUSE = 132, - ICON_PLAYER_STOP = 133, - ICON_PLAYER_NEXT = 134, - ICON_PLAYER_RECORD = 135, - ICON_MAGNET = 136, - ICON_LOCK_CLOSE = 137, - ICON_LOCK_OPEN = 138, - ICON_CLOCK = 139, - ICON_TOOLS = 140, - ICON_GEAR = 141, - ICON_GEAR_BIG = 142, - ICON_BIN = 143, - ICON_HAND_POINTER = 144, - ICON_LASER = 145, - ICON_COIN = 146, - ICON_EXPLOSION = 147, - ICON_1UP = 148, - ICON_PLAYER = 149, - ICON_PLAYER_JUMP = 150, - ICON_KEY = 151, - ICON_DEMON = 152, - ICON_TEXT_POPUP = 153, - ICON_GEAR_EX = 154, - ICON_CRACK = 155, - ICON_CRACK_POINTS = 156, - ICON_STAR = 157, - ICON_DOOR = 158, - ICON_EXIT = 159, - ICON_MODE_2D = 160, - ICON_MODE_3D = 161, - ICON_CUBE = 162, - ICON_CUBE_FACE_TOP = 163, - ICON_CUBE_FACE_LEFT = 164, - ICON_CUBE_FACE_FRONT = 165, - ICON_CUBE_FACE_BOTTOM = 166, - ICON_CUBE_FACE_RIGHT = 167, - ICON_CUBE_FACE_BACK = 168, - ICON_CAMERA = 169, - ICON_SPECIAL = 170, - ICON_LINK_NET = 171, - ICON_LINK_BOXES = 172, - ICON_LINK_MULTI = 173, - ICON_LINK = 174, - ICON_LINK_BROKE = 175, - ICON_TEXT_NOTES = 176, - ICON_NOTEBOOK = 177, - ICON_SUITCASE = 178, - ICON_SUITCASE_ZIP = 179, - ICON_MAILBOX = 180, - ICON_MONITOR = 181, - ICON_PRINTER = 182, - ICON_PHOTO_CAMERA = 183, - ICON_PHOTO_CAMERA_FLASH = 184, - ICON_HOUSE = 185, - ICON_HEART = 186, - ICON_CORNER = 187, - ICON_VERTICAL_BARS = 188, - ICON_VERTICAL_BARS_FILL = 189, - ICON_LIFE_BARS = 190, - ICON_INFO = 191, - ICON_CROSSLINE = 192, - ICON_HELP = 193, - ICON_FILETYPE_ALPHA = 194, - ICON_FILETYPE_HOME = 195, - ICON_LAYERS_VISIBLE = 196, - ICON_LAYERS = 197, - ICON_WINDOW = 198, - ICON_HIDPI = 199, - ICON_FILETYPE_BINARY = 200, - ICON_HEX = 201, - ICON_SHIELD = 202, - ICON_FILE_NEW = 203, - ICON_FOLDER_ADD = 204, - ICON_ALARM = 205, - ICON_206 = 206, - ICON_207 = 207, - ICON_208 = 208, - ICON_209 = 209, - ICON_210 = 210, - ICON_211 = 211, - ICON_212 = 212, - ICON_213 = 213, - ICON_214 = 214, - ICON_215 = 215, - ICON_216 = 216, - ICON_217 = 217, - ICON_218 = 218, - ICON_219 = 219, - ICON_220 = 220, - ICON_221 = 221, - ICON_222 = 222, - ICON_223 = 223, - ICON_224 = 224, - ICON_225 = 225, - ICON_226 = 226, - ICON_227 = 227, - ICON_228 = 228, - ICON_229 = 229, - ICON_230 = 230, - ICON_231 = 231, - ICON_232 = 232, - ICON_233 = 233, - ICON_234 = 234, - ICON_235 = 235, - ICON_236 = 236, - ICON_237 = 237, - ICON_238 = 238, - ICON_239 = 239, - ICON_240 = 240, - ICON_241 = 241, - ICON_242 = 242, - ICON_243 = 243, - ICON_244 = 244, - ICON_245 = 245, - ICON_246 = 246, - ICON_247 = 247, - ICON_248 = 248, - ICON_249 = 249, - ICON_250 = 250, - ICON_251 = 251, - ICON_252 = 252, - ICON_253 = 253, - ICON_254 = 254, - ICON_255 = 255, -} GuiIconName; -#endif - -#endif - -#if defined(__cplusplus) -} // Prevents name mangling of functions -#endif - -#endif // RAYGUI_H - -/*********************************************************************************** -* -* RAYGUI IMPLEMENTATION -* -************************************************************************************/ - -#if defined(RAYGUI_IMPLEMENTATION) - -#include // Required for: FILE, fopen(), fclose(), fprintf(), feof(), fscanf(), vsprintf() [GuiLoadStyle(), GuiLoadIcons()] -#include // Required for: malloc(), calloc(), free() [GuiLoadStyle(), GuiLoadIcons()] -#include // Required for: strlen() [GuiTextBox(), GuiTextBoxMulti(), GuiValueBox()], memset(), memcpy() -#include // Required for: va_list, va_start(), vfprintf(), va_end() [TextFormat()] -#include // Required for: roundf() [GuiColorPicker()] - -#ifdef __cplusplus - #define RAYGUI_CLITERAL(name) name -#else - #define RAYGUI_CLITERAL(name) (name) -#endif - -#if !defined(RAYGUI_NO_ICONS) && !defined(RAYGUI_CUSTOM_ICONS) - -// Embedded icons, no external file provided -#define RAYGUI_ICON_SIZE 16 // Size of icons in pixels (squared) -#define RAYGUI_ICON_MAX_ICONS 256 // Maximum number of icons -#define RAYGUI_ICON_MAX_NAME_LENGTH 32 // Maximum length of icon name id - -// Icons data is defined by bit array (every bit represents one pixel) -// Those arrays are stored as unsigned int data arrays, so, -// every array element defines 32 pixels (bits) of information -// One icon is defined by 8 int, (8 int * 32 bit = 256 bit = 16*16 pixels) -// NOTE: Number of elemens depend on RAYGUI_ICON_SIZE (by default 16x16 pixels) -#define RAYGUI_ICON_DATA_ELEMENTS (RAYGUI_ICON_SIZE*RAYGUI_ICON_SIZE/32) - -//---------------------------------------------------------------------------------- -// Icons data for all gui possible icons (allocated on data segment by default) -// -// NOTE 1: Every icon is codified in binary form, using 1 bit per pixel, so, -// every 16x16 icon requires 8 integers (16*16/32) to be stored -// -// NOTE 2: A different icon set could be loaded over this array using GuiLoadIcons(), -// but loaded icons set must be same RAYGUI_ICON_SIZE and no more than RAYGUI_ICON_MAX_ICONS -// -// guiIcons size is by default: 256*(16*16/32) = 2048*4 = 8192 bytes = 8 KB -//---------------------------------------------------------------------------------- -static unsigned int guiIcons[RAYGUI_ICON_MAX_ICONS*RAYGUI_ICON_DATA_ELEMENTS] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_NONE - 0x3ff80000, 0x2f082008, 0x2042207e, 0x40027fc2, 0x40024002, 0x40024002, 0x40024002, 0x00007ffe, // ICON_FOLDER_FILE_OPEN - 0x3ffe0000, 0x44226422, 0x400247e2, 0x5ffa4002, 0x57ea500a, 0x500a500a, 0x40025ffa, 0x00007ffe, // ICON_FILE_SAVE_CLASSIC - 0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024002, 0x44424282, 0x793e4102, 0x00000100, // ICON_FOLDER_OPEN - 0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024102, 0x44424102, 0x793e4282, 0x00000000, // ICON_FOLDER_SAVE - 0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x24442284, 0x21042104, 0x20042104, 0x00003ffc, // ICON_FILE_OPEN - 0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x21042104, 0x22842444, 0x20042104, 0x00003ffc, // ICON_FILE_SAVE - 0x3ff00000, 0x201c2010, 0x00042004, 0x20041004, 0x20844784, 0x00841384, 0x20042784, 0x00003ffc, // ICON_FILE_EXPORT - 0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x22042204, 0x22042f84, 0x20042204, 0x00003ffc, // ICON_FILE_ADD - 0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x25042884, 0x25042204, 0x20042884, 0x00003ffc, // ICON_FILE_DELETE - 0x3ff00000, 0x201c2010, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // ICON_FILETYPE_TEXT - 0x3ff00000, 0x201c2010, 0x27042004, 0x244424c4, 0x26442444, 0x20642664, 0x20042004, 0x00003ffc, // ICON_FILETYPE_AUDIO - 0x3ff00000, 0x201c2010, 0x26042604, 0x20042004, 0x35442884, 0x2414222c, 0x20042004, 0x00003ffc, // ICON_FILETYPE_IMAGE - 0x3ff00000, 0x201c2010, 0x20c42004, 0x22442144, 0x22442444, 0x20c42144, 0x20042004, 0x00003ffc, // ICON_FILETYPE_PLAY - 0x3ff00000, 0x3ffc2ff0, 0x3f3c2ff4, 0x3dbc2eb4, 0x3dbc2bb4, 0x3f3c2eb4, 0x3ffc2ff4, 0x00002ff4, // ICON_FILETYPE_VIDEO - 0x3ff00000, 0x201c2010, 0x21842184, 0x21842004, 0x21842184, 0x21842184, 0x20042184, 0x00003ffc, // ICON_FILETYPE_INFO - 0x0ff00000, 0x381c0810, 0x28042804, 0x28042804, 0x28042804, 0x28042804, 0x20102ffc, 0x00003ff0, // ICON_FILE_COPY - 0x00000000, 0x701c0000, 0x079c1e14, 0x55a000f0, 0x079c00f0, 0x701c1e14, 0x00000000, 0x00000000, // ICON_FILE_CUT - 0x01c00000, 0x13e41bec, 0x3f841004, 0x204420c4, 0x20442044, 0x20442044, 0x207c2044, 0x00003fc0, // ICON_FILE_PASTE - 0x00000000, 0x3aa00fe0, 0x2abc2aa0, 0x2aa42aa4, 0x20042aa4, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_CURSOR_HAND - 0x00000000, 0x003c000c, 0x030800c8, 0x30100c10, 0x10202020, 0x04400840, 0x01800280, 0x00000000, // ICON_CURSOR_POINTER - 0x00000000, 0x00180000, 0x01f00078, 0x03e007f0, 0x07c003e0, 0x04000e40, 0x00000000, 0x00000000, // ICON_CURSOR_CLASSIC - 0x00000000, 0x04000000, 0x11000a00, 0x04400a80, 0x01100220, 0x00580088, 0x00000038, 0x00000000, // ICON_PENCIL - 0x04000000, 0x15000a00, 0x50402880, 0x14102820, 0x05040a08, 0x015c028c, 0x007c00bc, 0x00000000, // ICON_PENCIL_BIG - 0x01c00000, 0x01400140, 0x01400140, 0x0ff80140, 0x0ff80808, 0x0aa80808, 0x0aa80aa8, 0x00000ff8, // ICON_BRUSH_CLASSIC - 0x1ffc0000, 0x5ffc7ffe, 0x40004000, 0x00807f80, 0x01c001c0, 0x01c001c0, 0x01c001c0, 0x00000080, // ICON_BRUSH_PAINTER - 0x00000000, 0x00800000, 0x01c00080, 0x03e001c0, 0x07f003e0, 0x036006f0, 0x000001c0, 0x00000000, // ICON_WATER_DROP - 0x00000000, 0x3e003800, 0x1f803f80, 0x0c201e40, 0x02080c10, 0x00840104, 0x00380044, 0x00000000, // ICON_COLOR_PICKER - 0x00000000, 0x07800300, 0x1fe00fc0, 0x3f883fd0, 0x0e021f04, 0x02040402, 0x00f00108, 0x00000000, // ICON_RUBBER - 0x00c00000, 0x02800140, 0x08200440, 0x20081010, 0x2ffe3004, 0x03f807fc, 0x00e001f0, 0x00000040, // ICON_COLOR_BUCKET - 0x00000000, 0x21843ffc, 0x01800180, 0x01800180, 0x01800180, 0x01800180, 0x03c00180, 0x00000000, // ICON_TEXT_T - 0x00800000, 0x01400180, 0x06200340, 0x0c100620, 0x1ff80c10, 0x380c1808, 0x70067004, 0x0000f80f, // ICON_TEXT_A - 0x78000000, 0x50004000, 0x00004800, 0x03c003c0, 0x03c003c0, 0x00100000, 0x0002000a, 0x0000000e, // ICON_SCALE - 0x75560000, 0x5e004002, 0x54001002, 0x41001202, 0x408200fe, 0x40820082, 0x40820082, 0x00006afe, // ICON_RESIZE - 0x00000000, 0x3f003f00, 0x3f003f00, 0x3f003f00, 0x00400080, 0x001c0020, 0x001c001c, 0x00000000, // ICON_FILTER_POINT - 0x6d800000, 0x00004080, 0x40804080, 0x40800000, 0x00406d80, 0x001c0020, 0x001c001c, 0x00000000, // ICON_FILTER_BILINEAR - 0x40080000, 0x1ffe2008, 0x14081008, 0x11081208, 0x10481088, 0x10081028, 0x10047ff8, 0x00001002, // ICON_CROP - 0x00100000, 0x3ffc0010, 0x2ab03550, 0x22b02550, 0x20b02150, 0x20302050, 0x2000fff0, 0x00002000, // ICON_CROP_ALPHA - 0x40000000, 0x1ff82000, 0x04082808, 0x01082208, 0x00482088, 0x00182028, 0x35542008, 0x00000002, // ICON_SQUARE_TOGGLE - 0x00000000, 0x02800280, 0x06c006c0, 0x0ea00ee0, 0x1e901eb0, 0x3e883e98, 0x7efc7e8c, 0x00000000, // ICON_SYMMETRY - 0x01000000, 0x05600100, 0x1d480d50, 0x7d423d44, 0x3d447d42, 0x0d501d48, 0x01000560, 0x00000100, // ICON_SYMMETRY_HORIZONTAL - 0x01800000, 0x04200240, 0x10080810, 0x00001ff8, 0x00007ffe, 0x0ff01ff8, 0x03c007e0, 0x00000180, // ICON_SYMMETRY_VERTICAL - 0x00000000, 0x010800f0, 0x02040204, 0x02040204, 0x07f00308, 0x1c000e00, 0x30003800, 0x00000000, // ICON_LENS - 0x00000000, 0x061803f0, 0x08240c0c, 0x08040814, 0x0c0c0804, 0x23f01618, 0x18002400, 0x00000000, // ICON_LENS_BIG - 0x00000000, 0x00000000, 0x1c7007c0, 0x638e3398, 0x1c703398, 0x000007c0, 0x00000000, 0x00000000, // ICON_EYE_ON - 0x00000000, 0x10002000, 0x04700fc0, 0x610e3218, 0x1c703098, 0x001007a0, 0x00000008, 0x00000000, // ICON_EYE_OFF - 0x00000000, 0x00007ffc, 0x40047ffc, 0x10102008, 0x04400820, 0x02800280, 0x02800280, 0x00000100, // ICON_FILTER_TOP - 0x00000000, 0x40027ffe, 0x10082004, 0x04200810, 0x02400240, 0x02400240, 0x01400240, 0x000000c0, // ICON_FILTER - 0x00800000, 0x00800080, 0x00000080, 0x3c9e0000, 0x00000000, 0x00800080, 0x00800080, 0x00000000, // ICON_TARGET_POINT - 0x00800000, 0x00800080, 0x00800080, 0x3f7e01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // ICON_TARGET_SMALL - 0x00800000, 0x00800080, 0x03e00080, 0x3e3e0220, 0x03e00220, 0x00800080, 0x00800080, 0x00000000, // ICON_TARGET_BIG - 0x01000000, 0x04400280, 0x01000100, 0x43842008, 0x43849ab2, 0x01002008, 0x04400100, 0x01000280, // ICON_TARGET_MOVE - 0x01000000, 0x04400280, 0x01000100, 0x41042108, 0x41049ff2, 0x01002108, 0x04400100, 0x01000280, // ICON_CURSOR_MOVE - 0x781e0000, 0x500a4002, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x4002500a, 0x0000781e, // ICON_CURSOR_SCALE - 0x00000000, 0x20003c00, 0x24002800, 0x01000200, 0x00400080, 0x00140024, 0x003c0004, 0x00000000, // ICON_CURSOR_SCALE_RIGHT - 0x00000000, 0x0004003c, 0x00240014, 0x00800040, 0x02000100, 0x28002400, 0x3c002000, 0x00000000, // ICON_CURSOR_SCALE_LEFT - 0x00000000, 0x00100020, 0x10101fc8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // ICON_UNDO - 0x00000000, 0x08000400, 0x080813f8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // ICON_REDO - 0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3f902020, 0x00400020, 0x00000000, // ICON_REREDO - 0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3fc82010, 0x00200010, 0x00000000, // ICON_MUTATE - 0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18101020, 0x00100fc8, 0x00000020, // ICON_ROTATE - 0x00000000, 0x04000200, 0x240429fc, 0x20042204, 0x20442004, 0x3f942024, 0x00400020, 0x00000000, // ICON_REPEAT - 0x00000000, 0x20001000, 0x22104c0e, 0x00801120, 0x11200040, 0x4c0e2210, 0x10002000, 0x00000000, // ICON_SHUFFLE - 0x7ffe0000, 0x50024002, 0x44024802, 0x41024202, 0x40424082, 0x40124022, 0x4002400a, 0x00007ffe, // ICON_EMPTYBOX - 0x00800000, 0x03e00080, 0x08080490, 0x3c9e0808, 0x08080808, 0x03e00490, 0x00800080, 0x00000000, // ICON_TARGET - 0x00800000, 0x00800080, 0x00800080, 0x3ffe01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // ICON_TARGET_SMALL_FILL - 0x00800000, 0x00800080, 0x03e00080, 0x3ffe03e0, 0x03e003e0, 0x00800080, 0x00800080, 0x00000000, // ICON_TARGET_BIG_FILL - 0x01000000, 0x07c00380, 0x01000100, 0x638c2008, 0x638cfbbe, 0x01002008, 0x07c00100, 0x01000380, // ICON_TARGET_MOVE_FILL - 0x01000000, 0x07c00380, 0x01000100, 0x610c2108, 0x610cfffe, 0x01002108, 0x07c00100, 0x01000380, // ICON_CURSOR_MOVE_FILL - 0x781e0000, 0x6006700e, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x700e6006, 0x0000781e, // ICON_CURSOR_SCALE_FILL - 0x00000000, 0x38003c00, 0x24003000, 0x01000200, 0x00400080, 0x000c0024, 0x003c001c, 0x00000000, // ICON_CURSOR_SCALE_RIGHT_FILL - 0x00000000, 0x001c003c, 0x0024000c, 0x00800040, 0x02000100, 0x30002400, 0x3c003800, 0x00000000, // ICON_CURSOR_SCALE_LEFT_FILL - 0x00000000, 0x00300020, 0x10301ff8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // ICON_UNDO_FILL - 0x00000000, 0x0c000400, 0x0c081ff8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // ICON_REDO_FILL - 0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3ff02060, 0x00400060, 0x00000000, // ICON_REREDO_FILL - 0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3ff82030, 0x00200030, 0x00000000, // ICON_MUTATE_FILL - 0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18301020, 0x00300ff8, 0x00000020, // ICON_ROTATE_FILL - 0x00000000, 0x06000200, 0x26042ffc, 0x20042204, 0x20442004, 0x3ff42064, 0x00400060, 0x00000000, // ICON_REPEAT_FILL - 0x00000000, 0x30001000, 0x32107c0e, 0x00801120, 0x11200040, 0x7c0e3210, 0x10003000, 0x00000000, // ICON_SHUFFLE_FILL - 0x00000000, 0x30043ffc, 0x24042804, 0x21042204, 0x20442084, 0x20142024, 0x3ffc200c, 0x00000000, // ICON_EMPTYBOX_SMALL - 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX - 0x00000000, 0x23c43ffc, 0x23c423c4, 0x200423c4, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_TOP - 0x00000000, 0x3e043ffc, 0x3e043e04, 0x20043e04, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_TOP_RIGHT - 0x00000000, 0x20043ffc, 0x20042004, 0x3e043e04, 0x3e043e04, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_RIGHT - 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x3e042004, 0x3e043e04, 0x3ffc3e04, 0x00000000, // ICON_BOX_BOTTOM_RIGHT - 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x23c42004, 0x23c423c4, 0x3ffc23c4, 0x00000000, // ICON_BOX_BOTTOM - 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x207c2004, 0x207c207c, 0x3ffc207c, 0x00000000, // ICON_BOX_BOTTOM_LEFT - 0x00000000, 0x20043ffc, 0x20042004, 0x207c207c, 0x207c207c, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_LEFT - 0x00000000, 0x207c3ffc, 0x207c207c, 0x2004207c, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_TOP_LEFT - 0x00000000, 0x20043ffc, 0x20042004, 0x23c423c4, 0x23c423c4, 0x20042004, 0x3ffc2004, 0x00000000, // ICON_BOX_CENTER - 0x7ffe0000, 0x40024002, 0x47e24182, 0x4ff247e2, 0x47e24ff2, 0x418247e2, 0x40024002, 0x00007ffe, // ICON_BOX_CIRCLE_MASK - 0x7fff0000, 0x40014001, 0x40014001, 0x49555ddd, 0x4945495d, 0x400149c5, 0x40014001, 0x00007fff, // ICON_POT - 0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x404e40ce, 0x48125432, 0x4006540e, 0x00007ffe, // ICON_ALPHA_MULTIPLY - 0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x5c4e40ce, 0x44124432, 0x40065c0e, 0x00007ffe, // ICON_ALPHA_CLEAR - 0x7ffe0000, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x00007ffe, // ICON_DITHERING - 0x07fe0000, 0x1ffa0002, 0x7fea000a, 0x402a402a, 0x5b2a512a, 0x5128552a, 0x40205128, 0x00007fe0, // ICON_MIPMAPS - 0x00000000, 0x1ff80000, 0x12481248, 0x12481ff8, 0x1ff81248, 0x12481248, 0x00001ff8, 0x00000000, // ICON_BOX_GRID - 0x12480000, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x00001248, // ICON_GRID - 0x00000000, 0x1c380000, 0x1c3817e8, 0x08100810, 0x08100810, 0x17e81c38, 0x00001c38, 0x00000000, // ICON_BOX_CORNERS_SMALL - 0x700e0000, 0x700e5ffa, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x5ffa700e, 0x0000700e, // ICON_BOX_CORNERS_BIG - 0x3f7e0000, 0x21422142, 0x21422142, 0x00003f7e, 0x21423f7e, 0x21422142, 0x3f7e2142, 0x00000000, // ICON_FOUR_BOXES - 0x00000000, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x00000000, // ICON_GRID_FILL - 0x7ffe0000, 0x7ffe7ffe, 0x77fe7000, 0x77fe77fe, 0x777e7700, 0x777e777e, 0x777e777e, 0x0000777e, // ICON_BOX_MULTISIZE - 0x781e0000, 0x40024002, 0x00004002, 0x01800000, 0x00000180, 0x40020000, 0x40024002, 0x0000781e, // ICON_ZOOM_SMALL - 0x781e0000, 0x40024002, 0x00004002, 0x03c003c0, 0x03c003c0, 0x40020000, 0x40024002, 0x0000781e, // ICON_ZOOM_MEDIUM - 0x781e0000, 0x40024002, 0x07e04002, 0x07e007e0, 0x07e007e0, 0x400207e0, 0x40024002, 0x0000781e, // ICON_ZOOM_BIG - 0x781e0000, 0x5ffa4002, 0x1ff85ffa, 0x1ff81ff8, 0x1ff81ff8, 0x5ffa1ff8, 0x40025ffa, 0x0000781e, // ICON_ZOOM_ALL - 0x00000000, 0x2004381c, 0x00002004, 0x00000000, 0x00000000, 0x20040000, 0x381c2004, 0x00000000, // ICON_ZOOM_CENTER - 0x00000000, 0x1db80000, 0x10081008, 0x10080000, 0x00001008, 0x10081008, 0x00001db8, 0x00000000, // ICON_BOX_DOTS_SMALL - 0x35560000, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x35562002, 0x00000000, // ICON_BOX_DOTS_BIG - 0x7ffe0000, 0x40024002, 0x48124ff2, 0x49924812, 0x48124992, 0x4ff24812, 0x40024002, 0x00007ffe, // ICON_BOX_CONCENTRIC - 0x00000000, 0x10841ffc, 0x10841084, 0x1ffc1084, 0x10841084, 0x10841084, 0x00001ffc, 0x00000000, // ICON_BOX_GRID_BIG - 0x00000000, 0x00000000, 0x10000000, 0x04000800, 0x01040200, 0x00500088, 0x00000020, 0x00000000, // ICON_OK_TICK - 0x00000000, 0x10080000, 0x04200810, 0x01800240, 0x02400180, 0x08100420, 0x00001008, 0x00000000, // ICON_CROSS - 0x00000000, 0x02000000, 0x00800100, 0x00200040, 0x00200010, 0x00800040, 0x02000100, 0x00000000, // ICON_ARROW_LEFT - 0x00000000, 0x00400000, 0x01000080, 0x04000200, 0x04000800, 0x01000200, 0x00400080, 0x00000000, // ICON_ARROW_RIGHT - 0x00000000, 0x00000000, 0x00000000, 0x08081004, 0x02200410, 0x00800140, 0x00000000, 0x00000000, // ICON_ARROW_DOWN - 0x00000000, 0x00000000, 0x01400080, 0x04100220, 0x10040808, 0x00000000, 0x00000000, 0x00000000, // ICON_ARROW_UP - 0x00000000, 0x02000000, 0x03800300, 0x03e003c0, 0x03e003f0, 0x038003c0, 0x02000300, 0x00000000, // ICON_ARROW_LEFT_FILL - 0x00000000, 0x00400000, 0x01c000c0, 0x07c003c0, 0x07c00fc0, 0x01c003c0, 0x004000c0, 0x00000000, // ICON_ARROW_RIGHT_FILL - 0x00000000, 0x00000000, 0x00000000, 0x0ff81ffc, 0x03e007f0, 0x008001c0, 0x00000000, 0x00000000, // ICON_ARROW_DOWN_FILL - 0x00000000, 0x00000000, 0x01c00080, 0x07f003e0, 0x1ffc0ff8, 0x00000000, 0x00000000, 0x00000000, // ICON_ARROW_UP_FILL - 0x00000000, 0x18a008c0, 0x32881290, 0x24822686, 0x26862482, 0x12903288, 0x08c018a0, 0x00000000, // ICON_AUDIO - 0x00000000, 0x04800780, 0x004000c0, 0x662000f0, 0x08103c30, 0x130a0e18, 0x0000318e, 0x00000000, // ICON_FX - 0x00000000, 0x00800000, 0x08880888, 0x2aaa0a8a, 0x0a8a2aaa, 0x08880888, 0x00000080, 0x00000000, // ICON_WAVE - 0x00000000, 0x00600000, 0x01080090, 0x02040108, 0x42044204, 0x24022402, 0x00001800, 0x00000000, // ICON_WAVE_SINUS - 0x00000000, 0x07f80000, 0x04080408, 0x04080408, 0x04080408, 0x7c0e0408, 0x00000000, 0x00000000, // ICON_WAVE_SQUARE - 0x00000000, 0x00000000, 0x00a00040, 0x22084110, 0x08021404, 0x00000000, 0x00000000, 0x00000000, // ICON_WAVE_TRIANGULAR - 0x00000000, 0x00000000, 0x04200000, 0x01800240, 0x02400180, 0x00000420, 0x00000000, 0x00000000, // ICON_CROSS_SMALL - 0x00000000, 0x18380000, 0x12281428, 0x10a81128, 0x112810a8, 0x14281228, 0x00001838, 0x00000000, // ICON_PLAYER_PREVIOUS - 0x00000000, 0x18000000, 0x11801600, 0x10181060, 0x10601018, 0x16001180, 0x00001800, 0x00000000, // ICON_PLAYER_PLAY_BACK - 0x00000000, 0x00180000, 0x01880068, 0x18080608, 0x06081808, 0x00680188, 0x00000018, 0x00000000, // ICON_PLAYER_PLAY - 0x00000000, 0x1e780000, 0x12481248, 0x12481248, 0x12481248, 0x12481248, 0x00001e78, 0x00000000, // ICON_PLAYER_PAUSE - 0x00000000, 0x1ff80000, 0x10081008, 0x10081008, 0x10081008, 0x10081008, 0x00001ff8, 0x00000000, // ICON_PLAYER_STOP - 0x00000000, 0x1c180000, 0x14481428, 0x15081488, 0x14881508, 0x14281448, 0x00001c18, 0x00000000, // ICON_PLAYER_NEXT - 0x00000000, 0x03c00000, 0x08100420, 0x10081008, 0x10081008, 0x04200810, 0x000003c0, 0x00000000, // ICON_PLAYER_RECORD - 0x00000000, 0x0c3007e0, 0x13c81818, 0x14281668, 0x14281428, 0x1c381c38, 0x08102244, 0x00000000, // ICON_MAGNET - 0x07c00000, 0x08200820, 0x3ff80820, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // ICON_LOCK_CLOSE - 0x07c00000, 0x08000800, 0x3ff80800, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // ICON_LOCK_OPEN - 0x01c00000, 0x0c180770, 0x3086188c, 0x60832082, 0x60034781, 0x30062002, 0x0c18180c, 0x01c00770, // ICON_CLOCK - 0x0a200000, 0x1b201b20, 0x04200e20, 0x04200420, 0x04700420, 0x0e700e70, 0x0e700e70, 0x04200e70, // ICON_TOOLS - 0x01800000, 0x3bdc318c, 0x0ff01ff8, 0x7c3e1e78, 0x1e787c3e, 0x1ff80ff0, 0x318c3bdc, 0x00000180, // ICON_GEAR - 0x01800000, 0x3ffc318c, 0x1c381ff8, 0x781e1818, 0x1818781e, 0x1ff81c38, 0x318c3ffc, 0x00000180, // ICON_GEAR_BIG - 0x00000000, 0x08080ff8, 0x08081ffc, 0x0aa80aa8, 0x0aa80aa8, 0x0aa80aa8, 0x08080aa8, 0x00000ff8, // ICON_BIN - 0x00000000, 0x00000000, 0x20043ffc, 0x08043f84, 0x04040f84, 0x04040784, 0x000007fc, 0x00000000, // ICON_HAND_POINTER - 0x00000000, 0x24400400, 0x00001480, 0x6efe0e00, 0x00000e00, 0x24401480, 0x00000400, 0x00000000, // ICON_LASER - 0x00000000, 0x03c00000, 0x08300460, 0x11181118, 0x11181118, 0x04600830, 0x000003c0, 0x00000000, // ICON_COIN - 0x00000000, 0x10880080, 0x06c00810, 0x366c07e0, 0x07e00240, 0x00001768, 0x04200240, 0x00000000, // ICON_EXPLOSION - 0x00000000, 0x3d280000, 0x2528252c, 0x3d282528, 0x05280528, 0x05e80528, 0x00000000, 0x00000000, // ICON_1UP - 0x01800000, 0x03c003c0, 0x018003c0, 0x0ff007e0, 0x0bd00bd0, 0x0a500bd0, 0x02400240, 0x02400240, // ICON_PLAYER - 0x01800000, 0x03c003c0, 0x118013c0, 0x03c81ff8, 0x07c003c8, 0x04400440, 0x0c080478, 0x00000000, // ICON_PLAYER_JUMP - 0x3ff80000, 0x30183ff8, 0x30183018, 0x3ff83ff8, 0x03000300, 0x03c003c0, 0x03e00300, 0x000003e0, // ICON_KEY - 0x3ff80000, 0x3ff83ff8, 0x33983ff8, 0x3ff83398, 0x3ff83ff8, 0x00000540, 0x0fe00aa0, 0x00000fe0, // ICON_DEMON - 0x00000000, 0x0ff00000, 0x20041008, 0x25442004, 0x10082004, 0x06000bf0, 0x00000300, 0x00000000, // ICON_TEXT_POPUP - 0x00000000, 0x11440000, 0x07f00be8, 0x1c1c0e38, 0x1c1c0c18, 0x07f00e38, 0x11440be8, 0x00000000, // ICON_GEAR_EX - 0x00000000, 0x20080000, 0x0c601010, 0x07c00fe0, 0x07c007c0, 0x0c600fe0, 0x20081010, 0x00000000, // ICON_CRACK - 0x00000000, 0x20080000, 0x0c601010, 0x04400fe0, 0x04405554, 0x0c600fe0, 0x20081010, 0x00000000, // ICON_CRACK_POINTS - 0x00000000, 0x00800080, 0x01c001c0, 0x1ffc3ffe, 0x03e007f0, 0x07f003e0, 0x0c180770, 0x00000808, // ICON_STAR - 0x0ff00000, 0x08180810, 0x08100818, 0x0a100810, 0x08180810, 0x08100818, 0x08100810, 0x00001ff8, // ICON_DOOR - 0x0ff00000, 0x08100810, 0x08100810, 0x10100010, 0x4f902010, 0x10102010, 0x08100010, 0x00000ff0, // ICON_EXIT - 0x00040000, 0x001f000e, 0x0ef40004, 0x12f41284, 0x0ef41214, 0x10040004, 0x7ffc3004, 0x10003000, // ICON_MODE_2D - 0x78040000, 0x501f600e, 0x0ef44004, 0x12f41284, 0x0ef41284, 0x10140004, 0x7ffc300c, 0x10003000, // ICON_MODE_3D - 0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // ICON_CUBE - 0x7fe00000, 0x5ff87ff0, 0x47fe4ffc, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // ICON_CUBE_FACE_TOP - 0x7fe00000, 0x50386030, 0x47fe483c, 0x443e443e, 0x443e443e, 0x241e75fe, 0x0c06140e, 0x000007fe, // ICON_CUBE_FACE_LEFT - 0x7fe00000, 0x50286030, 0x47fe4804, 0x47fe47fe, 0x47fe47fe, 0x27fe77fe, 0x0ffe17fe, 0x000007fe, // ICON_CUBE_FACE_FRONT - 0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x3ff27fe2, 0x0ffe1ffa, 0x000007fe, // ICON_CUBE_FACE_BOTTOM - 0x7fe00000, 0x70286030, 0x7ffe7804, 0x7c227c02, 0x7c227c22, 0x3c127de2, 0x0c061c0a, 0x000007fe, // ICON_CUBE_FACE_RIGHT - 0x7fe00000, 0x7fe87ff0, 0x7ffe7fe4, 0x7fe27fe2, 0x7fe27fe2, 0x24127fe2, 0x0c06140a, 0x000007fe, // ICON_CUBE_FACE_BACK - 0x00000000, 0x2a0233fe, 0x22022602, 0x22022202, 0x2a022602, 0x00a033fe, 0x02080110, 0x00000000, // ICON_CAMERA - 0x00000000, 0x200c3ffc, 0x000c000c, 0x3ffc000c, 0x30003000, 0x30003000, 0x3ffc3004, 0x00000000, // ICON_SPECIAL - 0x00000000, 0x0022003e, 0x012201e2, 0x0100013e, 0x01000100, 0x79000100, 0x4f004900, 0x00007800, // ICON_LINK_NET - 0x00000000, 0x44007c00, 0x45004600, 0x00627cbe, 0x00620022, 0x45007cbe, 0x44004600, 0x00007c00, // ICON_LINK_BOXES - 0x00000000, 0x0044007c, 0x0010007c, 0x3f100010, 0x3f1021f0, 0x3f100010, 0x3f0021f0, 0x00000000, // ICON_LINK_MULTI - 0x00000000, 0x0044007c, 0x00440044, 0x0010007c, 0x00100010, 0x44107c10, 0x440047f0, 0x00007c00, // ICON_LINK - 0x00000000, 0x0044007c, 0x00440044, 0x0000007c, 0x00000010, 0x44007c10, 0x44004550, 0x00007c00, // ICON_LINK_BROKE - 0x02a00000, 0x22a43ffc, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // ICON_TEXT_NOTES - 0x3ffc0000, 0x20042004, 0x245e27c4, 0x27c42444, 0x2004201e, 0x201e2004, 0x20042004, 0x00003ffc, // ICON_NOTEBOOK - 0x00000000, 0x07e00000, 0x04200420, 0x24243ffc, 0x24242424, 0x24242424, 0x3ffc2424, 0x00000000, // ICON_SUITCASE - 0x00000000, 0x0fe00000, 0x08200820, 0x40047ffc, 0x7ffc5554, 0x40045554, 0x7ffc4004, 0x00000000, // ICON_SUITCASE_ZIP - 0x00000000, 0x20043ffc, 0x3ffc2004, 0x13c81008, 0x100813c8, 0x10081008, 0x1ff81008, 0x00000000, // ICON_MAILBOX - 0x00000000, 0x40027ffe, 0x5ffa5ffa, 0x5ffa5ffa, 0x40025ffa, 0x03c07ffe, 0x1ff81ff8, 0x00000000, // ICON_MONITOR - 0x0ff00000, 0x6bfe7ffe, 0x7ffe7ffe, 0x68167ffe, 0x08106816, 0x08100810, 0x0ff00810, 0x00000000, // ICON_PRINTER - 0x3ff80000, 0xfffe2008, 0x870a8002, 0x904a888a, 0x904a904a, 0x870a888a, 0xfffe8002, 0x00000000, // ICON_PHOTO_CAMERA - 0x0fc00000, 0xfcfe0cd8, 0x8002fffe, 0x84428382, 0x84428442, 0x80028382, 0xfffe8002, 0x00000000, // ICON_PHOTO_CAMERA_FLASH - 0x00000000, 0x02400180, 0x08100420, 0x20041008, 0x23c42004, 0x22442244, 0x3ffc2244, 0x00000000, // ICON_HOUSE - 0x00000000, 0x1c700000, 0x3ff83ef8, 0x3ff83ff8, 0x0fe01ff0, 0x038007c0, 0x00000100, 0x00000000, // ICON_HEART - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0xe000c000, // ICON_CORNER - 0x00000000, 0x14001c00, 0x15c01400, 0x15401540, 0x155c1540, 0x15541554, 0x1ddc1554, 0x00000000, // ICON_VERTICAL_BARS - 0x00000000, 0x03000300, 0x1b001b00, 0x1b601b60, 0x1b6c1b60, 0x1b6c1b6c, 0x1b6c1b6c, 0x00000000, // ICON_VERTICAL_BARS_FILL - 0x00000000, 0x00000000, 0x403e7ffe, 0x7ffe403e, 0x7ffe0000, 0x43fe43fe, 0x00007ffe, 0x00000000, // ICON_LIFE_BARS - 0x7ffc0000, 0x43844004, 0x43844284, 0x43844004, 0x42844284, 0x42844284, 0x40044384, 0x00007ffc, // ICON_INFO - 0x40008000, 0x10002000, 0x04000800, 0x01000200, 0x00400080, 0x00100020, 0x00040008, 0x00010002, // ICON_CROSSLINE - 0x00000000, 0x1ff01ff0, 0x18301830, 0x1f001830, 0x03001f00, 0x00000300, 0x03000300, 0x00000000, // ICON_HELP - 0x3ff00000, 0x2abc3550, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x00003ffc, // ICON_FILETYPE_ALPHA - 0x3ff00000, 0x201c2010, 0x22442184, 0x28142424, 0x29942814, 0x2ff42994, 0x20042004, 0x00003ffc, // ICON_FILETYPE_HOME - 0x07fe0000, 0x04020402, 0x7fe20402, 0x44224422, 0x44224422, 0x402047fe, 0x40204020, 0x00007fe0, // ICON_LAYERS_VISIBLE - 0x07fe0000, 0x04020402, 0x7c020402, 0x44024402, 0x44024402, 0x402047fe, 0x40204020, 0x00007fe0, // ICON_LAYERS - 0x00000000, 0x40027ffe, 0x7ffe4002, 0x40024002, 0x40024002, 0x40024002, 0x7ffe4002, 0x00000000, // ICON_WINDOW - 0x09100000, 0x09f00910, 0x09100910, 0x00000910, 0x24a2779e, 0x27a224a2, 0x709e20a2, 0x00000000, // ICON_HIDPI - 0x3ff00000, 0x201c2010, 0x2a842e84, 0x2e842a84, 0x2ba42004, 0x2aa42aa4, 0x20042ba4, 0x00003ffc, // ICON_FILETYPE_BINARY - 0x00000000, 0x00000000, 0x00120012, 0x4a5e4bd2, 0x485233d2, 0x00004bd2, 0x00000000, 0x00000000, // ICON_HEX - 0x01800000, 0x381c0660, 0x23c42004, 0x23c42044, 0x13c82204, 0x08101008, 0x02400420, 0x00000180, // ICON_SHIELD - 0x007e0000, 0x20023fc2, 0x40227fe2, 0x400a403a, 0x400a400a, 0x400a400a, 0x4008400e, 0x00007ff8, // ICON_FILE_NEW - 0x00000000, 0x0042007e, 0x40027fc2, 0x44024002, 0x5f024402, 0x44024402, 0x7ffe4002, 0x00000000, // ICON_FOLDER_ADD - 0x44220000, 0x12482244, 0xf3cf0000, 0x14280420, 0x48122424, 0x08100810, 0x1ff81008, 0x03c00420, // ICON_ALARM - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_206 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_207 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_208 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_209 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_210 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_211 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_212 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_213 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_214 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_215 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_216 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_217 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_218 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_219 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_220 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_221 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_222 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_223 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_224 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_225 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_226 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_227 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_228 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_229 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_230 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_231 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_232 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_233 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_234 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_235 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_236 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_237 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_238 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_239 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_240 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_241 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_242 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_243 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_244 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_245 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_246 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_247 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_248 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_249 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_250 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_251 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_252 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_253 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_254 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // ICON_255 -}; - -#endif // !RAYGUI_NO_ICONS && !RAYGUI_CUSTOM_ICONS - -#ifndef RAYGUI_ICON_SIZE - #define RAYGUI_ICON_SIZE 0 -#endif - -#define RAYGUI_MAX_CONTROLS 16 // Maximum number of standard controls -#define RAYGUI_MAX_PROPS_BASE 16 // Maximum number of standard properties -#define RAYGUI_MAX_PROPS_EXTENDED 8 // Maximum number of extended properties - -//---------------------------------------------------------------------------------- -// Types and Structures Definition -//---------------------------------------------------------------------------------- -// Gui control property style color element -typedef enum { BORDER = 0, BASE, TEXT, OTHER } GuiPropertyElement; - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -static GuiState guiState = STATE_NORMAL; // Gui global state, if !STATE_NORMAL, forces defined state - -static Font guiFont = { 0 }; // Gui current font (WARNING: highly coupled to raylib) -static bool guiLocked = false; // Gui lock state (no inputs processed) -static float guiAlpha = 1.0f; // Gui element transpacency on drawing - -static unsigned int guiIconScale = 1; // Gui icon default scale (if icons enabled) - -//---------------------------------------------------------------------------------- -// Style data array for all gui style properties (allocated on data segment by default) -// -// NOTE 1: First set of BASE properties are generic to all controls but could be individually -// overwritten per control, first set of EXTENDED properties are generic to all controls and -// can not be overwritten individually but custom EXTENDED properties can be used by control -// -// NOTE 2: A new style set could be loaded over this array using GuiLoadStyle(), -// but default gui style could always be recovered with GuiLoadStyleDefault() -// -// guiStyle size is by default: 16*(16 + 8) = 384*4 = 1536 bytes = 1.5 KB -//---------------------------------------------------------------------------------- -static unsigned int guiStyle[RAYGUI_MAX_CONTROLS*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED)] = { 0 }; - -static bool guiStyleLoaded = false; // Style loaded flag for lazy style initialization - -//---------------------------------------------------------------------------------- -// Standalone Mode Functions Declaration -// -// NOTE: raygui depend on some raylib input and drawing functions -// To use raygui as standalone library, below functions must be defined by the user -//---------------------------------------------------------------------------------- -#if defined(RAYGUI_STANDALONE) - -#define KEY_RIGHT 262 -#define KEY_LEFT 263 -#define KEY_DOWN 264 -#define KEY_UP 265 -#define KEY_BACKSPACE 259 -#define KEY_ENTER 257 - -#define MOUSE_LEFT_BUTTON 0 - -// Input required functions -//------------------------------------------------------------------------------- -static Vector2 GetMousePosition(void); -static float GetMouseWheelMove(void); -static bool IsMouseButtonDown(int button); -static bool IsMouseButtonPressed(int button); -static bool IsMouseButtonReleased(int button); - -static bool IsKeyDown(int key); -static bool IsKeyPressed(int key); -static int GetCharPressed(void); // -- GuiTextBox(), GuiTextBoxMulti(), GuiValueBox() -//------------------------------------------------------------------------------- - -// Drawing required functions -//------------------------------------------------------------------------------- -static void DrawRectangle(int x, int y, int width, int height, Color color); // -- GuiDrawRectangle(), GuiDrawIcon() - -static void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // -- GuiColorPicker() -//------------------------------------------------------------------------------- - -// Text required functions -//------------------------------------------------------------------------------- -static Font LoadFontEx(const char *fileName, int fontSize, int *fontChars, int glyphCount); // -- GuiLoadStyle() -static Font GetFontDefault(void); // -- GuiLoadStyleDefault() -static Texture2D LoadTextureFromImage(Image image); // -- GuiLoadStyle() -static void SetShapesTexture(Texture2D tex, Rectangle rec); // -- GuiLoadStyle() -static char *LoadFileText(const char *fileName); // -- GuiLoadStyle() -static const char *GetDirectoryPath(const char *filePath); // -- GuiLoadStyle() - -static Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // -- GetTextWidth(), GuiTextBoxMulti() -static void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // -- GuiDrawText() -//------------------------------------------------------------------------------- - -// raylib functions already implemented in raygui -//------------------------------------------------------------------------------- -static Color GetColor(int hexValue); // Returns a Color struct from hexadecimal value -static int ColorToInt(Color color); // Returns hexadecimal value for a Color -static Color Fade(Color color, float alpha); // Color fade-in or fade-out, alpha goes from 0.0f to 1.0f -static bool CheckCollisionPointRec(Vector2 point, Rectangle rec); // Check if point is inside rectangle -static const char *TextFormat(const char *text, ...); // Formatting of text with variables to 'embed' -static const char **TextSplit(const char *text, char delimiter, int *count); // Split text into multiple strings -static int TextToInteger(const char *text); // Get integer value from text -static int GetCodepoint(const char *text, int *bytesProcessed); // Get next codepoint in a UTF-8 encoded text -static const char *CodepointToUTF8(int codepoint, int *byteSize); // Encode codepoint into UTF-8 text (char array size returned as parameter) - -static void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2); // Draw rectangle vertical gradient -//------------------------------------------------------------------------------- - -#endif // RAYGUI_STANDALONE - -//---------------------------------------------------------------------------------- -// Module specific Functions Declaration -//---------------------------------------------------------------------------------- -static int GetTextWidth(const char *text); // Gui get text width using default font -static Rectangle GetTextBounds(int control, Rectangle bounds); // Get text bounds considering control bounds -static const char *GetTextIcon(const char *text, int *iconId); // Get text icon if provided and move text cursor - -static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color tint); // Gui draw text using default font -static void GuiDrawRectangle(Rectangle rec, int borderWidth, Color borderColor, Color color); // Gui draw rectangle using default raygui style - -static const char **GuiTextSplit(const char *text, int *count, int *textRow); // Split controls text into multiple strings -static Vector3 ConvertHSVtoRGB(Vector3 hsv); // Convert color data from HSV to RGB -static Vector3 ConvertRGBtoHSV(Vector3 rgb); // Convert color data from RGB to HSV - -static int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxValue); // Scroll bar control, used by GuiScrollPanel() - -//---------------------------------------------------------------------------------- -// Gui Setup Functions Definition -//---------------------------------------------------------------------------------- -// Enable gui global state -// NOTE: We check for STATE_DISABLED to avoid messing custom global state setups -void GuiEnable(void) { if (guiState == STATE_DISABLED) guiState = STATE_NORMAL; } - -// Disable gui global state -// NOTE: We check for STATE_NORMAL to avoid messing custom global state setups -void GuiDisable(void) { if (guiState == STATE_NORMAL) guiState = STATE_DISABLED; } - -// Lock gui global state -void GuiLock(void) { guiLocked = true; } - -// Unlock gui global state -void GuiUnlock(void) { guiLocked = false; } - -// Check if gui is locked (global state) -bool GuiIsLocked(void) { return guiLocked; } - -// Set gui controls alpha global state -void GuiFade(float alpha) -{ - if (alpha < 0.0f) alpha = 0.0f; - else if (alpha > 1.0f) alpha = 1.0f; - - guiAlpha = alpha; -} - -// Set gui state (global state) -void GuiSetState(int state) { guiState = (GuiState)state; } - -// Get gui state (global state) -int GuiGetState(void) { return guiState; } - -// Set custom gui font -// NOTE: Font loading/unloading is external to raygui -void GuiSetFont(Font font) -{ - if (font.texture.id > 0) - { - // NOTE: If we try to setup a font but default style has not been - // lazily loaded before, it will be overwritten, so we need to force - // default style loading first - if (!guiStyleLoaded) GuiLoadStyleDefault(); - - guiFont = font; - GuiSetStyle(DEFAULT, TEXT_SIZE, font.baseSize); - } -} - -// Get custom gui font -Font GuiGetFont(void) -{ - return guiFont; -} - -// Set control style property value -void GuiSetStyle(int control, int property, int value) -{ - if (!guiStyleLoaded) GuiLoadStyleDefault(); - guiStyle[control*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED) + property] = value; - - // Default properties are propagated to all controls - if ((control == 0) && (property < RAYGUI_MAX_PROPS_BASE)) - { - for (int i = 1; i < RAYGUI_MAX_CONTROLS; i++) guiStyle[i*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED) + property] = value; - } -} - -// Get control style property value -int GuiGetStyle(int control, int property) -{ - if (!guiStyleLoaded) GuiLoadStyleDefault(); - return guiStyle[control*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED) + property]; -} - -//---------------------------------------------------------------------------------- -// Gui Controls Functions Definition -//---------------------------------------------------------------------------------- - -// Window Box control -bool GuiWindowBox(Rectangle bounds, const char *title) -{ - // Window title bar height (including borders) - // NOTE: This define is also used by GuiMessageBox() and GuiTextInputBox() - #if !defined(RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT) - #define RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT 24 - #endif - - //GuiState state = guiState; - bool clicked = false; - - int statusBarHeight = RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT; - - Rectangle statusBar = { bounds.x, bounds.y, bounds.width, (float)statusBarHeight }; - if (bounds.height < statusBarHeight*2.0f) bounds.height = statusBarHeight*2.0f; - - Rectangle windowPanel = { bounds.x, bounds.y + (float)statusBarHeight - 1, bounds.width, bounds.height - (float)statusBarHeight + 1 }; - Rectangle closeButtonRec = { statusBar.x + statusBar.width - GuiGetStyle(STATUSBAR, BORDER_WIDTH) - 20, - statusBar.y + statusBarHeight/2.0f - 18.0f/2.0f, 18, 18 }; - - // Update control - //-------------------------------------------------------------------- - // NOTE: Logic is directly managed by button - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiStatusBar(statusBar, title); // Draw window header as status bar - GuiPanel(windowPanel, NULL); // Draw window base - - // Draw window close button - int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); - int tempTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); - GuiSetStyle(BUTTON, BORDER_WIDTH, 1); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); -#if defined(RAYGUI_NO_ICONS) - clicked = GuiButton(closeButtonRec, "x"); -#else - clicked = GuiButton(closeButtonRec, GuiIconText(ICON_CROSS_SMALL, NULL)); -#endif - GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlignment); - //-------------------------------------------------------------------- - - return clicked; -} - -// Group Box control with text name -void GuiGroupBox(Rectangle bounds, const char *text) -{ - #if !defined(RAYGUI_GROUPBOX_LINE_THICK) - #define RAYGUI_GROUPBOX_LINE_THICK 1 - #endif - - GuiState state = guiState; - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y, RAYGUI_GROUPBOX_LINE_THICK, bounds.height }, 0, BLANK, Fade(GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BORDER_COLOR_DISABLED : LINE_COLOR)), guiAlpha)); - GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y + bounds.height - 1, bounds.width, RAYGUI_GROUPBOX_LINE_THICK }, 0, BLANK, Fade(GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BORDER_COLOR_DISABLED : LINE_COLOR)), guiAlpha)); - GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x + bounds.width - 1, bounds.y, RAYGUI_GROUPBOX_LINE_THICK, bounds.height }, 0, BLANK, Fade(GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BORDER_COLOR_DISABLED : LINE_COLOR)), guiAlpha)); - - GuiLine(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y - GuiGetStyle(DEFAULT, TEXT_SIZE)/2, bounds.width, (float)GuiGetStyle(DEFAULT, TEXT_SIZE) }, text); - //-------------------------------------------------------------------- -} - -// Line control -void GuiLine(Rectangle bounds, const char *text) -{ - #if !defined(RAYGUI_LINE_ORIGIN_SIZE) - #define RAYGUI_LINE_MARGIN_TEXT 12 - #endif - #if !defined(RAYGUI_LINE_TEXT_PADDING) - #define RAYGUI_LINE_TEXT_PADDING 4 - #endif - - GuiState state = guiState; - - Color color = Fade(GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BORDER_COLOR_DISABLED : LINE_COLOR)), guiAlpha); - - // Draw control - //-------------------------------------------------------------------- - if (text == NULL) GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y + bounds.height/2, bounds.width, 1 }, 0, BLANK, color); - else - { - Rectangle textBounds = { 0 }; - textBounds.width = (float)GetTextWidth(text); - textBounds.height = bounds.height; - textBounds.x = bounds.x + RAYGUI_LINE_MARGIN_TEXT; - textBounds.y = bounds.y; - - // Draw line with embedded text label: "--- text --------------" - GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x, bounds.y + bounds.height/2, RAYGUI_LINE_MARGIN_TEXT - RAYGUI_LINE_TEXT_PADDING, 1 }, 0, BLANK, color); - GuiDrawText(text, textBounds, TEXT_ALIGN_LEFT, color); - GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){ bounds.x + 12 + textBounds.width + 4, bounds.y + bounds.height/2, bounds.width - textBounds.width - RAYGUI_LINE_MARGIN_TEXT - RAYGUI_LINE_TEXT_PADDING, 1 }, 0, BLANK, color); - } - //-------------------------------------------------------------------- -} - -// Panel control -void GuiPanel(Rectangle bounds, const char *text) -{ - #if !defined(RAYGUI_PANEL_BORDER_WIDTH) - #define RAYGUI_PANEL_BORDER_WIDTH 1 - #endif - - GuiState state = guiState; - - // Text will be drawn as a header bar (if provided) - Rectangle statusBar = { bounds.x, bounds.y, bounds.width, (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT }; - if ((text != NULL) && (bounds.height < RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT*2.0f)) bounds.height = RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT*2.0f; - - if (text != NULL) - { - // Move panel bounds after the header bar - bounds.y += (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - 1; - bounds.height -= (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT + 1; - } - - // Draw control - //-------------------------------------------------------------------- - if (text != NULL) GuiStatusBar(statusBar, text); // Draw panel header as status bar - - GuiDrawRectangle(bounds, RAYGUI_PANEL_BORDER_WIDTH, Fade(GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BORDER_COLOR_DISABLED: LINE_COLOR)), guiAlpha), - Fade(GetColor(GuiGetStyle(DEFAULT, (state == STATE_DISABLED)? BASE_COLOR_DISABLED : BACKGROUND_COLOR)), guiAlpha)); - //-------------------------------------------------------------------- -} - -// Scroll Panel control -Rectangle GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector2 *scroll) -{ - GuiState state = guiState; - - Vector2 scrollPos = { 0.0f, 0.0f }; - if (scroll != NULL) scrollPos = *scroll; - - // Text will be drawn as a header bar (if provided) - Rectangle statusBar = { bounds.x, bounds.y, bounds.width, (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT }; - if (bounds.height < RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT*2.0f) bounds.height = RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT*2.0f; - - if (text != NULL) - { - // Move panel bounds after the header bar - bounds.y += (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - 1; - bounds.height -= (float)RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT + 1; - } - - bool hasHorizontalScrollBar = (content.width > bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH))? true : false; - bool hasVerticalScrollBar = (content.height > bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH))? true : false; - - // Recheck to account for the other scrollbar being visible - if (!hasHorizontalScrollBar) hasHorizontalScrollBar = (hasVerticalScrollBar && (content.width > (bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH))))? true : false; - if (!hasVerticalScrollBar) hasVerticalScrollBar = (hasHorizontalScrollBar && (content.height > (bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH))))? true : false; - - int horizontalScrollBarWidth = hasHorizontalScrollBar? GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH) : 0; - int verticalScrollBarWidth = hasVerticalScrollBar? GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH) : 0; - Rectangle horizontalScrollBar = { (float)((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)bounds.x + verticalScrollBarWidth : (float)bounds.x) + GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)bounds.y + bounds.height - horizontalScrollBarWidth - GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)bounds.width - verticalScrollBarWidth - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)horizontalScrollBarWidth }; - Rectangle verticalScrollBar = { (float)((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)bounds.x + GuiGetStyle(DEFAULT, BORDER_WIDTH) : (float)bounds.x + bounds.width - verticalScrollBarWidth - GuiGetStyle(DEFAULT, BORDER_WIDTH)), (float)bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)verticalScrollBarWidth, (float)bounds.height - horizontalScrollBarWidth - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) }; - - // Calculate view area (area without the scrollbars) - Rectangle view = (GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? - RAYGUI_CLITERAL(Rectangle){ bounds.x + verticalScrollBarWidth + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth, bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth } : - RAYGUI_CLITERAL(Rectangle){ bounds.x + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth, bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth }; - - // Clip view area to the actual content size - if (view.width > content.width) view.width = content.width; - if (view.height > content.height) view.height = content.height; - - float horizontalMin = hasHorizontalScrollBar? ((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)-verticalScrollBarWidth : 0) - (float)GuiGetStyle(DEFAULT, BORDER_WIDTH) : (((float)GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)-verticalScrollBarWidth : 0) - (float)GuiGetStyle(DEFAULT, BORDER_WIDTH); - float horizontalMax = hasHorizontalScrollBar? content.width - bounds.width + (float)verticalScrollBarWidth + GuiGetStyle(DEFAULT, BORDER_WIDTH) - (((float)GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (float)verticalScrollBarWidth : 0) : (float)-GuiGetStyle(DEFAULT, BORDER_WIDTH); - float verticalMin = hasVerticalScrollBar? 0 : -1.0f; - float verticalMax = hasVerticalScrollBar? content.height - bounds.height + (float)horizontalScrollBarWidth + (float)GuiGetStyle(DEFAULT, BORDER_WIDTH) : (float)-GuiGetStyle(DEFAULT, BORDER_WIDTH); - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check button state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; - else state = STATE_FOCUSED; - -#if defined(SUPPORT_SCROLLBAR_KEY_INPUT) - if (hasHorizontalScrollBar) - { - if (IsKeyDown(KEY_RIGHT)) scrollPos.x -= GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - if (IsKeyDown(KEY_LEFT)) scrollPos.x += GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - } - - if (hasVerticalScrollBar) - { - if (IsKeyDown(KEY_DOWN)) scrollPos.y -= GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - if (IsKeyDown(KEY_UP)) scrollPos.y += GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - } -#endif - float wheelMove = GetMouseWheelMove(); - - // Horizontal scroll (Shift + Mouse wheel) - if (hasHorizontalScrollBar && (IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_RIGHT_SHIFT))) scrollPos.x += wheelMove*20; - else scrollPos.y += wheelMove*20; // Vertical scroll - } - } - - // Normalize scroll values - if (scrollPos.x > -horizontalMin) scrollPos.x = -horizontalMin; - if (scrollPos.x < -horizontalMax) scrollPos.x = -horizontalMax; - if (scrollPos.y > -verticalMin) scrollPos.y = -verticalMin; - if (scrollPos.y < -verticalMax) scrollPos.y = -verticalMax; - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (text != NULL) GuiStatusBar(statusBar, text); // Draw panel header as status bar - - GuiDrawRectangle(bounds, 0, BLANK, GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR))); // Draw background - - // Save size of the scrollbar slider - const int slider = GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE); - - // Draw horizontal scrollbar if visible - if (hasHorizontalScrollBar) - { - // Change scrollbar slider size to show the diff in size between the content width and the widget width - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, (int)(((bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth)/(int)content.width)*((int)bounds.width - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth))); - scrollPos.x = (float)-GuiScrollBar(horizontalScrollBar, (int)-scrollPos.x, (int)horizontalMin, (int)horizontalMax); - } - else scrollPos.x = 0.0f; - - // Draw vertical scrollbar if visible - if (hasVerticalScrollBar) - { - // Change scrollbar slider size to show the diff in size between the content height and the widget height - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, (int)(((bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth)/(int)content.height)*((int)bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth))); - scrollPos.y = (float)-GuiScrollBar(verticalScrollBar, (int)-scrollPos.y, (int)verticalMin, (int)verticalMax); - } - else scrollPos.y = 0.0f; - - // Draw detail corner rectangle if both scroll bars are visible - if (hasHorizontalScrollBar && hasVerticalScrollBar) - { - Rectangle corner = { (GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE)? (bounds.x + GuiGetStyle(DEFAULT, BORDER_WIDTH) + 2) : (horizontalScrollBar.x + horizontalScrollBar.width + 2), verticalScrollBar.y + verticalScrollBar.height + 2, (float)horizontalScrollBarWidth - 4, (float)verticalScrollBarWidth - 4 }; - GuiDrawRectangle(corner, 0, BLANK, Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT + (state*3))), guiAlpha)); - } - - // Draw scrollbar lines depending on current state - GuiDrawRectangle(bounds, GuiGetStyle(DEFAULT, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER + (state*3))), guiAlpha), BLANK); - - // Set scrollbar slider size back to the way it was before - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, slider); - //-------------------------------------------------------------------- - - if (scroll != NULL) *scroll = scrollPos; - - return view; -} - -// Label control -void GuiLabel(Rectangle bounds, const char *text) -{ - GuiState state = guiState; - - // Update control - //-------------------------------------------------------------------- - // ... - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawText(text, GetTextBounds(LABEL, bounds), GuiGetStyle(LABEL, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LABEL, TEXT + (state*3))), guiAlpha)); - //-------------------------------------------------------------------- -} - -// Button control, returns true when clicked -bool GuiButton(Rectangle bounds, const char *text) -{ - GuiState state = guiState; - bool pressed = false; - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check button state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; - else state = STATE_FOCUSED; - - if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) pressed = true; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(BUTTON, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(BUTTON, BORDER + (state*3))), guiAlpha), Fade(GetColor(GuiGetStyle(BUTTON, BASE + (state*3))), guiAlpha)); - GuiDrawText(text, GetTextBounds(BUTTON, bounds), GuiGetStyle(BUTTON, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(BUTTON, TEXT + (state*3))), guiAlpha)); - //------------------------------------------------------------------ - - return pressed; -} - -// Label button control -bool GuiLabelButton(Rectangle bounds, const char *text) -{ - GuiState state = guiState; - bool pressed = false; - - // NOTE: We force bounds.width to be all text - float textWidth = MeasureTextEx(guiFont, text, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), (float)GuiGetStyle(DEFAULT, TEXT_SPACING)).x; - if (bounds.width < textWidth) bounds.width = textWidth; - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check checkbox state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; - else state = STATE_FOCUSED; - - if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) pressed = true; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawText(text, GetTextBounds(LABEL, bounds), GuiGetStyle(LABEL, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LABEL, TEXT + (state*3))), guiAlpha)); - //-------------------------------------------------------------------- - - return pressed; -} - -// Toggle Button control, returns true when active -bool GuiToggle(Rectangle bounds, const char *text, bool active) -{ - GuiState state = guiState; - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check toggle button state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; - else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) - { - state = STATE_NORMAL; - active = !active; - } - else state = STATE_FOCUSED; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (state == STATE_NORMAL) - { - GuiDrawRectangle(bounds, GuiGetStyle(TOGGLE, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TOGGLE, (active? BORDER_COLOR_PRESSED : (BORDER + state*3)))), guiAlpha), Fade(GetColor(GuiGetStyle(TOGGLE, (active? BASE_COLOR_PRESSED : (BASE + state*3)))), guiAlpha)); - GuiDrawText(text, GetTextBounds(TOGGLE, bounds), GuiGetStyle(TOGGLE, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(TOGGLE, (active? TEXT_COLOR_PRESSED : (TEXT + state*3)))), guiAlpha)); - } - else - { - GuiDrawRectangle(bounds, GuiGetStyle(TOGGLE, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TOGGLE, BORDER + state*3)), guiAlpha), Fade(GetColor(GuiGetStyle(TOGGLE, BASE + state*3)), guiAlpha)); - GuiDrawText(text, GetTextBounds(TOGGLE, bounds), GuiGetStyle(TOGGLE, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(TOGGLE, TEXT + state*3)), guiAlpha)); - } - //-------------------------------------------------------------------- - - return active; -} - -// Toggle Group control, returns toggled button index -int GuiToggleGroup(Rectangle bounds, const char *text, int active) -{ - #if !defined(RAYGUI_TOGGLEGROUP_MAX_ITEMS) - #define RAYGUI_TOGGLEGROUP_MAX_ITEMS 32 - #endif - - float initBoundsX = bounds.x; - - // Get substrings items from text (items pointers) - int rows[RAYGUI_TOGGLEGROUP_MAX_ITEMS] = { 0 }; - int itemCount = 0; - const char **items = GuiTextSplit(text, &itemCount, rows); - - int prevRow = rows[0]; - - for (int i = 0; i < itemCount; i++) - { - if (prevRow != rows[i]) - { - bounds.x = initBoundsX; - bounds.y += (bounds.height + GuiGetStyle(TOGGLE, GROUP_PADDING)); - prevRow = rows[i]; - } - - if (i == active) GuiToggle(bounds, items[i], true); - else if (GuiToggle(bounds, items[i], false) == true) active = i; - - bounds.x += (bounds.width + GuiGetStyle(TOGGLE, GROUP_PADDING)); - } - - return active; -} - -// Check Box control, returns true when active -bool GuiCheckBox(Rectangle bounds, const char *text, bool checked) -{ - GuiState state = guiState; - - Rectangle textBounds = { 0 }; - - if (text != NULL) - { - textBounds.width = (float)GetTextWidth(text); - textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x + bounds.width + GuiGetStyle(CHECKBOX, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; - if (GuiGetStyle(CHECKBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_LEFT) textBounds.x = bounds.x - textBounds.width - GuiGetStyle(CHECKBOX, TEXT_PADDING); - } - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - Rectangle totalBounds = { - (GuiGetStyle(CHECKBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_LEFT)? textBounds.x : bounds.x, - bounds.y, - bounds.width + textBounds.width + GuiGetStyle(CHECKBOX, TEXT_PADDING), - bounds.height, - }; - - // Check checkbox state - if (CheckCollisionPointRec(mousePoint, totalBounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; - else state = STATE_FOCUSED; - - if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) checked = !checked; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(CHECKBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(CHECKBOX, BORDER + (state*3))), guiAlpha), BLANK); - - if (checked) - { - Rectangle check = { bounds.x + GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING), - bounds.y + GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING), - bounds.width - 2*(GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING)), - bounds.height - 2*(GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING)) }; - GuiDrawRectangle(check, 0, BLANK, Fade(GetColor(GuiGetStyle(CHECKBOX, TEXT + state*3)), guiAlpha)); - } - - GuiDrawText(text, textBounds, (GuiGetStyle(CHECKBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_RIGHT)? TEXT_ALIGN_LEFT : TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(LABEL, TEXT + (state*3))), guiAlpha)); - //-------------------------------------------------------------------- - - return checked; -} - -// Combo Box control, returns selected item index -int GuiComboBox(Rectangle bounds, const char *text, int active) -{ - GuiState state = guiState; - - bounds.width -= (GuiGetStyle(COMBOBOX, COMBO_BUTTON_WIDTH) + GuiGetStyle(COMBOBOX, COMBO_BUTTON_SPACING)); - - Rectangle selector = { (float)bounds.x + bounds.width + GuiGetStyle(COMBOBOX, COMBO_BUTTON_SPACING), - (float)bounds.y, (float)GuiGetStyle(COMBOBOX, COMBO_BUTTON_WIDTH), (float)bounds.height }; - - // Get substrings items from text (items pointers, lengths and count) - int itemCount = 0; - const char **items = GuiTextSplit(text, &itemCount, NULL); - - if (active < 0) active = 0; - else if (active > itemCount - 1) active = itemCount - 1; - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked && (itemCount > 1)) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds) || - CheckCollisionPointRec(mousePoint, selector)) - { - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - active += 1; - if (active >= itemCount) active = 0; - } - - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; - else state = STATE_FOCUSED; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - // Draw combo box main - GuiDrawRectangle(bounds, GuiGetStyle(COMBOBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(COMBOBOX, BORDER + (state*3))), guiAlpha), Fade(GetColor(GuiGetStyle(COMBOBOX, BASE + (state*3))), guiAlpha)); - GuiDrawText(items[active], GetTextBounds(COMBOBOX, bounds), GuiGetStyle(COMBOBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(COMBOBOX, TEXT + (state*3))), guiAlpha)); - - // Draw selector using a custom button - // NOTE: BORDER_WIDTH and TEXT_ALIGNMENT forced values - int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); - int tempTextAlign = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); - GuiSetStyle(BUTTON, BORDER_WIDTH, 1); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); - - GuiButton(selector, TextFormat("%i/%i", active + 1, itemCount)); - - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlign); - GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); - //-------------------------------------------------------------------- - - return active; -} - -// Dropdown Box control -// NOTE: Returns mouse click -bool GuiDropdownBox(Rectangle bounds, const char *text, int *active, bool editMode) -{ - GuiState state = guiState; - int itemSelected = *active; - int itemFocused = -1; - - // Get substrings items from text (items pointers, lengths and count) - int itemCount = 0; - const char **items = GuiTextSplit(text, &itemCount, NULL); - - Rectangle boundsOpen = bounds; - boundsOpen.height = (itemCount + 1)*(bounds.height + GuiGetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_SPACING)); - - Rectangle itemBounds = bounds; - - bool pressed = false; // Check mouse button pressed - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && (editMode || !guiLocked) && (itemCount > 1)) - { - Vector2 mousePoint = GetMousePosition(); - - if (editMode) - { - state = STATE_PRESSED; - - // Check if mouse has been pressed or released outside limits - if (!CheckCollisionPointRec(mousePoint, boundsOpen)) - { - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) || IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) pressed = true; - } - - // Check if already selected item has been pressed again - if (CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) pressed = true; - - // Check focused and selected item - for (int i = 0; i < itemCount; i++) - { - // Update item rectangle y position for next item - itemBounds.y += (bounds.height + GuiGetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_SPACING)); - - if (CheckCollisionPointRec(mousePoint, itemBounds)) - { - itemFocused = i; - if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) - { - itemSelected = i; - pressed = true; // Item selected, change to editMode = false - } - break; - } - } - - itemBounds = bounds; - } - else - { - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - pressed = true; - state = STATE_PRESSED; - } - else state = STATE_FOCUSED; - } - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (editMode) GuiPanel(boundsOpen, NULL); - - GuiDrawRectangle(bounds, GuiGetStyle(DROPDOWNBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BORDER + state*3)), guiAlpha), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BASE + state*3)), guiAlpha)); - GuiDrawText(items[itemSelected], GetTextBounds(DEFAULT, bounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + state*3)), guiAlpha)); - - if (editMode) - { - // Draw visible items - for (int i = 0; i < itemCount; i++) - { - // Update item rectangle y position for next item - itemBounds.y += (bounds.height + GuiGetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_SPACING)); - - if (i == itemSelected) - { - GuiDrawRectangle(itemBounds, GuiGetStyle(DROPDOWNBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BORDER_COLOR_PRESSED)), guiAlpha), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BASE_COLOR_PRESSED)), guiAlpha)); - GuiDrawText(items[i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT_COLOR_PRESSED)), guiAlpha)); - } - else if (i == itemFocused) - { - GuiDrawRectangle(itemBounds, GuiGetStyle(DROPDOWNBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BORDER_COLOR_FOCUSED)), guiAlpha), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BASE_COLOR_FOCUSED)), guiAlpha)); - GuiDrawText(items[i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT_COLOR_FOCUSED)), guiAlpha)); - } - else GuiDrawText(items[i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT_COLOR_NORMAL)), guiAlpha)); - } - } - - // Draw arrows (using icon if available) -#if defined(RAYGUI_NO_ICONS) - GuiDrawText("v", RAYGUI_CLITERAL(Rectangle){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING), bounds.y + bounds.height/2 - 2, 10, 10 }, - TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha)); -#else - GuiDrawText("#120#", RAYGUI_CLITERAL(Rectangle){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING), bounds.y + bounds.height/2 - 6, 10, 10 }, - TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha)); // ICON_ARROW_DOWN_FILL -#endif - //-------------------------------------------------------------------- - - *active = itemSelected; - return pressed; -} - -// Text Box control, updates input text -// NOTE 2: Returns if KEY_ENTER pressed (useful for data validation) -bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode) -{ - GuiState state = guiState; - bool pressed = false; - - Rectangle cursor = { - bounds.x + GuiGetStyle(TEXTBOX, TEXT_PADDING) + GetTextWidth(text) + 2, - bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE), - 4, - (float)GuiGetStyle(DEFAULT, TEXT_SIZE)*2 - }; - - if (cursor.height >= bounds.height) cursor.height = bounds.height - GuiGetStyle(TEXTBOX, BORDER_WIDTH)*2; - if (cursor.y < (bounds.y + GuiGetStyle(TEXTBOX, BORDER_WIDTH))) cursor.y = bounds.y + GuiGetStyle(TEXTBOX, BORDER_WIDTH); - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (editMode) - { - state = STATE_PRESSED; - - int key = GetCharPressed(); // Returns codepoint as Unicode - int keyCount = (int)strlen(text); - int byteSize = 0; - const char *textUTF8 = CodepointToUTF8(key, &byteSize); - - // Only allow keys in range [32..125] - if ((keyCount + byteSize) < textSize) - { - float maxWidth = (bounds.width - (GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING)*2)); - - if ((GetTextWidth(text) < (maxWidth - GuiGetStyle(DEFAULT, TEXT_SIZE))) && (key >= 32)) - { - for (int i = 0; i < byteSize; i++) - { - text[keyCount] = textUTF8[i]; - keyCount++; - } - - text[keyCount] = '\0'; - } - } - - // Delete text - if (keyCount > 0) - { - if (IsKeyPressed(KEY_BACKSPACE)) - { - while ((keyCount > 0) && ((text[--keyCount] & 0xc0) == 0x80)); - text[keyCount] = '\0'; - } - } - - if (IsKeyPressed(KEY_ENTER) || (!CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) pressed = true; - - // Check text alignment to position cursor properly - int textAlignment = GuiGetStyle(TEXTBOX, TEXT_ALIGNMENT); - if (textAlignment == TEXT_ALIGN_CENTER) cursor.x = bounds.x + GetTextWidth(text)/2 + bounds.width/2 + 1; - else if (textAlignment == TEXT_ALIGN_RIGHT) cursor.x = bounds.x + bounds.width - GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING); - } - else - { - if (CheckCollisionPointRec(mousePoint, bounds)) - { - state = STATE_FOCUSED; - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) pressed = true; - } - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (state == STATE_PRESSED) - { - GuiDrawRectangle(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state*3))), guiAlpha), Fade(GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_PRESSED)), guiAlpha)); - } - else if (state == STATE_DISABLED) - { - GuiDrawRectangle(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state*3))), guiAlpha), Fade(GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_DISABLED)), guiAlpha)); - } - else GuiDrawRectangle(bounds, 1, Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state*3))), guiAlpha), BLANK); - - GuiDrawText(text, GetTextBounds(TEXTBOX, bounds), GuiGetStyle(TEXTBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(TEXTBOX, TEXT + (state*3))), guiAlpha)); - - // Draw cursor - if (editMode) GuiDrawRectangle(cursor, 0, BLANK, Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER_COLOR_PRESSED)), guiAlpha)); - //-------------------------------------------------------------------- - - return pressed; -} - -// Spinner control, returns selected value -bool GuiSpinner(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode) -{ - GuiState state = guiState; - - bool pressed = false; - int tempValue = *value; - - Rectangle spinner = { bounds.x + GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH) + GuiGetStyle(SPINNER, SPIN_BUTTON_SPACING), bounds.y, - bounds.width - 2*(GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH) + GuiGetStyle(SPINNER, SPIN_BUTTON_SPACING)), bounds.height }; - Rectangle leftButtonBound = { (float)bounds.x, (float)bounds.y, (float)GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.height }; - Rectangle rightButtonBound = { (float)bounds.x + bounds.width - GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.y, (float)GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.height }; - - Rectangle textBounds = { 0 }; - if (text != NULL) - { - textBounds.width = (float)GetTextWidth(text); - textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x + bounds.width + GuiGetStyle(SPINNER, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; - if (GuiGetStyle(SPINNER, TEXT_ALIGNMENT) == TEXT_ALIGN_LEFT) textBounds.x = bounds.x - textBounds.width - GuiGetStyle(SPINNER, TEXT_PADDING); - } - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check spinner state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; - else state = STATE_FOCUSED; - } - } - -#if defined(RAYGUI_NO_ICONS) - if (GuiButton(leftButtonBound, "<")) tempValue--; - if (GuiButton(rightButtonBound, ">")) tempValue++; -#else - if (GuiButton(leftButtonBound, GuiIconText(ICON_ARROW_LEFT_FILL, NULL))) tempValue--; - if (GuiButton(rightButtonBound, GuiIconText(ICON_ARROW_RIGHT_FILL, NULL))) tempValue++; -#endif - - if (!editMode) - { - if (tempValue < minValue) tempValue = minValue; - if (tempValue > maxValue) tempValue = maxValue; - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - // TODO: Set Spinner properties for ValueBox - pressed = GuiValueBox(spinner, NULL, &tempValue, minValue, maxValue, editMode); - - // Draw value selector custom buttons - // NOTE: BORDER_WIDTH and TEXT_ALIGNMENT forced values - int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); - int tempTextAlign = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); - GuiSetStyle(BUTTON, BORDER_WIDTH, GuiGetStyle(SPINNER, BORDER_WIDTH)); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); - - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlign); - GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); - - // Draw text label if provided - GuiDrawText(text, textBounds, (GuiGetStyle(SPINNER, TEXT_ALIGNMENT) == TEXT_ALIGN_RIGHT)? TEXT_ALIGN_LEFT : TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(LABEL, TEXT + (state*3))), guiAlpha)); - //-------------------------------------------------------------------- - - *value = tempValue; - return pressed; -} - -// Value Box control, updates input text with numbers -// NOTE: Requires static variables: frameCounter -bool GuiValueBox(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode) -{ - #if !defined(RAYGUI_VALUEBOX_MAX_CHARS) - #define RAYGUI_VALUEBOX_MAX_CHARS 32 - #endif - - GuiState state = guiState; - bool pressed = false; - - char textValue[RAYGUI_VALUEBOX_MAX_CHARS + 1] = "\0"; - sprintf(textValue, "%i", *value); - - Rectangle textBounds = { 0 }; - if (text != NULL) - { - textBounds.width = (float)GetTextWidth(text); - textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x + bounds.width + GuiGetStyle(VALUEBOX, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; - if (GuiGetStyle(VALUEBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_LEFT) textBounds.x = bounds.x - textBounds.width - GuiGetStyle(VALUEBOX, TEXT_PADDING); - } - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - bool valueHasChanged = false; - - if (editMode) - { - state = STATE_PRESSED; - - int keyCount = (int)strlen(textValue); - - // Only allow keys in range [48..57] - if (keyCount < RAYGUI_VALUEBOX_MAX_CHARS) - { - if (GetTextWidth(textValue) < bounds.width) - { - int key = GetCharPressed(); - if ((key >= 48) && (key <= 57)) - { - textValue[keyCount] = (char)key; - keyCount++; - valueHasChanged = true; - } - } - } - - // Delete text - if (keyCount > 0) - { - if (IsKeyPressed(KEY_BACKSPACE)) - { - keyCount--; - textValue[keyCount] = '\0'; - valueHasChanged = true; - } - } - - if (valueHasChanged) *value = TextToInteger(textValue); - - // NOTE: We are not clamp values until user input finishes - //if (*value > maxValue) *value = maxValue; - //else if (*value < minValue) *value = minValue; - - if (IsKeyPressed(KEY_ENTER) || (!CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) pressed = true; - } - else - { - if (*value > maxValue) *value = maxValue; - else if (*value < minValue) *value = minValue; - - if (CheckCollisionPointRec(mousePoint, bounds)) - { - state = STATE_FOCUSED; - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) pressed = true; - } - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - Color baseColor = BLANK; - if (state == STATE_PRESSED) baseColor = GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_PRESSED)); - else if (state == STATE_DISABLED) baseColor = GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_DISABLED)); - - // WARNING: BLANK color does not work properly with Fade() - GuiDrawRectangle(bounds, GuiGetStyle(VALUEBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(VALUEBOX, BORDER + (state*3))), guiAlpha), baseColor); - GuiDrawText(textValue, GetTextBounds(VALUEBOX, bounds), TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(VALUEBOX, TEXT + (state*3))), guiAlpha)); - - // Draw cursor - if (editMode) - { - // NOTE: ValueBox internal text is always centered - Rectangle cursor = { bounds.x + GetTextWidth(textValue)/2 + bounds.width/2 + 2, bounds.y + 2*GuiGetStyle(VALUEBOX, BORDER_WIDTH), 4, bounds.height - 4*GuiGetStyle(VALUEBOX, BORDER_WIDTH) }; - GuiDrawRectangle(cursor, 0, BLANK, Fade(GetColor(GuiGetStyle(VALUEBOX, BORDER_COLOR_PRESSED)), guiAlpha)); - } - - // Draw text label if provided - GuiDrawText(text, textBounds, (GuiGetStyle(VALUEBOX, TEXT_ALIGNMENT) == TEXT_ALIGN_RIGHT)? TEXT_ALIGN_LEFT : TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(LABEL, TEXT + (state*3))), guiAlpha)); - //-------------------------------------------------------------------- - - return pressed; -} - -// Text Box control with multiple lines -bool GuiTextBoxMulti(Rectangle bounds, char *text, int textSize, bool editMode) -{ - GuiState state = guiState; - bool pressed = false; - - Rectangle textAreaBounds = { - bounds.x + GuiGetStyle(TEXTBOX, BORDER_WIDTH) + GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING), - bounds.y + GuiGetStyle(TEXTBOX, BORDER_WIDTH) + GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING), - bounds.width - 2*(GuiGetStyle(TEXTBOX, BORDER_WIDTH) + GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING)), - bounds.height - 2*(GuiGetStyle(TEXTBOX, BORDER_WIDTH) + GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING)) - }; - - // Cursor position, [x, y] values should be updated - Rectangle cursor = { 0, -1, 4, (float)GuiGetStyle(DEFAULT, TEXT_SIZE) + 2 }; - - float scaleFactor = (float)GuiGetStyle(DEFAULT, TEXT_SIZE)/(float)guiFont.baseSize; // Character rectangle scaling factor - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (editMode) - { - state = STATE_PRESSED; - - // We get an Unicode codepoint - int codepoint = GetCharPressed(); - int textLength = (int)strlen(text); // Length in bytes (UTF-8 string) - - // Introduce characters - if (textLength < (textSize - 1)) - { - if (IsKeyPressed(KEY_ENTER)) - { - text[textLength] = '\n'; - textLength++; - } - else if (codepoint >= 32) - { - // Supports Unicode inputs -> Encoded to UTF-8 - int charUTF8Length = 0; - const char *charEncoded = CodepointToUTF8(codepoint, &charUTF8Length); - memcpy(text + textLength, charEncoded, charUTF8Length); - textLength += charUTF8Length; - } - } - - // Delete characters - if (textLength > 0) - { - if (IsKeyPressed(KEY_BACKSPACE)) - { - if ((unsigned char)text[textLength - 1] < 127) - { - // Remove ASCII equivalent character (1 byte) - textLength--; - text[textLength] = '\0'; - } - else - { - // Remove latest UTF-8 unicode character introduced (n bytes) - int charUTF8Length = 0; - while (((unsigned char)text[textLength - 1 - charUTF8Length] & 0b01000000) == 0) charUTF8Length++; - - textLength -= (charUTF8Length + 1); - text[textLength] = '\0'; - } - } - } - - // Exit edit mode - if (!CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) pressed = true; - } - else - { - if (CheckCollisionPointRec(mousePoint, bounds)) - { - state = STATE_FOCUSED; - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) pressed = true; - } - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (state == STATE_PRESSED) - { - GuiDrawRectangle(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state*3))), guiAlpha), Fade(GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_PRESSED)), guiAlpha)); - } - else if (state == STATE_DISABLED) - { - GuiDrawRectangle(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state*3))), guiAlpha), Fade(GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_DISABLED)), guiAlpha)); - } - else GuiDrawRectangle(bounds, 1, Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state*3))), guiAlpha), BLANK); - - int wrapMode = 1; // 0-No wrap, 1-Char wrap, 2-Word wrap - Vector2 cursorPos = { textAreaBounds.x, textAreaBounds.y }; - - //int lastSpacePos = 0; - //int lastSpaceWidth = 0; - //int lastSpaceCursorPos = 0; - - for (int i = 0, codepointLength = 0; text[i] != '\0'; i += codepointLength) - { - int codepoint = GetCodepoint(text + i, &codepointLength); - int index = GetGlyphIndex(guiFont, codepoint); // If requested codepoint is not found, we get '?' (0x3f) - Rectangle atlasRec = guiFont.recs[index]; - GlyphInfo glyphInfo = guiFont.glyphs[index]; // Glyph measures - - if ((codepointLength == 1) && (codepoint == '\n')) - { - cursorPos.y += (guiFont.baseSize*scaleFactor + GuiGetStyle(TEXTBOX, TEXT_LINES_SPACING)); // Line feed - cursorPos.x = textAreaBounds.x; // Carriage return - } - else - { - if (wrapMode == 1) - { - int glyphWidth = 0; - if (glyphInfo.advanceX != 0) glyphWidth += glyphInfo.advanceX; - else glyphWidth += (int)(atlasRec.width + glyphInfo.offsetX); - - // Jump line if the end of the text box area has been reached - if ((cursorPos.x + (glyphWidth*scaleFactor)) > (textAreaBounds.x + textAreaBounds.width)) - { - cursorPos.y += (guiFont.baseSize*scaleFactor + GuiGetStyle(TEXTBOX, TEXT_LINES_SPACING)); // Line feed - cursorPos.x = textAreaBounds.x; // Carriage return - } - } - else if (wrapMode == 2) - { - /* - if ((codepointLength == 1) && (codepoint == ' ')) - { - lastSpacePos = i; - lastSpaceWidth = 0; - lastSpaceCursorPos = cursorPos.x; - } - - // Jump line if last word reaches end of text box area - if ((lastSpaceCursorPos + lastSpaceWidth) > (textAreaBounds.x + textAreaBounds.width)) - { - cursorPos.y += 12; // Line feed - cursorPos.x = textAreaBounds.x; // Carriage return - } - */ - } - - // Draw current character glyph - DrawTextCodepoint(guiFont, codepoint, cursorPos, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), Fade(GetColor(GuiGetStyle(TEXTBOX, TEXT + (state*3))), guiAlpha)); - - int glyphWidth = 0; - if (glyphInfo.advanceX != 0) glyphWidth += glyphInfo.advanceX; - else glyphWidth += (int)(atlasRec.width + glyphInfo.offsetX); - - cursorPos.x += (glyphWidth*scaleFactor + (float)GuiGetStyle(DEFAULT, TEXT_SPACING)); - //if (i > lastSpacePos) lastSpaceWidth += (atlasRec.width + (float)GuiGetStyle(DEFAULT, TEXT_SPACING)); - } - } - - cursor.x = cursorPos.x; - cursor.y = cursorPos.y; - - // Draw cursor position considering text glyphs - if (editMode) GuiDrawRectangle(cursor, 0, BLANK, Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER_COLOR_PRESSED)), guiAlpha)); - //-------------------------------------------------------------------- - - return pressed; -} - -// Slider control with pro parameters -// NOTE: Other GuiSlider*() controls use this one -float GuiSliderPro(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue, int sliderWidth) -{ - GuiState state = guiState; - - int sliderValue = (int)(((value - minValue)/(maxValue - minValue))*(bounds.width - 2*GuiGetStyle(SLIDER, BORDER_WIDTH))); - - Rectangle slider = { bounds.x, bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH) + GuiGetStyle(SLIDER, SLIDER_PADDING), - 0, bounds.height - 2*GuiGetStyle(SLIDER, BORDER_WIDTH) - 2*GuiGetStyle(SLIDER, SLIDER_PADDING) }; - - if (sliderWidth > 0) // Slider - { - slider.x += (sliderValue - sliderWidth/2); - slider.width = (float)sliderWidth; - } - else if (sliderWidth == 0) // SliderBar - { - slider.x += GuiGetStyle(SLIDER, BORDER_WIDTH); - slider.width = (float)sliderValue; - } - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - state = STATE_PRESSED; - - // Get equivalent value and slider position from mousePoint.x - value = ((maxValue - minValue)*(mousePoint.x - (float)(bounds.x + sliderWidth/2)))/(float)(bounds.width - sliderWidth) + minValue; - - if (sliderWidth > 0) slider.x = mousePoint.x - slider.width/2; // Slider - else if (sliderWidth == 0) slider.width = (float)sliderValue; // SliderBar - } - else state = STATE_FOCUSED; - } - - if (value > maxValue) value = maxValue; - else if (value < minValue) value = minValue; - } - - // Bar limits check - if (sliderWidth > 0) // Slider - { - if (slider.x <= (bounds.x + GuiGetStyle(SLIDER, BORDER_WIDTH))) slider.x = bounds.x + GuiGetStyle(SLIDER, BORDER_WIDTH); - else if ((slider.x + slider.width) >= (bounds.x + bounds.width)) slider.x = bounds.x + bounds.width - slider.width - GuiGetStyle(SLIDER, BORDER_WIDTH); - } - else if (sliderWidth == 0) // SliderBar - { - if (slider.width > bounds.width) slider.width = bounds.width - 2*GuiGetStyle(SLIDER, BORDER_WIDTH); - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(SLIDER, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(SLIDER, BORDER + (state*3))), guiAlpha), Fade(GetColor(GuiGetStyle(SLIDER, (state != STATE_DISABLED)? BASE_COLOR_NORMAL : BASE_COLOR_DISABLED)), guiAlpha)); - - // Draw slider internal bar (depends on state) - if ((state == STATE_NORMAL) || (state == STATE_PRESSED)) GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, BASE_COLOR_PRESSED)), guiAlpha)); - else if (state == STATE_FOCUSED) GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, TEXT_COLOR_FOCUSED)), guiAlpha)); - - // Draw left/right text if provided - if (textLeft != NULL) - { - Rectangle textBounds = { 0 }; - textBounds.width = (float)GetTextWidth(textLeft); - textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x - textBounds.width - GuiGetStyle(SLIDER, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; - - GuiDrawText(textLeft, textBounds, TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(SLIDER, TEXT + (state*3))), guiAlpha)); - } - - if (textRight != NULL) - { - Rectangle textBounds = { 0 }; - textBounds.width = (float)GetTextWidth(textRight); - textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x + bounds.width + GuiGetStyle(SLIDER, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; - - GuiDrawText(textRight, textBounds, TEXT_ALIGN_LEFT, Fade(GetColor(GuiGetStyle(SLIDER, TEXT + (state*3))), guiAlpha)); - } - //-------------------------------------------------------------------- - - return value; -} - -// Slider control extended, returns selected value and has text -float GuiSlider(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue) -{ - return GuiSliderPro(bounds, textLeft, textRight, value, minValue, maxValue, GuiGetStyle(SLIDER, SLIDER_WIDTH)); -} - -// Slider Bar control extended, returns selected value -float GuiSliderBar(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue) -{ - return GuiSliderPro(bounds, textLeft, textRight, value, minValue, maxValue, 0); -} - -// Progress Bar control extended, shows current progress value -float GuiProgressBar(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue) -{ - GuiState state = guiState; - - Rectangle progress = { bounds.x + GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), - bounds.y + GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) + GuiGetStyle(PROGRESSBAR, PROGRESS_PADDING), 0, - bounds.height - 2*GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) - 2*GuiGetStyle(PROGRESSBAR, PROGRESS_PADDING) }; - - // Update control - //-------------------------------------------------------------------- - if (value > maxValue) value = maxValue; - - if (state != STATE_DISABLED) progress.width = ((float)(value/(maxValue - minValue))*(float)(bounds.width - 2*GuiGetStyle(PROGRESSBAR, BORDER_WIDTH))); - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(PROGRESSBAR, BORDER + (state*3))), guiAlpha), BLANK); - - // Draw slider internal progress bar (depends on state) - if ((state == STATE_NORMAL) || (state == STATE_PRESSED)) GuiDrawRectangle(progress, 0, BLANK, Fade(GetColor(GuiGetStyle(PROGRESSBAR, BASE_COLOR_PRESSED)), guiAlpha)); - else if (state == STATE_FOCUSED) GuiDrawRectangle(progress, 0, BLANK, Fade(GetColor(GuiGetStyle(PROGRESSBAR, TEXT_COLOR_FOCUSED)), guiAlpha)); - - // Draw left/right text if provided - if (textLeft != NULL) - { - Rectangle textBounds = { 0 }; - textBounds.width = (float)GetTextWidth(textLeft); - textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x - textBounds.width - GuiGetStyle(PROGRESSBAR, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; - - GuiDrawText(textLeft, textBounds, TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(PROGRESSBAR, TEXT + (state*3))), guiAlpha)); - } - - if (textRight != NULL) - { - Rectangle textBounds = { 0 }; - textBounds.width = (float)GetTextWidth(textRight); - textBounds.height = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x + bounds.width + GuiGetStyle(PROGRESSBAR, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height/2 - GuiGetStyle(DEFAULT, TEXT_SIZE)/2; - - GuiDrawText(textRight, textBounds, TEXT_ALIGN_LEFT, Fade(GetColor(GuiGetStyle(PROGRESSBAR, TEXT + (state*3))), guiAlpha)); - } - //-------------------------------------------------------------------- - - return value; -} - -// Status Bar control -void GuiStatusBar(Rectangle bounds, const char *text) -{ - GuiState state = guiState; - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(STATUSBAR, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(STATUSBAR, (state != STATE_DISABLED)? BORDER_COLOR_NORMAL : BORDER_COLOR_DISABLED)), guiAlpha), - Fade(GetColor(GuiGetStyle(STATUSBAR, (state != STATE_DISABLED)? BASE_COLOR_NORMAL : BASE_COLOR_DISABLED)), guiAlpha)); - GuiDrawText(text, GetTextBounds(STATUSBAR, bounds), GuiGetStyle(STATUSBAR, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(STATUSBAR, (state != STATE_DISABLED)? TEXT_COLOR_NORMAL : TEXT_COLOR_DISABLED)), guiAlpha)); - //-------------------------------------------------------------------- -} - -// Dummy rectangle control, intended for placeholding -void GuiDummyRec(Rectangle bounds, const char *text) -{ - GuiState state = guiState; - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check button state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) state = STATE_PRESSED; - else state = STATE_FOCUSED; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, 0, BLANK, Fade(GetColor(GuiGetStyle(DEFAULT, (state != STATE_DISABLED)? BASE_COLOR_NORMAL : BASE_COLOR_DISABLED)), guiAlpha)); - GuiDrawText(text, GetTextBounds(DEFAULT, bounds), TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(BUTTON, (state != STATE_DISABLED)? TEXT_COLOR_NORMAL : TEXT_COLOR_DISABLED)), guiAlpha)); - //------------------------------------------------------------------ -} - -// List View control -int GuiListView(Rectangle bounds, const char *text, int *scrollIndex, int active) -{ - int itemCount = 0; - const char **items = NULL; - - if (text != NULL) items = GuiTextSplit(text, &itemCount, NULL); - - return GuiListViewEx(bounds, items, itemCount, NULL, scrollIndex, active); -} - -// List View control with extended parameters -int GuiListViewEx(Rectangle bounds, const char **text, int count, int *focus, int *scrollIndex, int active) -{ - GuiState state = guiState; - int itemFocused = (focus == NULL)? -1 : *focus; - int itemSelected = active; - - // Check if we need a scroll bar - bool useScrollBar = false; - if ((GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING))*count > bounds.height) useScrollBar = true; - - // Define base item rectangle [0] - Rectangle itemBounds = { 0 }; - itemBounds.x = bounds.x + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING); - itemBounds.y = bounds.y + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING) + GuiGetStyle(DEFAULT, BORDER_WIDTH); - itemBounds.width = bounds.width - 2*GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING) - GuiGetStyle(DEFAULT, BORDER_WIDTH); - itemBounds.height = (float)GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT); - if (useScrollBar) itemBounds.width -= GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH); - - // Get items on the list - int visibleItems = (int)bounds.height/(GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING)); - if (visibleItems > count) visibleItems = count; - - int startIndex = (scrollIndex == NULL)? 0 : *scrollIndex; - if ((startIndex < 0) || (startIndex > (count - visibleItems))) startIndex = 0; - int endIndex = startIndex + visibleItems; - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check mouse inside list view - if (CheckCollisionPointRec(mousePoint, bounds)) - { - state = STATE_FOCUSED; - - // Check focused and selected item - for (int i = 0; i < visibleItems; i++) - { - if (CheckCollisionPointRec(mousePoint, itemBounds)) - { - itemFocused = startIndex + i; - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - if (itemSelected == (startIndex + i)) itemSelected = -1; - else itemSelected = startIndex + i; - } - break; - } - - // Update item rectangle y position for next item - itemBounds.y += (GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING)); - } - - if (useScrollBar) - { - int wheelMove = (int)GetMouseWheelMove(); - startIndex -= wheelMove; - - if (startIndex < 0) startIndex = 0; - else if (startIndex > (count - visibleItems)) startIndex = count - visibleItems; - - endIndex = startIndex + visibleItems; - if (endIndex > count) endIndex = count; - } - } - else itemFocused = -1; - - // Reset item rectangle y to [0] - itemBounds.y = bounds.y + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING) + GuiGetStyle(DEFAULT, BORDER_WIDTH); - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(DEFAULT, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER + state*3)), guiAlpha), GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR))); // Draw background - - // Draw visible items - for (int i = 0; ((i < visibleItems) && (text != NULL)); i++) - { - if (state == STATE_DISABLED) - { - if ((startIndex + i) == itemSelected) GuiDrawRectangle(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_DISABLED)), guiAlpha), Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_DISABLED)), guiAlpha)); - - GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_DISABLED)), guiAlpha)); - } - else - { - if ((startIndex + i) == itemSelected) - { - // Draw item selected - GuiDrawRectangle(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_PRESSED)), guiAlpha), Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_PRESSED)), guiAlpha)); - GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_PRESSED)), guiAlpha)); - } - else if ((startIndex + i) == itemFocused) - { - // Draw item focused - GuiDrawRectangle(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_FOCUSED)), guiAlpha), Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_FOCUSED)), guiAlpha)); - GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_FOCUSED)), guiAlpha)); - } - else - { - // Draw item normal - GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_NORMAL)), guiAlpha)); - } - } - - // Update item rectangle y position for next item - itemBounds.y += (GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_SPACING)); - } - - if (useScrollBar) - { - Rectangle scrollBarBounds = { - bounds.x + bounds.width - GuiGetStyle(LISTVIEW, BORDER_WIDTH) - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH), - bounds.y + GuiGetStyle(LISTVIEW, BORDER_WIDTH), (float)GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH), - bounds.height - 2*GuiGetStyle(DEFAULT, BORDER_WIDTH) - }; - - // Calculate percentage of visible items and apply same percentage to scrollbar - float percentVisible = (float)(endIndex - startIndex)/count; - float sliderSize = bounds.height*percentVisible; - - int prevSliderSize = GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE); // Save default slider size - int prevScrollSpeed = GuiGetStyle(SCROLLBAR, SCROLL_SPEED); // Save default scroll speed - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, (int)sliderSize); // Change slider size - GuiSetStyle(SCROLLBAR, SCROLL_SPEED, count - visibleItems); // Change scroll speed - - startIndex = GuiScrollBar(scrollBarBounds, startIndex, 0, count - visibleItems); - - GuiSetStyle(SCROLLBAR, SCROLL_SPEED, prevScrollSpeed); // Reset scroll speed to default - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, prevSliderSize); // Reset slider size to default - } - //-------------------------------------------------------------------- - - if (focus != NULL) *focus = itemFocused; - if (scrollIndex != NULL) *scrollIndex = startIndex; - - return itemSelected; -} - -// Color Panel control -Color GuiColorPanel(Rectangle bounds, const char *text, Color color) -{ - const Color colWhite = { 255, 255, 255, 255 }; - const Color colBlack = { 0, 0, 0, 255 }; - - GuiState state = guiState; - Vector2 pickerSelector = { 0 }; - - Vector3 vcolor = { (float)color.r/255.0f, (float)color.g/255.0f, (float)color.b/255.0f }; - Vector3 hsv = ConvertRGBtoHSV(vcolor); - - pickerSelector.x = bounds.x + (float)hsv.y*bounds.width; // HSV: Saturation - pickerSelector.y = bounds.y + (1.0f - (float)hsv.z)*bounds.height; // HSV: Value - - float hue = -1.0f; - Vector3 maxHue = { hue >= 0.0f ? hue : hsv.x, 1.0f, 1.0f }; - Vector3 rgbHue = ConvertHSVtoRGB(maxHue); - Color maxHueCol = { (unsigned char)(255.0f*rgbHue.x), - (unsigned char)(255.0f*rgbHue.y), - (unsigned char)(255.0f*rgbHue.z), 255 }; - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - state = STATE_PRESSED; - pickerSelector = mousePoint; - - // Calculate color from picker - Vector2 colorPick = { pickerSelector.x - bounds.x, pickerSelector.y - bounds.y }; - - colorPick.x /= (float)bounds.width; // Get normalized value on x - colorPick.y /= (float)bounds.height; // Get normalized value on y - - hsv.y = colorPick.x; - hsv.z = 1.0f - colorPick.y; - - Vector3 rgb = ConvertHSVtoRGB(hsv); - - // NOTE: Vector3ToColor() only available on raylib 1.8.1 - color = RAYGUI_CLITERAL(Color){ (unsigned char)(255.0f*rgb.x), - (unsigned char)(255.0f*rgb.y), - (unsigned char)(255.0f*rgb.z), - (unsigned char)(255.0f*(float)color.a/255.0f) }; - - } - else state = STATE_FOCUSED; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (state != STATE_DISABLED) - { - DrawRectangleGradientEx(bounds, Fade(colWhite, guiAlpha), Fade(colWhite, guiAlpha), Fade(maxHueCol, guiAlpha), Fade(maxHueCol, guiAlpha)); - DrawRectangleGradientEx(bounds, Fade(colBlack, 0), Fade(colBlack, guiAlpha), Fade(colBlack, guiAlpha), Fade(colBlack, 0)); - - // Draw color picker: selector - Rectangle selector = { pickerSelector.x - GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE)/2, pickerSelector.y - GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE)/2, (float)GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE), (float)GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE) }; - GuiDrawRectangle(selector, 0, BLANK, Fade(colWhite, guiAlpha)); - } - else - { - DrawRectangleGradientEx(bounds, Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), guiAlpha), Fade(Fade(colBlack, 0.6f), guiAlpha), Fade(Fade(colBlack, 0.6f), guiAlpha), Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), 0.6f), guiAlpha)); - } - - GuiDrawRectangle(bounds, GuiGetStyle(COLORPICKER, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER + state*3)), guiAlpha), BLANK); - //-------------------------------------------------------------------- - - return color; -} - -// Color Bar Alpha control -// NOTE: Returns alpha value normalized [0..1] -float GuiColorBarAlpha(Rectangle bounds, const char *text, float alpha) -{ - #if !defined(RAYGUI_COLORBARALPHA_CHECKED_SIZE) - #define RAYGUI_COLORBARALPHA_CHECKED_SIZE 10 - #endif - - GuiState state = guiState; - Rectangle selector = { (float)bounds.x + alpha*bounds.width - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT)/2, (float)bounds.y - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT), (float)bounds.height + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW)*2 }; - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds) || - CheckCollisionPointRec(mousePoint, selector)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - state = STATE_PRESSED; - - alpha = (mousePoint.x - bounds.x)/bounds.width; - if (alpha <= 0.0f) alpha = 0.0f; - if (alpha >= 1.0f) alpha = 1.0f; - //selector.x = bounds.x + (int)(((alpha - 0)/(100 - 0))*(bounds.width - 2*GuiGetStyle(SLIDER, BORDER_WIDTH))) - selector.width/2; - } - else state = STATE_FOCUSED; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - - // Draw alpha bar: checked background - if (state != STATE_DISABLED) - { - int checksX = (int)bounds.width/RAYGUI_COLORBARALPHA_CHECKED_SIZE; - int checksY = (int)bounds.height/RAYGUI_COLORBARALPHA_CHECKED_SIZE; - - for (int x = 0; x < checksX; x++) - { - for (int y = 0; y < checksY; y++) - { - Rectangle check = { bounds.x + x*RAYGUI_COLORBARALPHA_CHECKED_SIZE, bounds.y + y*RAYGUI_COLORBARALPHA_CHECKED_SIZE, RAYGUI_COLORBARALPHA_CHECKED_SIZE, RAYGUI_COLORBARALPHA_CHECKED_SIZE }; - GuiDrawRectangle(check, 0, BLANK, ((x + y)%2)? Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), 0.4f), guiAlpha) : Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.4f), guiAlpha)); - } - } - - DrawRectangleGradientEx(bounds, RAYGUI_CLITERAL(Color){ 255, 255, 255, 0 }, RAYGUI_CLITERAL(Color){ 255, 255, 255, 0 }, Fade(RAYGUI_CLITERAL(Color){ 0, 0, 0, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color){ 0, 0, 0, 255 }, guiAlpha)); - } - else DrawRectangleGradientEx(bounds, Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), guiAlpha), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), guiAlpha)); - - GuiDrawRectangle(bounds, GuiGetStyle(COLORPICKER, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER + state*3)), guiAlpha), BLANK); - - // Draw alpha bar: selector - GuiDrawRectangle(selector, 0, BLANK, Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER + state*3)), guiAlpha)); - //-------------------------------------------------------------------- - - return alpha; -} - -// Color Bar Hue control -// Returns hue value normalized [0..1] -// NOTE: Other similar bars (for reference): -// Color GuiColorBarSat() [WHITE->color] -// Color GuiColorBarValue() [BLACK->color], HSV/HSL -// float GuiColorBarLuminance() [BLACK->WHITE] -float GuiColorBarHue(Rectangle bounds, const char *text, float hue) -{ - GuiState state = guiState; - Rectangle selector = { (float)bounds.x - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)bounds.y + hue/360.0f*bounds.height - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT)/2, (float)bounds.width + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW)*2, (float)GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT) }; - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds) || - CheckCollisionPointRec(mousePoint, selector)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - state = STATE_PRESSED; - - hue = (mousePoint.y - bounds.y)*360/bounds.height; - if (hue <= 0.0f) hue = 0.0f; - if (hue >= 359.0f) hue = 359.0f; - - } - else state = STATE_FOCUSED; - - /*if (IsKeyDown(KEY_UP)) - { - hue -= 2.0f; - if (hue <= 0.0f) hue = 0.0f; - } - else if (IsKeyDown(KEY_DOWN)) - { - hue += 2.0f; - if (hue >= 360.0f) hue = 360.0f; - }*/ - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (state != STATE_DISABLED) - { - // Draw hue bar:color bars - DrawRectangleGradientV((int)bounds.x, (int)(bounds.y), (int)bounds.width, (int)ceilf(bounds.height/6), Fade(RAYGUI_CLITERAL(Color) { 255, 0, 0, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color) { 255, 255, 0, 255 }, guiAlpha)); - DrawRectangleGradientV((int)bounds.x, (int)(bounds.y + bounds.height/6), (int)bounds.width, (int)ceilf(bounds.height/6), Fade(RAYGUI_CLITERAL(Color) { 255, 255, 0, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color) { 0, 255, 0, 255 }, guiAlpha)); - DrawRectangleGradientV((int)bounds.x, (int)(bounds.y + 2*(bounds.height/6)), (int)bounds.width, (int)ceilf(bounds.height/6), Fade(RAYGUI_CLITERAL(Color) { 0, 255, 0, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color) { 0, 255, 255, 255 }, guiAlpha)); - DrawRectangleGradientV((int)bounds.x, (int)(bounds.y + 3*(bounds.height/6)), (int)bounds.width, (int)ceilf(bounds.height/6), Fade(RAYGUI_CLITERAL(Color) { 0, 255, 255, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color) { 0, 0, 255, 255 }, guiAlpha)); - DrawRectangleGradientV((int)bounds.x, (int)(bounds.y + 4*(bounds.height/6)), (int)bounds.width, (int)ceilf(bounds.height/6), Fade(RAYGUI_CLITERAL(Color) { 0, 0, 255, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color) { 255, 0, 255, 255 }, guiAlpha)); - DrawRectangleGradientV((int)bounds.x, (int)(bounds.y + 5*(bounds.height/6)), (int)bounds.width, (int)(bounds.height/6), Fade(RAYGUI_CLITERAL(Color) { 255, 0, 255, 255 }, guiAlpha), Fade(RAYGUI_CLITERAL(Color) { 255, 0, 0, 255 }, guiAlpha)); - } - else DrawRectangleGradientV((int)bounds.x, (int)bounds.y, (int)bounds.width, (int)bounds.height, Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), guiAlpha), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), guiAlpha)); - - GuiDrawRectangle(bounds, GuiGetStyle(COLORPICKER, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER + state*3)), guiAlpha), BLANK); - - // Draw hue bar: selector - GuiDrawRectangle(selector, 0, BLANK, Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER + state*3)), guiAlpha)); - //-------------------------------------------------------------------- - - return hue; -} - -// Color Picker control -// NOTE: It's divided in multiple controls: -// Color GuiColorPanel(Rectangle bounds, Color color) -// float GuiColorBarAlpha(Rectangle bounds, float alpha) -// float GuiColorBarHue(Rectangle bounds, float value) -// NOTE: bounds define GuiColorPanel() size -Color GuiColorPicker(Rectangle bounds, const char *text, Color color) -{ - color = GuiColorPanel(bounds, NULL, color); - - Rectangle boundsHue = { (float)bounds.x + bounds.width + GuiGetStyle(COLORPICKER, HUEBAR_PADDING), (float)bounds.y, (float)GuiGetStyle(COLORPICKER, HUEBAR_WIDTH), (float)bounds.height }; - //Rectangle boundsAlpha = { bounds.x, bounds.y + bounds.height + GuiGetStyle(COLORPICKER, BARS_PADDING), bounds.width, GuiGetStyle(COLORPICKER, BARS_THICK) }; - - Vector3 hsv = ConvertRGBtoHSV(RAYGUI_CLITERAL(Vector3){ color.r/255.0f, color.g/255.0f, color.b/255.0f }); - hsv.x = GuiColorBarHue(boundsHue, NULL, hsv.x); - //color.a = (unsigned char)(GuiColorBarAlpha(boundsAlpha, (float)color.a/255.0f)*255.0f); - Vector3 rgb = ConvertHSVtoRGB(hsv); - - color = RAYGUI_CLITERAL(Color){ (unsigned char)roundf(rgb.x*255.0f), (unsigned char)roundf(rgb.y*255.0f), (unsigned char)roundf(rgb.z*255.0f), color.a }; - - return color; -} - -// Message Box control -int GuiMessageBox(Rectangle bounds, const char *title, const char *message, const char *buttons) -{ - #if !defined(RAYGUI_MESSAGEBOX_BUTTON_HEIGHT) - #define RAYGUI_MESSAGEBOX_BUTTON_HEIGHT 24 - #endif - #if !defined(RAYGUI_MESSAGEBOX_BUTTON_PADDING) - #define RAYGUI_MESSAGEBOX_BUTTON_PADDING 12 - #endif - - int clicked = -1; // Returns clicked button from buttons list, 0 refers to closed window button - - int buttonCount = 0; - const char **buttonsText = GuiTextSplit(buttons, &buttonCount, NULL); - Rectangle buttonBounds = { 0 }; - buttonBounds.x = bounds.x + RAYGUI_MESSAGEBOX_BUTTON_PADDING; - buttonBounds.y = bounds.y + bounds.height - RAYGUI_MESSAGEBOX_BUTTON_HEIGHT - RAYGUI_MESSAGEBOX_BUTTON_PADDING; - buttonBounds.width = (bounds.width - RAYGUI_MESSAGEBOX_BUTTON_PADDING*(buttonCount + 1))/buttonCount; - buttonBounds.height = RAYGUI_MESSAGEBOX_BUTTON_HEIGHT; - - Vector2 textSize = MeasureTextEx(guiFont, message, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), 1); - - Rectangle textBounds = { 0 }; - textBounds.x = bounds.x + bounds.width/2 - textSize.x/2; - textBounds.y = bounds.y + RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT + RAYGUI_MESSAGEBOX_BUTTON_PADDING; - textBounds.width = textSize.x; - textBounds.height = bounds.height - RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - 3*RAYGUI_MESSAGEBOX_BUTTON_PADDING - RAYGUI_MESSAGEBOX_BUTTON_HEIGHT; - - // Draw control - //-------------------------------------------------------------------- - if (GuiWindowBox(bounds, title)) clicked = 0; - - int prevTextAlignment = GuiGetStyle(LABEL, TEXT_ALIGNMENT); - GuiSetStyle(LABEL, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); - GuiLabel(textBounds, message); - GuiSetStyle(LABEL, TEXT_ALIGNMENT, prevTextAlignment); - - prevTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); - - for (int i = 0; i < buttonCount; i++) - { - if (GuiButton(buttonBounds, buttonsText[i])) clicked = i + 1; - buttonBounds.x += (buttonBounds.width + RAYGUI_MESSAGEBOX_BUTTON_PADDING); - } - - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, prevTextAlignment); - //-------------------------------------------------------------------- - - return clicked; -} - -// Text Input Box control, ask for text -int GuiTextInputBox(Rectangle bounds, const char *title, const char *message, const char *buttons, char *text, int textMaxSize, int *secretViewActive) -{ - #if !defined(RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT) - #define RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT 28 - #endif - #if !defined(RAYGUI_TEXTINPUTBOX_BUTTON_PADDING) - #define RAYGUI_TEXTINPUTBOX_BUTTON_PADDING 12 - #endif - #if !defined(RAYGUI_TEXTINPUTBOX_HEIGHT) - #define RAYGUI_TEXTINPUTBOX_HEIGHT 28 - #endif - - // Used to enable text edit mode - // WARNING: No more than one GuiTextInputBox() should be open at the same time - static bool textEditMode = false; - - int btnIndex = -1; - - int buttonCount = 0; - const char **buttonsText = GuiTextSplit(buttons, &buttonCount, NULL); - Rectangle buttonBounds = { 0 }; - buttonBounds.x = bounds.x + RAYGUI_TEXTINPUTBOX_BUTTON_PADDING; - buttonBounds.y = bounds.y + bounds.height - RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT - RAYGUI_TEXTINPUTBOX_BUTTON_PADDING; - buttonBounds.width = (bounds.width - RAYGUI_TEXTINPUTBOX_BUTTON_PADDING*(buttonCount + 1))/buttonCount; - buttonBounds.height = RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT; - - int messageInputHeight = (int)bounds.height - RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - GuiGetStyle(STATUSBAR, BORDER_WIDTH) - RAYGUI_TEXTINPUTBOX_BUTTON_HEIGHT - 2*RAYGUI_TEXTINPUTBOX_BUTTON_PADDING; - - Rectangle textBounds = { 0 }; - if (message != NULL) - { - Vector2 textSize = MeasureTextEx(guiFont, message, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), 1); - - textBounds.x = bounds.x + bounds.width/2 - textSize.x/2; - textBounds.y = bounds.y + RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT + messageInputHeight/4 - textSize.y/2; - textBounds.width = textSize.x; - textBounds.height = textSize.y; - } - - Rectangle textBoxBounds = { 0 }; - textBoxBounds.x = bounds.x + RAYGUI_TEXTINPUTBOX_BUTTON_PADDING; - textBoxBounds.y = bounds.y + RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT - RAYGUI_TEXTINPUTBOX_HEIGHT/2; - if (message == NULL) textBoxBounds.y = bounds.y + 24 + RAYGUI_TEXTINPUTBOX_BUTTON_PADDING; - else textBoxBounds.y += (messageInputHeight/2 + messageInputHeight/4); - textBoxBounds.width = bounds.width - RAYGUI_TEXTINPUTBOX_BUTTON_PADDING*2; - textBoxBounds.height = RAYGUI_TEXTINPUTBOX_HEIGHT; - - // Draw control - //-------------------------------------------------------------------- - if (GuiWindowBox(bounds, title)) btnIndex = 0; - - // Draw message if available - if (message != NULL) - { - int prevTextAlignment = GuiGetStyle(LABEL, TEXT_ALIGNMENT); - GuiSetStyle(LABEL, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); - GuiLabel(textBounds, message); - GuiSetStyle(LABEL, TEXT_ALIGNMENT, prevTextAlignment); - } - - if (secretViewActive != NULL) - { - static char stars[] = "****************"; - if (GuiTextBox(RAYGUI_CLITERAL(Rectangle){ textBoxBounds.x, textBoxBounds.y, textBoxBounds.width - 4 - RAYGUI_TEXTINPUTBOX_HEIGHT, textBoxBounds.height }, - ((*secretViewActive == 1) || textEditMode)? text : stars, textMaxSize, textEditMode)) textEditMode = !textEditMode; - - *secretViewActive = GuiToggle(RAYGUI_CLITERAL(Rectangle){ textBoxBounds.x + textBoxBounds.width - RAYGUI_TEXTINPUTBOX_HEIGHT, textBoxBounds.y, RAYGUI_TEXTINPUTBOX_HEIGHT, RAYGUI_TEXTINPUTBOX_HEIGHT }, (*secretViewActive == 1)? "#44#" : "#45#", *secretViewActive); - } - else - { - if (GuiTextBox(textBoxBounds, text, textMaxSize, textEditMode)) textEditMode = !textEditMode; - } - - int prevBtnTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); - - for (int i = 0; i < buttonCount; i++) - { - if (GuiButton(buttonBounds, buttonsText[i])) btnIndex = i + 1; - buttonBounds.x += (buttonBounds.width + RAYGUI_MESSAGEBOX_BUTTON_PADDING); - } - - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, prevBtnTextAlignment); - //-------------------------------------------------------------------- - - return btnIndex; -} - -// Grid control -// NOTE: Returns grid mouse-hover selected cell -// About drawing lines at subpixel spacing, simple put, not easy solution: -// https://stackoverflow.com/questions/4435450/2d-opengl-drawing-lines-that-dont-exactly-fit-pixel-raster -Vector2 GuiGrid(Rectangle bounds, const char *text, float spacing, int subdivs) -{ - // Grid lines alpha amount - #if !defined(RAYGUI_GRID_ALPHA) - #define RAYGUI_GRID_ALPHA 0.15f - #endif - - GuiState state = guiState; - Vector2 mousePoint = GetMousePosition(); - Vector2 currentCell = { -1, -1 }; - - int linesV = ((int)(bounds.width/spacing))*subdivs + 1; - int linesH = ((int)(bounds.height/spacing))*subdivs + 1; - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - if (CheckCollisionPointRec(mousePoint, bounds)) - { - // NOTE: Cell values must be rounded to int - currentCell.x = (float)((mousePoint.x - bounds.x)/spacing); - currentCell.y = (float)((mousePoint.y - bounds.y)/spacing); - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - - // TODO: Draw background panel? - - switch (state) - { - case STATE_NORMAL: - { - if (subdivs > 0) - { - // Draw vertical grid lines - for (int i = 0; i < linesV; i++) - { - Rectangle lineV = { bounds.x + spacing*i/subdivs, bounds.y, 1, bounds.height }; - GuiDrawRectangle(lineV, 0, BLANK, ((i%subdivs) == 0) ? Fade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), RAYGUI_GRID_ALPHA*4) : Fade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), RAYGUI_GRID_ALPHA)); - } - - // Draw horizontal grid lines - for (int i = 0; i < linesH; i++) - { - Rectangle lineH = { bounds.x, bounds.y + spacing*i/subdivs, bounds.width, 1 }; - GuiDrawRectangle(lineH, 0, BLANK, ((i%subdivs) == 0) ? Fade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), RAYGUI_GRID_ALPHA*4) : Fade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), RAYGUI_GRID_ALPHA)); - } - } - } break; - default: break; - } - - return currentCell; -} - -//---------------------------------------------------------------------------------- -// Styles loading functions -//---------------------------------------------------------------------------------- - -// Load raygui style file (.rgs) -// NOTE: By default a binary file is expected, that file could contain a custom font, -// in that case, custom font image atlas is GRAY+ALPHA and pixel data can be compressed (DEFLATE) -void GuiLoadStyle(const char *fileName) -{ - #define MAX_LINE_BUFFER_SIZE 256 - - bool tryBinary = false; - - // Try reading the files as text file first - FILE *rgsFile = fopen(fileName, "rt"); - - if (rgsFile != NULL) - { - char buffer[MAX_LINE_BUFFER_SIZE] = { 0 }; - fgets(buffer, MAX_LINE_BUFFER_SIZE, rgsFile); - - if (buffer[0] == '#') - { - int controlId = 0; - int propertyId = 0; - unsigned int propertyValue = 0; - - while (!feof(rgsFile)) - { - switch (buffer[0]) - { - case 'p': - { - // Style property: p - - sscanf(buffer, "p %d %d 0x%x", &controlId, &propertyId, &propertyValue); - GuiSetStyle(controlId, propertyId, (int)propertyValue); - - } break; - case 'f': - { - // Style font: f - - int fontSize = 0; - char charmapFileName[256] = { 0 }; - char fontFileName[256] = { 0 }; - sscanf(buffer, "f %d %s %[^\r\n]s", &fontSize, charmapFileName, fontFileName); - - Font font = { 0 }; - - if (charmapFileName[0] != '0') - { - // Load characters from charmap file, - // expected '\n' separated list of integer values - char *charValues = LoadFileText(charmapFileName); - if (charValues != NULL) - { - int glyphCount = 0; - const char **chars = TextSplit(charValues, '\n', &glyphCount); - - int *values = (int *)RAYGUI_MALLOC(glyphCount*sizeof(int)); - for (int i = 0; i < glyphCount; i++) values[i] = TextToInteger(chars[i]); - - if (font.texture.id != GetFontDefault().texture.id) UnloadTexture(font.texture); - font = LoadFontEx(TextFormat("%s/%s", GetDirectoryPath(fileName), fontFileName), fontSize, values, glyphCount); - if (font.texture.id == 0) font = GetFontDefault(); - - RAYGUI_FREE(values); - } - } - else - { - if (font.texture.id != GetFontDefault().texture.id) UnloadTexture(font.texture); - font = LoadFontEx(TextFormat("%s/%s", GetDirectoryPath(fileName), fontFileName), fontSize, NULL, 0); - if (font.texture.id == 0) font = GetFontDefault(); - } - - if ((font.texture.id > 0) && (font.glyphCount > 0)) GuiSetFont(font); - - } break; - default: break; - } - - fgets(buffer, MAX_LINE_BUFFER_SIZE, rgsFile); - } - } - else tryBinary = true; - - fclose(rgsFile); - } - - if (tryBinary) - { - rgsFile = fopen(fileName, "rb"); - - if (rgsFile == NULL) return; - - char signature[5] = { 0 }; - short version = 0; - short reserved = 0; - int propertyCount = 0; - - fread(signature, 1, 4, rgsFile); - fread(&version, 1, sizeof(short), rgsFile); - fread(&reserved, 1, sizeof(short), rgsFile); - fread(&propertyCount, 1, sizeof(int), rgsFile); - - if ((signature[0] == 'r') && - (signature[1] == 'G') && - (signature[2] == 'S') && - (signature[3] == ' ')) - { - short controlId = 0; - short propertyId = 0; - unsigned int propertyValue = 0; - - for (int i = 0; i < propertyCount; i++) - { - fread(&controlId, 1, sizeof(short), rgsFile); - fread(&propertyId, 1, sizeof(short), rgsFile); - fread(&propertyValue, 1, sizeof(unsigned int), rgsFile); - - if (controlId == 0) // DEFAULT control - { - // If a DEFAULT property is loaded, it is propagated to all controls - // NOTE: All DEFAULT properties should be defined first in the file - GuiSetStyle(0, (int)propertyId, propertyValue); - - if (propertyId < RAYGUI_MAX_PROPS_BASE) for (int i = 1; i < RAYGUI_MAX_CONTROLS; i++) GuiSetStyle(i, (int)propertyId, propertyValue); - } - else GuiSetStyle((int)controlId, (int)propertyId, propertyValue); - } - - // Font loading is highly dependant on raylib API to load font data and image -#if !defined(RAYGUI_STANDALONE) - // Load custom font if available - int fontDataSize = 0; - fread(&fontDataSize, 1, sizeof(int), rgsFile); - - if (fontDataSize > 0) - { - Font font = { 0 }; - int fontType = 0; // 0-Normal, 1-SDF - Rectangle whiteRec = { 0 }; - - fread(&font.baseSize, 1, sizeof(int), rgsFile); - fread(&font.glyphCount, 1, sizeof(int), rgsFile); - fread(&fontType, 1, sizeof(int), rgsFile); - - // Load font white rectangle - fread(&whiteRec, 1, sizeof(Rectangle), rgsFile); - - // Load font image parameters - int fontImageUncompSize = 0; - int fontImageCompSize = 0; - fread(&fontImageUncompSize, 1, sizeof(int), rgsFile); - fread(&fontImageCompSize, 1, sizeof(int), rgsFile); - - Image imFont = { 0 }; - imFont.mipmaps = 1; - fread(&imFont.width, 1, sizeof(int), rgsFile); - fread(&imFont.height, 1, sizeof(int), rgsFile); - fread(&imFont.format, 1, sizeof(int), rgsFile); - - if (fontImageCompSize < fontImageUncompSize) - { - // Compressed font atlas image data (DEFLATE), it requires DecompressData() - int dataUncompSize = 0; - unsigned char *compData = (unsigned char *)RAYGUI_MALLOC(fontImageCompSize); - fread(compData, 1, fontImageCompSize, rgsFile); - imFont.data = DecompressData(compData, fontImageCompSize, &dataUncompSize); - - // Security check, dataUncompSize must match the provided fontImageUncompSize - if (dataUncompSize != fontImageUncompSize) RAYGUI_LOG("WARNING: Uncompressed font atlas image data could be corrupted"); - - RAYGUI_FREE(compData); - } - else - { - // Font atlas image data is not compressed - imFont.data = (unsigned char *)RAYGUI_MALLOC(fontImageUncompSize); - fread(imFont.data, 1, fontImageUncompSize, rgsFile); - } - - if (font.texture.id != GetFontDefault().texture.id) UnloadTexture(font.texture); - font.texture = LoadTextureFromImage(imFont); - if (font.texture.id == 0) font = GetFontDefault(); - - RAYGUI_FREE(imFont.data); - - // Load font recs data - font.recs = (Rectangle *)RAYGUI_CALLOC(font.glyphCount, sizeof(Rectangle)); - for (int i = 0; i < font.glyphCount; i++) fread(&font.recs[i], 1, sizeof(Rectangle), rgsFile); - - // Load font chars info data - font.glyphs = (GlyphInfo *)RAYGUI_CALLOC(font.glyphCount, sizeof(GlyphInfo)); - for (int i = 0; i < font.glyphCount; i++) - { - fread(&font.glyphs[i].value, 1, sizeof(int), rgsFile); - fread(&font.glyphs[i].offsetX, 1, sizeof(int), rgsFile); - fread(&font.glyphs[i].offsetY, 1, sizeof(int), rgsFile); - fread(&font.glyphs[i].advanceX, 1, sizeof(int), rgsFile); - } - - GuiSetFont(font); - - // Set font texture source rectangle to be used as white texture to draw shapes - // NOTE: This way, all gui can be draw using a single draw call - if ((whiteRec.width != 0) && (whiteRec.height != 0)) SetShapesTexture(font.texture, whiteRec); - } -#endif - } - - fclose(rgsFile); - } -} - -// Load style default over global style -void GuiLoadStyleDefault(void) -{ - // We set this variable first to avoid cyclic function calls - // when calling GuiSetStyle() and GuiGetStyle() - guiStyleLoaded = true; - - // Initialize default LIGHT style property values - GuiSetStyle(DEFAULT, BORDER_COLOR_NORMAL, 0x838383ff); - GuiSetStyle(DEFAULT, BASE_COLOR_NORMAL, 0xc9c9c9ff); - GuiSetStyle(DEFAULT, TEXT_COLOR_NORMAL, 0x686868ff); - GuiSetStyle(DEFAULT, BORDER_COLOR_FOCUSED, 0x5bb2d9ff); - GuiSetStyle(DEFAULT, BASE_COLOR_FOCUSED, 0xc9effeff); - GuiSetStyle(DEFAULT, TEXT_COLOR_FOCUSED, 0x6c9bbcff); - GuiSetStyle(DEFAULT, BORDER_COLOR_PRESSED, 0x0492c7ff); - GuiSetStyle(DEFAULT, BASE_COLOR_PRESSED, 0x97e8ffff); - GuiSetStyle(DEFAULT, TEXT_COLOR_PRESSED, 0x368bafff); - GuiSetStyle(DEFAULT, BORDER_COLOR_DISABLED, 0xb5c1c2ff); - GuiSetStyle(DEFAULT, BASE_COLOR_DISABLED, 0xe6e9e9ff); - GuiSetStyle(DEFAULT, TEXT_COLOR_DISABLED, 0xaeb7b8ff); - GuiSetStyle(DEFAULT, BORDER_WIDTH, 1); // WARNING: Some controls use other values - GuiSetStyle(DEFAULT, TEXT_PADDING, 0); // WARNING: Some controls use other values - GuiSetStyle(DEFAULT, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); // WARNING: Some controls use other values - - // Initialize control-specific property values - // NOTE: Those properties are in default list but require specific values by control type - GuiSetStyle(LABEL, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); - GuiSetStyle(BUTTON, BORDER_WIDTH, 2); - GuiSetStyle(SLIDER, TEXT_PADDING, 4); - GuiSetStyle(CHECKBOX, TEXT_PADDING, 4); - GuiSetStyle(CHECKBOX, TEXT_ALIGNMENT, TEXT_ALIGN_RIGHT); - GuiSetStyle(TEXTBOX, TEXT_PADDING, 4); - GuiSetStyle(TEXTBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); - GuiSetStyle(VALUEBOX, TEXT_PADDING, 4); - GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); - GuiSetStyle(SPINNER, TEXT_PADDING, 4); - GuiSetStyle(SPINNER, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); - GuiSetStyle(STATUSBAR, TEXT_PADDING, 8); - GuiSetStyle(STATUSBAR, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); - - // Initialize extended property values - // NOTE: By default, extended property values are initialized to 0 - GuiSetStyle(DEFAULT, TEXT_SIZE, 10); // DEFAULT, shared by all controls - GuiSetStyle(DEFAULT, TEXT_SPACING, 1); // DEFAULT, shared by all controls - GuiSetStyle(DEFAULT, LINE_COLOR, 0x90abb5ff); // DEFAULT specific property - GuiSetStyle(DEFAULT, BACKGROUND_COLOR, 0xf5f5f5ff); // DEFAULT specific property - GuiSetStyle(TOGGLE, GROUP_PADDING, 2); - GuiSetStyle(SLIDER, SLIDER_WIDTH, 16); - GuiSetStyle(SLIDER, SLIDER_PADDING, 1); - GuiSetStyle(PROGRESSBAR, PROGRESS_PADDING, 1); - GuiSetStyle(CHECKBOX, CHECK_PADDING, 1); - GuiSetStyle(COMBOBOX, COMBO_BUTTON_WIDTH, 32); - GuiSetStyle(COMBOBOX, COMBO_BUTTON_SPACING, 2); - GuiSetStyle(DROPDOWNBOX, ARROW_PADDING, 16); - GuiSetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_SPACING, 2); - GuiSetStyle(TEXTBOX, TEXT_LINES_SPACING, 4); - GuiSetStyle(TEXTBOX, TEXT_INNER_PADDING, 4); - GuiSetStyle(SPINNER, SPIN_BUTTON_WIDTH, 24); - GuiSetStyle(SPINNER, SPIN_BUTTON_SPACING, 2); - GuiSetStyle(SCROLLBAR, BORDER_WIDTH, 0); - GuiSetStyle(SCROLLBAR, ARROWS_VISIBLE, 0); - GuiSetStyle(SCROLLBAR, ARROWS_SIZE, 6); - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING, 0); - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, 16); - GuiSetStyle(SCROLLBAR, SCROLL_PADDING, 0); - GuiSetStyle(SCROLLBAR, SCROLL_SPEED, 12); - GuiSetStyle(LISTVIEW, LIST_ITEMS_HEIGHT, 24); - GuiSetStyle(LISTVIEW, LIST_ITEMS_SPACING, 2); - GuiSetStyle(LISTVIEW, SCROLLBAR_WIDTH, 12); - GuiSetStyle(LISTVIEW, SCROLLBAR_SIDE, SCROLLBAR_RIGHT_SIDE); - GuiSetStyle(COLORPICKER, COLOR_SELECTOR_SIZE, 8); - GuiSetStyle(COLORPICKER, HUEBAR_WIDTH, 16); - GuiSetStyle(COLORPICKER, HUEBAR_PADDING, 8); - GuiSetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT, 8); - GuiSetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW, 2); - - guiFont = GetFontDefault(); // Initialize default font -} - -// Get text with icon id prepended -// NOTE: Useful to add icons by name id (enum) instead of -// a number that can change between ricon versions -const char *GuiIconText(int iconId, const char *text) -{ -#if defined(RAYGUI_NO_ICONS) - return NULL; -#else - static char buffer[1024] = { 0 }; - static char iconBuffer[6] = { 0 }; - - if (text != NULL) - { - memset(buffer, 0, 1024); - sprintf(buffer, "#%03i#", iconId); - - for (int i = 5; i < 1024; i++) - { - buffer[i] = text[i - 5]; - if (text[i - 5] == '\0') break; - } - - return buffer; - } - else - { - sprintf(iconBuffer, "#%03i#", iconId & 0x1ff); - - return iconBuffer; - } -#endif -} - -#if !defined(RAYGUI_NO_ICONS) - -// Get full icons data pointer -unsigned int *GuiGetIcons(void) { return guiIcons; } - -// Load raygui icons file (.rgi) -// NOTE: In case nameIds are required, they can be requested with loadIconsName, -// they are returned as a guiIconsName[iconCount][RAYGUI_ICON_MAX_NAME_LENGTH], -// WARNING: guiIconsName[]][] memory should be manually freed! -char **GuiLoadIcons(const char *fileName, bool loadIconsName) -{ - // Style File Structure (.rgi) - // ------------------------------------------------------ - // Offset | Size | Type | Description - // ------------------------------------------------------ - // 0 | 4 | char | Signature: "rGI " - // 4 | 2 | short | Version: 100 - // 6 | 2 | short | reserved - - // 8 | 2 | short | Num icons (N) - // 10 | 2 | short | Icons size (Options: 16, 32, 64) (S) - - // Icons name id (32 bytes per name id) - // foreach (icon) - // { - // 12+32*i | 32 | char | Icon NameId - // } - - // Icons data: One bit per pixel, stored as unsigned int array (depends on icon size) - // S*S pixels/32bit per unsigned int = K unsigned int per icon - // foreach (icon) - // { - // ... | K | unsigned int | Icon Data - // } - - FILE *rgiFile = fopen(fileName, "rb"); - - char **guiIconsName = NULL; - - if (rgiFile != NULL) - { - char signature[5] = { 0 }; - short version = 0; - short reserved = 0; - short iconCount = 0; - short iconSize = 0; - - fread(signature, 1, 4, rgiFile); - fread(&version, 1, sizeof(short), rgiFile); - fread(&reserved, 1, sizeof(short), rgiFile); - fread(&iconCount, 1, sizeof(short), rgiFile); - fread(&iconSize, 1, sizeof(short), rgiFile); - - if ((signature[0] == 'r') && - (signature[1] == 'G') && - (signature[2] == 'I') && - (signature[3] == ' ')) - { - if (loadIconsName) - { - guiIconsName = (char **)RAYGUI_MALLOC(iconCount*sizeof(char **)); - for (int i = 0; i < iconCount; i++) - { - guiIconsName[i] = (char *)RAYGUI_MALLOC(RAYGUI_ICON_MAX_NAME_LENGTH); - fread(guiIconsName[i], RAYGUI_ICON_MAX_NAME_LENGTH, 1, rgiFile); - } - } - else fseek(rgiFile, iconCount*RAYGUI_ICON_MAX_NAME_LENGTH, SEEK_CUR); - - // Read icons data directly over guiIcons data array - fread(guiIcons, iconCount*(iconSize*iconSize/32), sizeof(unsigned int), rgiFile); - } - - fclose(rgiFile); - } - - return guiIconsName; -} - -// Draw selected icon using rectangles pixel-by-pixel -void GuiDrawIcon(int iconId, int posX, int posY, int pixelSize, Color color) -{ - #define BIT_CHECK(a,b) ((a) & (1u<<(b))) - - for (int i = 0, y = 0; i < RAYGUI_ICON_SIZE*RAYGUI_ICON_SIZE/32; i++) - { - for (int k = 0; k < 32; k++) - { - if (BIT_CHECK(guiIcons[iconId*RAYGUI_ICON_DATA_ELEMENTS + i], k)) - { - #if !defined(RAYGUI_STANDALONE) - DrawRectangle(posX + (k%RAYGUI_ICON_SIZE)*pixelSize, posY + y*pixelSize, pixelSize, pixelSize, color); - #endif - } - - if ((k == 15) || (k == 31)) y++; - } - } -} - -// Get icon bit data -// NOTE: Bit data array grouped as unsigned int (RAYGUI_ICON_SIZE*RAYGUI_ICON_SIZE/32 elements) -unsigned int *GuiGetIconData(int iconId) -{ - static unsigned int iconData[RAYGUI_ICON_DATA_ELEMENTS] = { 0 }; - memset(iconData, 0, RAYGUI_ICON_DATA_ELEMENTS*sizeof(unsigned int)); - - if (iconId < RAYGUI_ICON_MAX_ICONS) memcpy(iconData, &guiIcons[iconId*RAYGUI_ICON_DATA_ELEMENTS], RAYGUI_ICON_DATA_ELEMENTS*sizeof(unsigned int)); - - return iconData; -} - -// Set icon bit data -// NOTE: Data must be provided as unsigned int array (RAYGUI_ICON_SIZE*RAYGUI_ICON_SIZE/32 elements) -void GuiSetIconData(int iconId, unsigned int *data) -{ - if (iconId < RAYGUI_ICON_MAX_ICONS) memcpy(&guiIcons[iconId*RAYGUI_ICON_DATA_ELEMENTS], data, RAYGUI_ICON_DATA_ELEMENTS*sizeof(unsigned int)); -} - -// Set icon scale (1 by default) -void GuiSetIconScale(unsigned int scale) -{ - guiIconScale = (scale < 1)? 1 : scale; -} - -// Set icon pixel value -void GuiSetIconPixel(int iconId, int x, int y) -{ - #define BIT_SET(a,b) ((a) |= (1u<<(b))) - - // This logic works for any RAYGUI_ICON_SIZE pixels icons, - // For example, in case of 16x16 pixels, every 2 lines fit in one unsigned int data element - BIT_SET(guiIcons[iconId*RAYGUI_ICON_DATA_ELEMENTS + y/(sizeof(unsigned int)*8/RAYGUI_ICON_SIZE)], x + (y%(sizeof(unsigned int)*8/RAYGUI_ICON_SIZE)*RAYGUI_ICON_SIZE)); -} - -// Clear icon pixel value -void GuiClearIconPixel(int iconId, int x, int y) -{ - #define BIT_CLEAR(a,b) ((a) &= ~((1u)<<(b))) - - // This logic works for any RAYGUI_ICON_SIZE pixels icons, - // For example, in case of 16x16 pixels, every 2 lines fit in one unsigned int data element - BIT_CLEAR(guiIcons[iconId*RAYGUI_ICON_DATA_ELEMENTS + y/(sizeof(unsigned int)*8/RAYGUI_ICON_SIZE)], x + (y%(sizeof(unsigned int)*8/RAYGUI_ICON_SIZE)*RAYGUI_ICON_SIZE)); -} - -// Check icon pixel value -bool GuiCheckIconPixel(int iconId, int x, int y) -{ - #define BIT_CHECK(a,b) ((a) & (1u<<(b))) - - return (BIT_CHECK(guiIcons[iconId*8 + y/2], x + (y%2*16))); -} -#endif // !RAYGUI_NO_ICONS - -//---------------------------------------------------------------------------------- -// Module specific Functions Definition -//---------------------------------------------------------------------------------- -// Gui get text width considering icon -static int GetTextWidth(const char *text) -{ - #if !defined(ICON_TEXT_PADDING) - #define ICON_TEXT_PADDING 4 - #endif - - Vector2 size = { 0 }; - int textIconOffset = 0; - - if ((text != NULL) && (text[0] != '\0')) - { - if (text[0] == '#') - { - for (int i = 1; (text[i] != '\0') && (i < 5); i++) - { - if (text[i] == '#') - { - textIconOffset = i; - break; - } - } - } - - // Make sure guiFont is set, GuiGetStyle() initializes it lazynessly - float fontSize = (float)GuiGetStyle(DEFAULT, TEXT_SIZE); - - size = MeasureTextEx(guiFont, text + textIconOffset, fontSize, (float)GuiGetStyle(DEFAULT, TEXT_SPACING)); - if (textIconOffset > 0) size.x += (RAYGUI_ICON_SIZE - ICON_TEXT_PADDING); - } - - return (int)size.x; -} - -// Get text bounds considering control bounds -static Rectangle GetTextBounds(int control, Rectangle bounds) -{ - Rectangle textBounds = bounds; - - textBounds.x = bounds.x + GuiGetStyle(control, BORDER_WIDTH); - textBounds.y = bounds.y + GuiGetStyle(control, BORDER_WIDTH); - textBounds.width = bounds.width - 2*GuiGetStyle(control, BORDER_WIDTH); - textBounds.height = bounds.height - 2*GuiGetStyle(control, BORDER_WIDTH); - - // Consider TEXT_PADDING properly, depends on control type and TEXT_ALIGNMENT - switch (control) - { - case COMBOBOX: bounds.width -= (GuiGetStyle(control, COMBO_BUTTON_WIDTH) + GuiGetStyle(control, COMBO_BUTTON_SPACING)); break; - case VALUEBOX: break; // NOTE: ValueBox text value always centered, text padding applies to label - default: - { - if (GuiGetStyle(control, TEXT_ALIGNMENT) == TEXT_ALIGN_RIGHT) textBounds.x -= GuiGetStyle(control, TEXT_PADDING); - else textBounds.x += GuiGetStyle(control, TEXT_PADDING); - } break; - } - - // TODO: Special cases (no label): COMBOBOX, DROPDOWNBOX, LISTVIEW (scrollbar?) - // More special cases (label on side): CHECKBOX, SLIDER, VALUEBOX, SPINNER - - return textBounds; -} - -// Get text icon if provided and move text cursor -// NOTE: We support up to 999 values for iconId -static const char *GetTextIcon(const char *text, int *iconId) -{ -#if !defined(RAYGUI_NO_ICONS) - *iconId = -1; - if (text[0] == '#') // Maybe we have an icon! - { - char iconValue[4] = { 0 }; // Maximum length for icon value: 3 digits + '\0' - - int pos = 1; - while ((pos < 4) && (text[pos] >= '0') && (text[pos] <= '9')) - { - iconValue[pos - 1] = text[pos]; - pos++; - } - - if (text[pos] == '#') - { - *iconId = TextToInteger(iconValue); - - // Move text pointer after icon - // WARNING: If only icon provided, it could point to EOL character: '\0' - if (*iconId >= 0) text += (pos + 1); - } - } -#endif - - return text; -} - -// Gui draw text using default font -static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color tint) -{ - #define TEXT_VALIGN_PIXEL_OFFSET(h) ((int)h%2) // Vertical alignment for pixel perfect - - #if !defined(ICON_TEXT_PADDING) - #define ICON_TEXT_PADDING 4 - #endif - - if ((text != NULL) && (text[0] != '\0')) - { - int iconId = 0; - text = GetTextIcon(text, &iconId); // Check text for icon and move cursor - - // Get text position depending on alignment and iconId - //--------------------------------------------------------------------------------- - Vector2 position = { bounds.x, bounds.y }; - - // NOTE: We get text size after icon has been processed - // TODO: REVIEW: We consider text size in case of line breaks! -> MeasureTextEx() depends on raylib! - Vector2 textSize = MeasureTextEx(GuiGetFont(), text, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), (float)GuiGetStyle(DEFAULT, TEXT_SPACING)); - //int textWidth = GetTextWidth(text); - //int textHeight = GuiGetStyle(DEFAULT, TEXT_SIZE); - - // If text requires an icon, add size to measure - if (iconId >= 0) - { - textSize.x += RAYGUI_ICON_SIZE*guiIconScale; - - // WARNING: If only icon provided, text could be pointing to EOF character: '\0' - if ((text != NULL) && (text[0] != '\0')) textSize.x += ICON_TEXT_PADDING; - } - - // Check guiTextAlign global variables - switch (alignment) - { - case TEXT_ALIGN_LEFT: - { - position.x = bounds.x; - position.y = bounds.y + bounds.height/2 - textSize.y/2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height); - } break; - case TEXT_ALIGN_CENTER: - { - position.x = bounds.x + bounds.width/2 - textSize.x/2; - position.y = bounds.y + bounds.height/2 - textSize.y/2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height); - } break; - case TEXT_ALIGN_RIGHT: - { - position.x = bounds.x + bounds.width - textSize.x; - position.y = bounds.y + bounds.height/2 - textSize.y/2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height); - } break; - default: break; - } - - // NOTE: Make sure we get pixel-perfect coordinates, - // In case of decimals we got weird text positioning - position.x = (float)((int)position.x); - position.y = (float)((int)position.y); - //--------------------------------------------------------------------------------- - - // Draw text (with icon if available) - //--------------------------------------------------------------------------------- -#if !defined(RAYGUI_NO_ICONS) - if (iconId >= 0) - { - // NOTE: We consider icon height, probably different than text size - GuiDrawIcon(iconId, (int)position.x, (int)(bounds.y + bounds.height/2 - RAYGUI_ICON_SIZE*guiIconScale/2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height)), guiIconScale, tint); - position.x += (RAYGUI_ICON_SIZE*guiIconScale + ICON_TEXT_PADDING); - } -#endif - DrawTextEx(guiFont, text, position, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), (float)GuiGetStyle(DEFAULT, TEXT_SPACING), tint); - //--------------------------------------------------------------------------------- - } -} - -// Gui draw rectangle using default raygui plain style with borders -static void GuiDrawRectangle(Rectangle rec, int borderWidth, Color borderColor, Color color) -{ - if (color.a > 0) - { - // Draw rectangle filled with color - DrawRectangle((int)rec.x, (int)rec.y, (int)rec.width, (int)rec.height, color); - } - - if (borderWidth > 0) - { - // Draw rectangle border lines with color - DrawRectangle((int)rec.x, (int)rec.y, (int)rec.width, borderWidth, borderColor); - DrawRectangle((int)rec.x, (int)rec.y + borderWidth, borderWidth, (int)rec.height - 2*borderWidth, borderColor); - DrawRectangle((int)rec.x + (int)rec.width - borderWidth, (int)rec.y + borderWidth, borderWidth, (int)rec.height - 2*borderWidth, borderColor); - DrawRectangle((int)rec.x, (int)rec.y + (int)rec.height - borderWidth, (int)rec.width, borderWidth, borderColor); - } -} - -// Split controls text into multiple strings -// Also check for multiple columns (required by GuiToggleGroup()) -static const char **GuiTextSplit(const char *text, int *count, int *textRow) -{ - // NOTE: Current implementation returns a copy of the provided string with '\0' (string end delimiter) - // inserted between strings defined by "delimiter" parameter. No memory is dynamically allocated, - // all used memory is static... it has some limitations: - // 1. Maximum number of possible split strings is set by RAYGUI_TEXTSPLIT_MAX_ITEMS - // 2. Maximum size of text to split is RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE - // NOTE: Those definitions could be externally provided if required - - #if !defined(RAYGUI_TEXTSPLIT_MAX_ITEMS) - #define RAYGUI_TEXTSPLIT_MAX_ITEMS 128 - #endif - #if !defined(RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE) - #define RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE 1024 - #endif - - static const char *result[RAYGUI_TEXTSPLIT_MAX_ITEMS] = { NULL }; - static char buffer[RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE] = { 0 }; - memset(buffer, 0, RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE); - - result[0] = buffer; - int counter = 1; - - if (textRow != NULL) textRow[0] = 0; - - // Count how many substrings we have on text and point to every one - for (int i = 0; i < RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE; i++) - { - buffer[i] = text[i]; - if (buffer[i] == '\0') break; - else if ((buffer[i] == ';') || (buffer[i] == '\n')) - { - result[counter] = buffer + i + 1; - - if (textRow != NULL) - { - if (buffer[i] == '\n') textRow[counter] = textRow[counter - 1] + 1; - else textRow[counter] = textRow[counter - 1]; - } - - buffer[i] = '\0'; // Set an end of string at this point - - counter++; - if (counter == RAYGUI_TEXTSPLIT_MAX_ITEMS) break; - } - } - - *count = counter; - - return result; -} - -// Convert color data from RGB to HSV -// NOTE: Color data should be passed normalized -static Vector3 ConvertRGBtoHSV(Vector3 rgb) -{ - Vector3 hsv = { 0 }; - float min = 0.0f; - float max = 0.0f; - float delta = 0.0f; - - min = (rgb.x < rgb.y)? rgb.x : rgb.y; - min = (min < rgb.z)? min : rgb.z; - - max = (rgb.x > rgb.y)? rgb.x : rgb.y; - max = (max > rgb.z)? max : rgb.z; - - hsv.z = max; // Value - delta = max - min; - - if (delta < 0.00001f) - { - hsv.y = 0.0f; - hsv.x = 0.0f; // Undefined, maybe NAN? - return hsv; - } - - if (max > 0.0f) - { - // NOTE: If max is 0, this divide would cause a crash - hsv.y = (delta/max); // Saturation - } - else - { - // NOTE: If max is 0, then r = g = b = 0, s = 0, h is undefined - hsv.y = 0.0f; - hsv.x = 0.0f; // Undefined, maybe NAN? - return hsv; - } - - // NOTE: Comparing float values could not work properly - if (rgb.x >= max) hsv.x = (rgb.y - rgb.z)/delta; // Between yellow & magenta - else - { - if (rgb.y >= max) hsv.x = 2.0f + (rgb.z - rgb.x)/delta; // Between cyan & yellow - else hsv.x = 4.0f + (rgb.x - rgb.y)/delta; // Between magenta & cyan - } - - hsv.x *= 60.0f; // Convert to degrees - - if (hsv.x < 0.0f) hsv.x += 360.0f; - - return hsv; -} - -// Convert color data from HSV to RGB -// NOTE: Color data should be passed normalized -static Vector3 ConvertHSVtoRGB(Vector3 hsv) -{ - Vector3 rgb = { 0 }; - float hh = 0.0f, p = 0.0f, q = 0.0f, t = 0.0f, ff = 0.0f; - long i = 0; - - // NOTE: Comparing float values could not work properly - if (hsv.y <= 0.0f) - { - rgb.x = hsv.z; - rgb.y = hsv.z; - rgb.z = hsv.z; - return rgb; - } - - hh = hsv.x; - if (hh >= 360.0f) hh = 0.0f; - hh /= 60.0f; - - i = (long)hh; - ff = hh - i; - p = hsv.z*(1.0f - hsv.y); - q = hsv.z*(1.0f - (hsv.y*ff)); - t = hsv.z*(1.0f - (hsv.y*(1.0f - ff))); - - switch (i) - { - case 0: - { - rgb.x = hsv.z; - rgb.y = t; - rgb.z = p; - } break; - case 1: - { - rgb.x = q; - rgb.y = hsv.z; - rgb.z = p; - } break; - case 2: - { - rgb.x = p; - rgb.y = hsv.z; - rgb.z = t; - } break; - case 3: - { - rgb.x = p; - rgb.y = q; - rgb.z = hsv.z; - } break; - case 4: - { - rgb.x = t; - rgb.y = p; - rgb.z = hsv.z; - } break; - case 5: - default: - { - rgb.x = hsv.z; - rgb.y = p; - rgb.z = q; - } break; - } - - return rgb; -} - -// Scroll bar control (used by GuiScrollPanel()) -static int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxValue) -{ - GuiState state = guiState; - - // Is the scrollbar horizontal or vertical? - bool isVertical = (bounds.width > bounds.height) ? false : true; - - // The size (width or height depending on scrollbar type) of the spinner buttons - const int spinnerSize = GuiGetStyle(SCROLLBAR, ARROWS_VISIBLE) ? (isVertical ? (int)bounds.width - 2*GuiGetStyle(SCROLLBAR, BORDER_WIDTH) : (int)bounds.height - 2*GuiGetStyle(SCROLLBAR, BORDER_WIDTH)) : 0; - - // Arrow buttons [<] [>] [∧] [∨] - Rectangle arrowUpLeft = { 0 }; - Rectangle arrowDownRight = { 0 }; - - // Actual area of the scrollbar excluding the arrow buttons - Rectangle scrollbar = { 0 }; - - // Slider bar that moves --[///]----- - Rectangle slider = { 0 }; - - // Normalize value - if (value > maxValue) value = maxValue; - if (value < minValue) value = minValue; - - const int range = maxValue - minValue; - int sliderSize = GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE); - - // Calculate rectangles for all of the components - arrowUpLeft = RAYGUI_CLITERAL(Rectangle) { (float)bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)spinnerSize, (float)spinnerSize }; - - if (isVertical) - { - arrowDownRight = RAYGUI_CLITERAL(Rectangle) { (float)bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)bounds.y + bounds.height - spinnerSize - GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)spinnerSize, (float)spinnerSize }; - scrollbar = RAYGUI_CLITERAL(Rectangle) { bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING), arrowUpLeft.y + arrowUpLeft.height, bounds.width - 2*(GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING)), bounds.height - arrowUpLeft.height - arrowDownRight.height - 2*GuiGetStyle(SCROLLBAR, BORDER_WIDTH) }; - sliderSize = (sliderSize >= scrollbar.height) ? ((int)scrollbar.height - 2) : sliderSize; // Make sure the slider won't get outside of the scrollbar - slider = RAYGUI_CLITERAL(Rectangle) { (float)bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING), (float)scrollbar.y + (int)(((float)(value - minValue)/range)*(scrollbar.height - sliderSize)), (float)bounds.width - 2*(GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING)), (float)sliderSize }; - } - else - { - arrowDownRight = RAYGUI_CLITERAL(Rectangle) { (float)bounds.x + bounds.width - spinnerSize - GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)spinnerSize, (float)spinnerSize }; - scrollbar = RAYGUI_CLITERAL(Rectangle) { arrowUpLeft.x + arrowUpLeft.width, bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING), bounds.width - arrowUpLeft.width - arrowDownRight.width - 2*GuiGetStyle(SCROLLBAR, BORDER_WIDTH), bounds.height - 2*(GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING)) }; - sliderSize = (sliderSize >= scrollbar.width) ? ((int)scrollbar.width - 2) : sliderSize; // Make sure the slider won't get outside of the scrollbar - slider = RAYGUI_CLITERAL(Rectangle) { (float)scrollbar.x + (int)(((float)(value - minValue)/range)*(scrollbar.width - sliderSize)), (float)bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING), (float)sliderSize, (float)bounds.height - 2*(GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING)) }; - } - - // Update control - //-------------------------------------------------------------------- - if ((state != STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds)) - { - state = STATE_FOCUSED; - - // Handle mouse wheel - int wheel = (int)GetMouseWheelMove(); - if (wheel != 0) value += wheel; - - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - if (CheckCollisionPointRec(mousePoint, arrowUpLeft)) value -= range/GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - else if (CheckCollisionPointRec(mousePoint, arrowDownRight)) value += range/GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - - state = STATE_PRESSED; - } - else if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - if (!isVertical) - { - Rectangle scrollArea = { arrowUpLeft.x + arrowUpLeft.width, arrowUpLeft.y, scrollbar.width, bounds.height - 2*GuiGetStyle(SCROLLBAR, BORDER_WIDTH) }; - if (CheckCollisionPointRec(mousePoint, scrollArea)) value = (int)(((float)(mousePoint.x - scrollArea.x - slider.width/2)*range)/(scrollArea.width - slider.width) + minValue); - } - else - { - Rectangle scrollArea = { arrowUpLeft.x, arrowUpLeft.y+arrowUpLeft.height, bounds.width - 2*GuiGetStyle(SCROLLBAR, BORDER_WIDTH), scrollbar.height }; - if (CheckCollisionPointRec(mousePoint, scrollArea)) value = (int)(((float)(mousePoint.y - scrollArea.y - slider.height/2)*range)/(scrollArea.height - slider.height) + minValue); - } - } - } - - // Normalize value - if (value > maxValue) value = maxValue; - if (value < minValue) value = minValue; - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(SCROLLBAR, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER + state*3)), guiAlpha), Fade(GetColor(GuiGetStyle(DEFAULT, BORDER_COLOR_DISABLED)), guiAlpha)); // Draw the background - - GuiDrawRectangle(scrollbar, 0, BLANK, Fade(GetColor(GuiGetStyle(BUTTON, BASE_COLOR_NORMAL)), guiAlpha)); // Draw the scrollbar active area background - GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, BORDER + state*3)), guiAlpha)); // Draw the slider bar - - // Draw arrows (using icon if available) - if (GuiGetStyle(SCROLLBAR, ARROWS_VISIBLE)) - { -#if defined(RAYGUI_NO_ICONS) - GuiDrawText(isVertical ? "^" : "<", RAYGUI_CLITERAL(Rectangle){ arrowUpLeft.x, arrowUpLeft.y, isVertical ? bounds.width : bounds.height, isVertical ? bounds.width : bounds.height }, - TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha)); - GuiDrawText(isVertical ? "v" : ">", RAYGUI_CLITERAL(Rectangle){ arrowDownRight.x, arrowDownRight.y, isVertical ? bounds.width : bounds.height, isVertical ? bounds.width : bounds.height }, - TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha)); -#else - GuiDrawText(isVertical ? "#121#" : "#118#", RAYGUI_CLITERAL(Rectangle){ arrowUpLeft.x, arrowUpLeft.y, isVertical ? bounds.width : bounds.height, isVertical ? bounds.width : bounds.height }, - TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(SCROLLBAR, TEXT + state*3)), guiAlpha)); // ICON_ARROW_UP_FILL / ICON_ARROW_LEFT_FILL - GuiDrawText(isVertical ? "#120#" : "#119#", RAYGUI_CLITERAL(Rectangle){ arrowDownRight.x, arrowDownRight.y, isVertical ? bounds.width : bounds.height, isVertical ? bounds.width : bounds.height }, - TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(SCROLLBAR, TEXT + state*3)), guiAlpha)); // ICON_ARROW_DOWN_FILL / ICON_ARROW_RIGHT_FILL -#endif - } - //-------------------------------------------------------------------- - - return value; -} - -#if defined(RAYGUI_STANDALONE) -// Returns a Color struct from hexadecimal value -static Color GetColor(int hexValue) -{ - Color color; - - color.r = (unsigned char)(hexValue >> 24) & 0xFF; - color.g = (unsigned char)(hexValue >> 16) & 0xFF; - color.b = (unsigned char)(hexValue >> 8) & 0xFF; - color.a = (unsigned char)hexValue & 0xFF; - - return color; -} - -// Returns hexadecimal value for a Color -static int ColorToInt(Color color) -{ - return (((int)color.r << 24) | ((int)color.g << 16) | ((int)color.b << 8) | (int)color.a); -} - -// Check if point is inside rectangle -static bool CheckCollisionPointRec(Vector2 point, Rectangle rec) -{ - bool collision = false; - - if ((point.x >= rec.x) && (point.x <= (rec.x + rec.width)) && - (point.y >= rec.y) && (point.y <= (rec.y + rec.height))) collision = true; - - return collision; -} - -// Color fade-in or fade-out, alpha goes from 0.0f to 1.0f -static Color Fade(Color color, float alpha) -{ - if (alpha < 0.0f) alpha = 0.0f; - else if (alpha > 1.0f) alpha = 1.0f; - - Color result = { color.r, color.g, color.b, (unsigned char)(255.0f*alpha) }; - - return result; -} - -// Formatting of text with variables to 'embed' -static const char *TextFormat(const char *text, ...) -{ - #if !defined(RAYGUI_TEXTFORMAT_MAX_SIZE) - #define RAYGUI_TEXTFORMAT_MAX_SIZE 256 - #endif - - static char buffer[RAYGUI_TEXTFORMAT_MAX_SIZE]; - - va_list args; - va_start(args, text); - vsprintf(buffer, text, args); - va_end(args); - - return buffer; -} - -// Draw rectangle with vertical gradient fill color -// NOTE: This function is only used by GuiColorPicker() -static void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2) -{ - Rectangle bounds = { (float)posX, (float)posY, (float)width, (float)height }; - DrawRectangleGradientEx(bounds, color1, color2, color2, color1); -} - -// Split string into multiple strings -const char **TextSplit(const char *text, char delimiter, int *count) -{ - // NOTE: Current implementation returns a copy of the provided string with '\0' (string end delimiter) - // inserted between strings defined by "delimiter" parameter. No memory is dynamically allocated, - // all used memory is static... it has some limitations: - // 1. Maximum number of possible split strings is set by RAYGUI_TEXTSPLIT_MAX_ITEMS - // 2. Maximum size of text to split is RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE - - #if !defined(RAYGUI_TEXTSPLIT_MAX_ITEMS) - #define RAYGUI_TEXTSPLIT_MAX_ITEMS 128 - #endif - #if !defined(RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE) - #define RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE 1024 - #endif - - static const char *result[RAYGUI_TEXTSPLIT_MAX_ITEMS] = { NULL }; - static char buffer[RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE] = { 0 }; - memset(buffer, 0, RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE); - - result[0] = buffer; - int counter = 0; - - if (text != NULL) - { - counter = 1; - - // Count how many substrings we have on text and point to every one - for (int i = 0; i < RAYGUI_TEXTSPLIT_MAX_TEXT_SIZE; i++) - { - buffer[i] = text[i]; - if (buffer[i] == '\0') break; - else if (buffer[i] == delimiter) - { - buffer[i] = '\0'; // Set an end of string at this point - result[counter] = buffer + i + 1; - counter++; - - if (counter == RAYGUI_TEXTSPLIT_MAX_ITEMS) break; - } - } - } - - *count = counter; - return result; -} - -// Get integer value from text -// NOTE: This function replaces atoi() [stdlib.h] -static int TextToInteger(const char *text) -{ - int value = 0; - int sign = 1; - - if ((text[0] == '+') || (text[0] == '-')) - { - if (text[0] == '-') sign = -1; - text++; - } - - for (int i = 0; ((text[i] >= '0') && (text[i] <= '9')); ++i) value = value*10 + (int)(text[i] - '0'); - - return value*sign; -} - -// Encode codepoint into UTF-8 text (char array size returned as parameter) -static const char *CodepointToUTF8(int codepoint, int *byteSize) -{ - static char utf8[6] = { 0 }; - int size = 0; - - if (codepoint <= 0x7f) - { - utf8[0] = (char)codepoint; - size = 1; - } - else if (codepoint <= 0x7ff) - { - utf8[0] = (char)(((codepoint >> 6) & 0x1f) | 0xc0); - utf8[1] = (char)((codepoint & 0x3f) | 0x80); - size = 2; - } - else if (codepoint <= 0xffff) - { - utf8[0] = (char)(((codepoint >> 12) & 0x0f) | 0xe0); - utf8[1] = (char)(((codepoint >> 6) & 0x3f) | 0x80); - utf8[2] = (char)((codepoint & 0x3f) | 0x80); - size = 3; - } - else if (codepoint <= 0x10ffff) - { - utf8[0] = (char)(((codepoint >> 18) & 0x07) | 0xf0); - utf8[1] = (char)(((codepoint >> 12) & 0x3f) | 0x80); - utf8[2] = (char)(((codepoint >> 6) & 0x3f) | 0x80); - utf8[3] = (char)((codepoint & 0x3f) | 0x80); - size = 4; - } - - *byteSize = size; - - return utf8; -} - -// Get next codepoint in a UTF-8 encoded text, scanning until '\0' is found -// When a invalid UTF-8 byte is encountered we exit as soon as possible and a '?'(0x3f) codepoint is returned -// Total number of bytes processed are returned as a parameter -// NOTE: the standard says U+FFFD should be returned in case of errors -// but that character is not supported by the default font in raylib -static int GetCodepoint(const char *text, int *bytesProcessed) -{ -/* - UTF-8 specs from https://www.ietf.org/rfc/rfc3629.txt - - Char. number range | UTF-8 octet sequence - (hexadecimal) | (binary) - --------------------+--------------------------------------------- - 0000 0000-0000 007F | 0xxxxxxx - 0000 0080-0000 07FF | 110xxxxx 10xxxxxx - 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx - 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx -*/ - // NOTE: on decode errors we return as soon as possible - - int code = 0x3f; // Codepoint (defaults to '?') - int octet = (unsigned char)(text[0]); // The first UTF8 octet - *bytesProcessed = 1; - - if (octet <= 0x7f) - { - // Only one octet (ASCII range x00-7F) - code = text[0]; - } - else if ((octet & 0xe0) == 0xc0) - { - // Two octets - - // [0]xC2-DF [1]UTF8-tail(x80-BF) - unsigned char octet1 = text[1]; - - if ((octet1 == '\0') || ((octet1 >> 6) != 2)) { *bytesProcessed = 2; return code; } // Unexpected sequence - - if ((octet >= 0xc2) && (octet <= 0xdf)) - { - code = ((octet & 0x1f) << 6) | (octet1 & 0x3f); - *bytesProcessed = 2; - } - } - else if ((octet & 0xf0) == 0xe0) - { - // Three octets - unsigned char octet1 = text[1]; - unsigned char octet2 = '\0'; - - if ((octet1 == '\0') || ((octet1 >> 6) != 2)) { *bytesProcessed = 2; return code; } // Unexpected sequence - - octet2 = text[2]; - - if ((octet2 == '\0') || ((octet2 >> 6) != 2)) { *bytesProcessed = 3; return code; } // Unexpected sequence - - // [0]xE0 [1]xA0-BF [2]UTF8-tail(x80-BF) - // [0]xE1-EC [1]UTF8-tail [2]UTF8-tail(x80-BF) - // [0]xED [1]x80-9F [2]UTF8-tail(x80-BF) - // [0]xEE-EF [1]UTF8-tail [2]UTF8-tail(x80-BF) - - if (((octet == 0xe0) && !((octet1 >= 0xa0) && (octet1 <= 0xbf))) || - ((octet == 0xed) && !((octet1 >= 0x80) && (octet1 <= 0x9f)))) { *bytesProcessed = 2; return code; } - - if ((octet >= 0xe0) && (0 <= 0xef)) - { - code = ((octet & 0xf) << 12) | ((octet1 & 0x3f) << 6) | (octet2 & 0x3f); - *bytesProcessed = 3; - } - } - else if ((octet & 0xf8) == 0xf0) - { - // Four octets - if (octet > 0xf4) return code; - - unsigned char octet1 = text[1]; - unsigned char octet2 = '\0'; - unsigned char octet3 = '\0'; - - if ((octet1 == '\0') || ((octet1 >> 6) != 2)) { *bytesProcessed = 2; return code; } // Unexpected sequence - - octet2 = text[2]; - - if ((octet2 == '\0') || ((octet2 >> 6) != 2)) { *bytesProcessed = 3; return code; } // Unexpected sequence - - octet3 = text[3]; - - if ((octet3 == '\0') || ((octet3 >> 6) != 2)) { *bytesProcessed = 4; return code; } // Unexpected sequence - - // [0]xF0 [1]x90-BF [2]UTF8-tail [3]UTF8-tail - // [0]xF1-F3 [1]UTF8-tail [2]UTF8-tail [3]UTF8-tail - // [0]xF4 [1]x80-8F [2]UTF8-tail [3]UTF8-tail - - if (((octet == 0xf0) && !((octet1 >= 0x90) && (octet1 <= 0xbf))) || - ((octet == 0xf4) && !((octet1 >= 0x80) && (octet1 <= 0x8f)))) { *bytesProcessed = 2; return code; } // Unexpected sequence - - if (octet >= 0xf0) - { - code = ((octet & 0x7) << 18) | ((octet1 & 0x3f) << 12) | ((octet2 & 0x3f) << 6) | (octet3 & 0x3f); - *bytesProcessed = 4; - } - } - - if (code > 0x10ffff) code = 0x3f; // Codepoints after U+10ffff are invalid - - return code; -} -#endif // RAYGUI_STANDALONE - -#endif // RAYGUI_IMPLEMENTATION diff --git a/examples/shapes/reasings.h b/examples/shapes/reasings.h deleted file mode 100644 index 657ea24..0000000 --- a/examples/shapes/reasings.h +++ /dev/null @@ -1,263 +0,0 @@ -/******************************************************************************************* -* -* reasings - raylib easings library, based on Robert Penner library -* -* Useful easing functions for values animation -* -* This header uses: -* #define REASINGS_STATIC_INLINE // Inlines all functions code, so it runs faster. -* // This requires lots of memory on system. -* How to use: -* The four inputs t,b,c,d are defined as follows: -* t = current time (in any unit measure, but same unit as duration) -* b = starting value to interpolate -* c = the total change in value of b that needs to occur -* d = total time it should take to complete (duration) -* -* Example: -* -* int currentTime = 0; -* int duration = 100; -* float startPositionX = 0.0f; -* float finalPositionX = 30.0f; -* float currentPositionX = startPositionX; -* -* while (currentPositionX < finalPositionX) -* { -* currentPositionX = EaseSineIn(currentTime, startPositionX, finalPositionX - startPositionX, duration); -* currentTime++; -* } -* -* A port of Robert Penner's easing equations to C (http://robertpenner.com/easing/) -* -* Robert Penner License -* --------------------------------------------------------------------------------- -* Open source under the BSD License. -* -* Copyright (c) 2001 Robert Penner. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, -* are permitted provided that the following conditions are met: -* -* - Redistributions of source code must retain the above copyright notice, -* this list of conditions and the following disclaimer. -* - Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* - Neither the name of the author nor the names of contributors may be used -* to endorse or promote products derived from this software without specific -* prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -* OF THE POSSIBILITY OF SUCH DAMAGE. -* --------------------------------------------------------------------------------- -* -* Copyright (c) 2015-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 REASINGS_H -#define REASINGS_H - -#define REASINGS_STATIC_INLINE // NOTE: By default, compile functions as static inline - -#if defined(REASINGS_STATIC_INLINE) - #define EASEDEF static inline -#else - #define EASEDEF extern -#endif - -#include // Required for: sinf(), cosf(), sqrtf(), powf() - -#ifndef PI - #define PI 3.14159265358979323846f //Required as PI is not always defined in math.h -#endif - -#if defined(__cplusplus) -extern "C" { // Prevents name mangling of functions -#endif - -// Linear Easing functions -EASEDEF float EaseLinearNone(float t, float b, float c, float d) { return (c*t/d + b); } // Ease: Linear -EASEDEF float EaseLinearIn(float t, float b, float c, float d) { return (c*t/d + b); } // Ease: Linear In -EASEDEF float EaseLinearOut(float t, float b, float c, float d) { return (c*t/d + b); } // Ease: Linear Out -EASEDEF float EaseLinearInOut(float t, float b, float c, float d) { return (c*t/d + b); } // Ease: Linear In Out - -// Sine Easing functions -EASEDEF float EaseSineIn(float t, float b, float c, float d) { return (-c*cosf(t/d*(PI/2.0f)) + c + b); } // Ease: Sine In -EASEDEF float EaseSineOut(float t, float b, float c, float d) { return (c*sinf(t/d*(PI/2.0f)) + b); } // Ease: Sine Out -EASEDEF float EaseSineInOut(float t, float b, float c, float d) { return (-c/2.0f*(cosf(PI*t/d) - 1.0f) + b); } // Ease: Sine In Out - -// Circular Easing functions -EASEDEF float EaseCircIn(float t, float b, float c, float d) { t /= d; return (-c*(sqrtf(1.0f - t*t) - 1.0f) + b); } // Ease: Circular In -EASEDEF float EaseCircOut(float t, float b, float c, float d) { t = t/d - 1.0f; return (c*sqrtf(1.0f - t*t) + b); } // Ease: Circular Out -EASEDEF float EaseCircInOut(float t, float b, float c, float d) // Ease: Circular In Out -{ - if ((t/=d/2.0f) < 1.0f) return (-c/2.0f*(sqrtf(1.0f - t*t) - 1.0f) + b); - t -= 2.0f; return (c/2.0f*(sqrtf(1.0f - t*t) + 1.0f) + b); -} - -// Cubic Easing functions -EASEDEF float EaseCubicIn(float t, float b, float c, float d) { t /= d; return (c*t*t*t + b); } // Ease: Cubic In -EASEDEF float EaseCubicOut(float t, float b, float c, float d) { t = t/d - 1.0f; return (c*(t*t*t + 1.0f) + b); } // Ease: Cubic Out -EASEDEF float EaseCubicInOut(float t, float b, float c, float d) // Ease: Cubic In Out -{ - if ((t/=d/2.0f) < 1.0f) return (c/2.0f*t*t*t + b); - t -= 2.0f; return (c/2.0f*(t*t*t + 2.0f) + b); -} - -// Quadratic Easing functions -EASEDEF float EaseQuadIn(float t, float b, float c, float d) { t /= d; return (c*t*t + b); } // Ease: Quadratic In -EASEDEF float EaseQuadOut(float t, float b, float c, float d) { t /= d; return (-c*t*(t - 2.0f) + b); } // Ease: Quadratic Out -EASEDEF float EaseQuadInOut(float t, float b, float c, float d) // Ease: Quadratic In Out -{ - if ((t/=d/2) < 1) return (((c/2)*(t*t)) + b); - return (-c/2.0f*(((t - 1.0f)*(t - 3.0f)) - 1.0f) + b); -} - -// Exponential Easing functions -EASEDEF float EaseExpoIn(float t, float b, float c, float d) { return (t == 0.0f) ? b : (c*powf(2.0f, 10.0f*(t/d - 1.0f)) + b); } // Ease: Exponential In -EASEDEF float EaseExpoOut(float t, float b, float c, float d) { return (t == d) ? (b + c) : (c*(-powf(2.0f, -10.0f*t/d) + 1.0f) + b); } // Ease: Exponential Out -EASEDEF float EaseExpoInOut(float t, float b, float c, float d) // Ease: Exponential In Out -{ - if (t == 0.0f) return b; - if (t == d) return (b + c); - if ((t/=d/2.0f) < 1.0f) return (c/2.0f*powf(2.0f, 10.0f*(t - 1.0f)) + b); - - return (c/2.0f*(-powf(2.0f, -10.0f*(t - 1.0f)) + 2.0f) + b); -} - -// Back Easing functions -EASEDEF float EaseBackIn(float t, float b, float c, float d) // Ease: Back In -{ - float s = 1.70158f; - float postFix = t/=d; - return (c*(postFix)*t*((s + 1.0f)*t - s) + b); -} - -EASEDEF float EaseBackOut(float t, float b, float c, float d) // Ease: Back Out -{ - float s = 1.70158f; - t = t/d - 1.0f; - return (c*(t*t*((s + 1.0f)*t + s) + 1.0f) + b); -} - -EASEDEF float EaseBackInOut(float t, float b, float c, float d) // Ease: Back In Out -{ - float s = 1.70158f; - if ((t/=d/2.0f) < 1.0f) - { - s *= 1.525f; - return (c/2.0f*(t*t*((s + 1.0f)*t - s)) + b); - } - - float postFix = t-=2.0f; - s *= 1.525f; - return (c/2.0f*((postFix)*t*((s + 1.0f)*t + s) + 2.0f) + b); -} - -// Bounce Easing functions -EASEDEF float EaseBounceOut(float t, float b, float c, float d) // Ease: Bounce Out -{ - if ((t/=d) < (1.0f/2.75f)) - { - return (c*(7.5625f*t*t) + b); - } - else if (t < (2.0f/2.75f)) - { - float postFix = t-=(1.5f/2.75f); - return (c*(7.5625f*(postFix)*t + 0.75f) + b); - } - else if (t < (2.5/2.75)) - { - float postFix = t-=(2.25f/2.75f); - return (c*(7.5625f*(postFix)*t + 0.9375f) + b); - } - else - { - float postFix = t-=(2.625f/2.75f); - return (c*(7.5625f*(postFix)*t + 0.984375f) + b); - } -} - -EASEDEF float EaseBounceIn(float t, float b, float c, float d) { return (c - EaseBounceOut(d - t, 0.0f, c, d) + b); } // Ease: Bounce In -EASEDEF float EaseBounceInOut(float t, float b, float c, float d) // Ease: Bounce In Out -{ - if (t < d/2.0f) return (EaseBounceIn(t*2.0f, 0.0f, c, d)*0.5f + b); - else return (EaseBounceOut(t*2.0f - d, 0.0f, c, d)*0.5f + c*0.5f + b); -} - -// Elastic Easing functions -EASEDEF float EaseElasticIn(float t, float b, float c, float d) // Ease: Elastic In -{ - if (t == 0.0f) return b; - if ((t/=d) == 1.0f) return (b + c); - - float p = d*0.3f; - float a = c; - float s = p/4.0f; - float postFix = a*powf(2.0f, 10.0f*(t-=1.0f)); - - return (-(postFix*sinf((t*d-s)*(2.0f*PI)/p )) + b); -} - -EASEDEF float EaseElasticOut(float t, float b, float c, float d) // Ease: Elastic Out -{ - if (t == 0.0f) return b; - if ((t/=d) == 1.0f) return (b + c); - - float p = d*0.3f; - float a = c; - float s = p/4.0f; - - return (a*powf(2.0f,-10.0f*t)*sinf((t*d-s)*(2.0f*PI)/p) + c + b); -} - -EASEDEF float EaseElasticInOut(float t, float b, float c, float d) // Ease: Elastic In Out -{ - if (t == 0.0f) return b; - if ((t/=d/2.0f) == 2.0f) return (b + c); - - float p = d*(0.3f*1.5f); - float a = c; - float s = p/4.0f; - - if (t < 1.0f) - { - float postFix = a*powf(2.0f, 10.0f*(t-=1.0f)); - return -0.5f*(postFix*sinf((t*d-s)*(2.0f*PI)/p)) + b; - } - - float postFix = a*powf(2.0f, -10.0f*(t-=1.0f)); - - return (postFix*sinf((t*d-s)*(2.0f*PI)/p)*0.5f + c + b); -} - -#if defined(__cplusplus) -} -#endif - -#endif // REASINGS_H diff --git a/examples/shapes/shapes_basic_shapes.c b/examples/shapes/shapes_basic_shapes.c deleted file mode 100644 index 40056b4..0000000 --- a/examples/shapes/shapes_basic_shapes.c +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - Draw basic shapes 2d (rectangle, circle, line...) -* -* Example originally created with raylib 1.0, last time updated with raylib 4.2 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing"); - - float rotation = 0.0f; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - rotation += 0.2f; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText("some basic shapes available on raylib", 20, 20, 20, DARKGRAY); - - // Circle shapes and lines - DrawCircle(screenWidth/5, 120, 35, DARKBLUE); - DrawCircleGradient(screenWidth/5, 220, 60, GREEN, SKYBLUE); - DrawCircleLines(screenWidth/5, 340, 80, DARKBLUE); - - // Rectangle shapes and lines - DrawRectangle(screenWidth/4*2 - 60, 100, 120, 60, RED); - DrawRectangleGradientH(screenWidth/4*2 - 90, 170, 180, 130, MAROON, GOLD); - DrawRectangleLines(screenWidth/4*2 - 40, 320, 80, 60, ORANGE); // NOTE: Uses QUADS internally, not lines - - // Triangle shapes and lines - DrawTriangle((Vector2){ screenWidth/4.0f *3.0f, 80.0f }, - (Vector2){ screenWidth/4.0f *3.0f - 60.0f, 150.0f }, - (Vector2){ screenWidth/4.0f *3.0f + 60.0f, 150.0f }, VIOLET); - - DrawTriangleLines((Vector2){ screenWidth/4.0f*3.0f, 160.0f }, - (Vector2){ screenWidth/4.0f*3.0f - 20.0f, 230.0f }, - (Vector2){ screenWidth/4.0f*3.0f + 20.0f, 230.0f }, DARKBLUE); - - // Polygon shapes and lines - DrawPoly((Vector2){ screenWidth/4.0f*3, 330 }, 6, 80, rotation, BROWN); - DrawPolyLines((Vector2){ screenWidth/4.0f*3, 330 }, 6, 90, rotation, BROWN); - DrawPolyLinesEx((Vector2){ screenWidth/4.0f*3, 330 }, 6, 85, rotation, 6, BEIGE); - - // NOTE: We draw all LINES based shapes together to optimize internal drawing, - // this way, all LINES are rendered in a single draw pass - DrawLine(18, 42, screenWidth - 18, 42, BLACK); - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shapes/shapes_bouncing_ball.c b/examples/shapes/shapes_bouncing_ball.c deleted file mode 100644 index 5e43b80..0000000 --- a/examples/shapes/shapes_bouncing_ball.c +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - bouncing ball -* -* Example originally created with raylib 2.5, last time updated with raylib 2.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2013-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //--------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - bouncing ball"); - - Vector2 ballPosition = { GetScreenWidth()/2.0f, GetScreenHeight()/2.0f }; - Vector2 ballSpeed = { 5.0f, 4.0f }; - int ballRadius = 20; - - bool pause = 0; - int framesCounter = 0; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //---------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //----------------------------------------------------- - if (IsKeyPressed(KEY_SPACE)) pause = !pause; - - if (!pause) - { - ballPosition.x += ballSpeed.x; - ballPosition.y += ballSpeed.y; - - // Check walls collision for bouncing - if ((ballPosition.x >= (GetScreenWidth() - ballRadius)) || (ballPosition.x <= ballRadius)) ballSpeed.x *= -1.0f; - if ((ballPosition.y >= (GetScreenHeight() - ballRadius)) || (ballPosition.y <= ballRadius)) ballSpeed.y *= -1.0f; - } - else framesCounter++; - //----------------------------------------------------- - - // Draw - //----------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawCircleV(ballPosition, (float)ballRadius, MAROON); - DrawText("PRESS SPACE to PAUSE BALL MOVEMENT", 10, GetScreenHeight() - 25, 20, LIGHTGRAY); - - // On pause, we draw a blinking message - if (pause && ((framesCounter/30)%2)) DrawText("PAUSED", 350, 200, 30, GRAY); - - DrawFPS(10, 10); - - EndDrawing(); - //----------------------------------------------------- - } - - // De-Initialization - //--------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //---------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shapes/shapes_collision_area.c b/examples/shapes/shapes_collision_area.c deleted file mode 100644 index 34d0481..0000000 --- a/examples/shapes/shapes_collision_area.c +++ /dev/null @@ -1,114 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - collision area -* -* Example originally created with raylib 2.5, last time updated with raylib 2.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2013-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include // Required for: abs() - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //--------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - collision area"); - - // Box A: Moving box - Rectangle boxA = { 10, GetScreenHeight()/2.0f - 50, 200, 100 }; - int boxASpeedX = 4; - - // Box B: Mouse moved box - Rectangle boxB = { GetScreenWidth()/2.0f - 30, GetScreenHeight()/2.0f - 30, 60, 60 }; - - Rectangle boxCollision = { 0 }; // Collision rectangle - - int screenUpperLimit = 40; // Top menu limits - - bool pause = false; // Movement pause - bool collision = false; // Collision detection - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //---------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //----------------------------------------------------- - // Move box if not paused - if (!pause) boxA.x += boxASpeedX; - - // Bounce box on x screen limits - if (((boxA.x + boxA.width) >= GetScreenWidth()) || (boxA.x <= 0)) boxASpeedX *= -1; - - // Update player-controlled-box (box02) - boxB.x = GetMouseX() - boxB.width/2; - boxB.y = GetMouseY() - boxB.height/2; - - // Make sure Box B does not go out of move area limits - if ((boxB.x + boxB.width) >= GetScreenWidth()) boxB.x = GetScreenWidth() - boxB.width; - else if (boxB.x <= 0) boxB.x = 0; - - if ((boxB.y + boxB.height) >= GetScreenHeight()) boxB.y = GetScreenHeight() - boxB.height; - else if (boxB.y <= screenUpperLimit) boxB.y = (float)screenUpperLimit; - - // Check boxes collision - collision = CheckCollisionRecs(boxA, boxB); - - // Get collision rectangle (only on collision) - if (collision) boxCollision = GetCollisionRec(boxA, boxB); - - // Pause Box A movement - if (IsKeyPressed(KEY_SPACE)) pause = !pause; - //----------------------------------------------------- - - // Draw - //----------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawRectangle(0, 0, screenWidth, screenUpperLimit, collision? RED : BLACK); - - DrawRectangleRec(boxA, GOLD); - DrawRectangleRec(boxB, BLUE); - - if (collision) - { - // Draw collision area - DrawRectangleRec(boxCollision, LIME); - - // Draw collision message - DrawText("COLLISION!", GetScreenWidth()/2 - MeasureText("COLLISION!", 20)/2, screenUpperLimit/2 - 10, 20, BLACK); - - // Draw collision area - DrawText(TextFormat("Collision Area: %i", (int)boxCollision.width*(int)boxCollision.height), GetScreenWidth()/2 - 100, screenUpperLimit + 10, 20, BLACK); - } - - DrawFPS(10, 10); - - EndDrawing(); - //----------------------------------------------------- - } - - // De-Initialization - //--------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //---------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shapes/shapes_colors_palette.c b/examples/shapes/shapes_colors_palette.c deleted file mode 100644 index d557825..0000000 --- a/examples/shapes/shapes_colors_palette.c +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - Colors palette -* -* Example originally created with raylib 1.0, last time updated with raylib 2.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define MAX_COLORS_COUNT 21 // Number of colors available - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - colors palette"); - - Color colors[MAX_COLORS_COUNT] = { - DARKGRAY, MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, DARKBROWN, - GRAY, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK, YELLOW, - GREEN, SKYBLUE, PURPLE, BEIGE }; - - const char *colorNames[MAX_COLORS_COUNT] = { - "DARKGRAY", "MAROON", "ORANGE", "DARKGREEN", "DARKBLUE", "DARKPURPLE", - "DARKBROWN", "GRAY", "RED", "GOLD", "LIME", "BLUE", "VIOLET", "BROWN", - "LIGHTGRAY", "PINK", "YELLOW", "GREEN", "SKYBLUE", "PURPLE", "BEIGE" }; - - Rectangle colorsRecs[MAX_COLORS_COUNT] = { 0 }; // Rectangles array - - // Fills colorsRecs data (for every rectangle) - for (int i = 0; i < MAX_COLORS_COUNT; i++) - { - colorsRecs[i].x = 20.0f + 100.0f *(i%7) + 10.0f *(i%7); - colorsRecs[i].y = 80.0f + 100.0f *(i/7) + 10.0f *(i/7); - colorsRecs[i].width = 100.0f; - colorsRecs[i].height = 100.0f; - } - - int colorState[MAX_COLORS_COUNT] = { 0 }; // Color state: 0-DEFAULT, 1-MOUSE_HOVER - - Vector2 mousePoint = { 0.0f, 0.0f }; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - mousePoint = GetMousePosition(); - - for (int i = 0; i < MAX_COLORS_COUNT; i++) - { - if (CheckCollisionPointRec(mousePoint, colorsRecs[i])) colorState[i] = 1; - else colorState[i] = 0; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText("raylib colors palette", 28, 42, 20, BLACK); - DrawText("press SPACE to see all colors", GetScreenWidth() - 180, GetScreenHeight() - 40, 10, GRAY); - - for (int i = 0; i < MAX_COLORS_COUNT; i++) // Draw all rectangles - { - DrawRectangleRec(colorsRecs[i], Fade(colors[i], colorState[i]? 0.6f : 1.0f)); - - if (IsKeyDown(KEY_SPACE) || colorState[i]) - { - DrawRectangle((int)colorsRecs[i].x, (int)(colorsRecs[i].y + colorsRecs[i].height - 26), (int)colorsRecs[i].width, 20, BLACK); - DrawRectangleLinesEx(colorsRecs[i], 6, Fade(BLACK, 0.3f)); - DrawText(colorNames[i], (int)(colorsRecs[i].x + colorsRecs[i].width - MeasureText(colorNames[i], 10) - 12), - (int)(colorsRecs[i].y + colorsRecs[i].height - 20), 10, colors[i]); - } - } - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shapes/shapes_draw_rectangle_rounded.c b/examples/shapes/shapes_draw_rectangle_rounded.c deleted file mode 100644 index 8150e09..0000000 --- a/examples/shapes/shapes_draw_rectangle_rounded.c +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - draw rectangle rounded (with gui options) -* -* Example originally created with raylib 2.5, last time updated with raylib 2.5 -* -* Example contributed by Vlad Adrian (@demizdor) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2018-2023 Vlad Adrian (@demizdor) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include - -#define RAYGUI_IMPLEMENTATION -#include "raygui.h" // Required for GUI controls - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - draw rectangle rounded"); - - float roundness = 0.2f; - int width = 200; - int height = 100; - int segments = 0; - int lineThick = 1; - - bool drawRect = false; - bool drawRoundedRect = true; - bool drawRoundedLines = false; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - Rectangle rec = { ((float)GetScreenWidth() - width - 250)/2, (GetScreenHeight() - height)/2.0f, (float)width, (float)height }; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawLine(560, 0, 560, GetScreenHeight(), Fade(LIGHTGRAY, 0.6f)); - DrawRectangle(560, 0, GetScreenWidth() - 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.3f)); - - if (drawRect) DrawRectangleRec(rec, Fade(GOLD, 0.6f)); - if (drawRoundedRect) DrawRectangleRounded(rec, roundness, segments, Fade(MAROON, 0.2f)); - if (drawRoundedLines) DrawRectangleRoundedLines(rec,roundness, segments, (float)lineThick, Fade(MAROON, 0.4f)); - - // Draw GUI controls - //------------------------------------------------------------------------------ - width = (int)GuiSliderBar((Rectangle){ 640, 40, 105, 20 }, "Width", NULL, (float)width, 0, (float)GetScreenWidth() - 300); - height = (int)GuiSliderBar((Rectangle){ 640, 70, 105, 20 }, "Height", NULL, (float)height, 0, (float)GetScreenHeight() - 50); - roundness = GuiSliderBar((Rectangle){ 640, 140, 105, 20 }, "Roundness", NULL, roundness, 0.0f, 1.0f); - lineThick = (int)GuiSliderBar((Rectangle){ 640, 170, 105, 20 }, "Thickness", NULL, (float)lineThick, 0, 20); - segments = (int)GuiSliderBar((Rectangle){ 640, 240, 105, 20}, "Segments", NULL, (float)segments, 0, 60); - - drawRoundedRect = GuiCheckBox((Rectangle){ 640, 320, 20, 20 }, "DrawRoundedRect", drawRoundedRect); - drawRoundedLines = GuiCheckBox((Rectangle){ 640, 350, 20, 20 }, "DrawRoundedLines", drawRoundedLines); - drawRect = GuiCheckBox((Rectangle){ 640, 380, 20, 20}, "DrawRect", drawRect); - //------------------------------------------------------------------------------ - - DrawText(TextFormat("MODE: %s", (segments >= 4)? "MANUAL" : "AUTO"), 640, 280, 10, (segments >= 4)? MAROON : DARKGRAY); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shapes/shapes_draw_ring.c b/examples/shapes/shapes_draw_ring.c deleted file mode 100644 index b001b92..0000000 --- a/examples/shapes/shapes_draw_ring.c +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - draw ring (with gui options) -* -* Example originally created with raylib 2.5, last time updated with raylib 2.5 -* -* Example contributed by Vlad Adrian (@demizdor) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2018-2023 Vlad Adrian (@demizdor) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include - -#define RAYGUI_IMPLEMENTATION -#include "raygui.h" // Required for GUI controls - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - draw ring"); - - Vector2 center = {(GetScreenWidth() - 300)/2.0f, GetScreenHeight()/2.0f }; - - float innerRadius = 80.0f; - float outerRadius = 190.0f; - - float startAngle = 0.0f; - float endAngle = 360.0f; - int segments = 0; - - bool drawRing = true; - bool drawRingLines = false; - bool drawCircleLines = false; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // NOTE: All variables update happens inside GUI control functions - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawLine(500, 0, 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.6f)); - DrawRectangle(500, 0, GetScreenWidth() - 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.3f)); - - if (drawRing) DrawRing(center, innerRadius, outerRadius, startAngle, endAngle, segments, Fade(MAROON, 0.3f)); - if (drawRingLines) DrawRingLines(center, innerRadius, outerRadius, startAngle, endAngle, segments, Fade(BLACK, 0.4f)); - if (drawCircleLines) DrawCircleSectorLines(center, outerRadius, startAngle, endAngle, segments, Fade(BLACK, 0.4f)); - - // Draw GUI controls - //------------------------------------------------------------------------------ - startAngle = GuiSliderBar((Rectangle){ 600, 40, 120, 20 }, "StartAngle", NULL, startAngle, -450, 450); - endAngle = GuiSliderBar((Rectangle){ 600, 70, 120, 20 }, "EndAngle", NULL, endAngle, -450, 450); - - innerRadius = GuiSliderBar((Rectangle){ 600, 140, 120, 20 }, "InnerRadius", NULL, innerRadius, 0, 100); - outerRadius = GuiSliderBar((Rectangle){ 600, 170, 120, 20 }, "OuterRadius", NULL, outerRadius, 0, 200); - - segments = (int)GuiSliderBar((Rectangle){ 600, 240, 120, 20 }, "Segments", NULL, (float)segments, 0, 100); - - drawRing = GuiCheckBox((Rectangle){ 600, 320, 20, 20 }, "Draw Ring", drawRing); - drawRingLines = GuiCheckBox((Rectangle){ 600, 350, 20, 20 }, "Draw RingLines", drawRingLines); - drawCircleLines = GuiCheckBox((Rectangle){ 600, 380, 20, 20 }, "Draw CircleLines", drawCircleLines); - //------------------------------------------------------------------------------ - - int minSegments = (int)ceilf((endAngle - startAngle)/90); - DrawText(TextFormat("MODE: %s", (segments >= minSegments)? "MANUAL" : "AUTO"), 600, 270, 10, (segments >= minSegments)? MAROON : DARKGRAY); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shapes/shapes_easings_ball_anim.c b/examples/shapes/shapes_easings_ball_anim.c deleted file mode 100644 index 866ec09..0000000 --- a/examples/shapes/shapes_easings_ball_anim.c +++ /dev/null @@ -1,115 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - easings ball anim -* -* Example originally created with raylib 2.5, last time updated with raylib 2.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include "reasings.h" // Required for easing functions - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - easings ball anim"); - - // Ball variable value to be animated with easings - int ballPositionX = -100; - int ballRadius = 20; - float ballAlpha = 0.0f; - - int state = 0; - int framesCounter = 0; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - if (state == 0) // Move ball position X with easing - { - framesCounter++; - ballPositionX = (int)EaseElasticOut((float)framesCounter, -100, screenWidth/2.0f + 100, 120); - - if (framesCounter >= 120) - { - framesCounter = 0; - state = 1; - } - } - else if (state == 1) // Increase ball radius with easing - { - framesCounter++; - ballRadius = (int)EaseElasticIn((float)framesCounter, 20, 500, 200); - - if (framesCounter >= 200) - { - framesCounter = 0; - state = 2; - } - } - else if (state == 2) // Change ball alpha with easing (background color blending) - { - framesCounter++; - ballAlpha = EaseCubicOut((float)framesCounter, 0.0f, 1.0f, 200); - - if (framesCounter >= 200) - { - framesCounter = 0; - state = 3; - } - } - else if (state == 3) // Reset state to play again - { - if (IsKeyPressed(KEY_ENTER)) - { - // Reset required variables to play again - ballPositionX = -100; - ballRadius = 20; - ballAlpha = 0.0f; - state = 0; - } - } - - if (IsKeyPressed(KEY_R)) framesCounter = 0; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - if (state >= 2) DrawRectangle(0, 0, screenWidth, screenHeight, GREEN); - DrawCircle(ballPositionX, 200, (float)ballRadius, Fade(RED, 1.0f - ballAlpha)); - - if (state == 3) DrawText("PRESS [ENTER] TO PLAY AGAIN!", 240, 200, 20, BLACK); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shapes/shapes_easings_box_anim.c b/examples/shapes/shapes_easings_box_anim.c deleted file mode 100644 index a854bf6..0000000 --- a/examples/shapes/shapes_easings_box_anim.c +++ /dev/null @@ -1,141 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - easings box anim -* -* Example originally created with raylib 2.5, last time updated with raylib 2.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include "reasings.h" // Required for easing functions - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - easings box anim"); - - // Box variables to be animated with easings - Rectangle rec = { GetScreenWidth()/2.0f, -100, 100, 100 }; - float rotation = 0.0f; - float alpha = 1.0f; - - int state = 0; - int framesCounter = 0; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - switch (state) - { - case 0: // Move box down to center of screen - { - framesCounter++; - - // NOTE: Remember that 3rd parameter of easing function refers to - // desired value variation, do not confuse it with expected final value! - rec.y = EaseElasticOut((float)framesCounter, -100, GetScreenHeight()/2.0f + 100, 120); - - if (framesCounter >= 120) - { - framesCounter = 0; - state = 1; - } - } break; - case 1: // Scale box to an horizontal bar - { - framesCounter++; - rec.height = EaseBounceOut((float)framesCounter, 100, -90, 120); - rec.width = EaseBounceOut((float)framesCounter, 100, (float)GetScreenWidth(), 120); - - if (framesCounter >= 120) - { - framesCounter = 0; - state = 2; - } - } break; - case 2: // Rotate horizontal bar rectangle - { - framesCounter++; - rotation = EaseQuadOut((float)framesCounter, 0.0f, 270.0f, 240); - - if (framesCounter >= 240) - { - framesCounter = 0; - state = 3; - } - } break; - case 3: // Increase bar size to fill all screen - { - framesCounter++; - rec.height = EaseCircOut((float)framesCounter, 10, (float)GetScreenWidth(), 120); - - if (framesCounter >= 120) - { - framesCounter = 0; - state = 4; - } - } break; - case 4: // Fade out animation - { - framesCounter++; - alpha = EaseSineOut((float)framesCounter, 1.0f, -1.0f, 160); - - if (framesCounter >= 160) - { - framesCounter = 0; - state = 5; - } - } break; - default: break; - } - - // Reset animation at any moment - if (IsKeyPressed(KEY_SPACE)) - { - rec = (Rectangle){ GetScreenWidth()/2.0f, -100, 100, 100 }; - rotation = 0.0f; - alpha = 1.0f; - state = 0; - framesCounter = 0; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawRectanglePro(rec, (Vector2){ rec.width/2, rec.height/2 }, rotation, Fade(BLACK, alpha)); - - DrawText("PRESS [SPACE] TO RESET BOX ANIMATION!", 10, GetScreenHeight() - 25, 20, LIGHTGRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shapes/shapes_easings_rectangle_array.c b/examples/shapes/shapes_easings_rectangle_array.c deleted file mode 100644 index 03916f5..0000000 --- a/examples/shapes/shapes_easings_rectangle_array.c +++ /dev/null @@ -1,123 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - easings rectangle array -* -* NOTE: This example requires 'easings.h' library, provided on raylib/src. Just copy -* the library to same directory as example or make sure it's available on include path. -* -* Example originally created with raylib 2.0, last time updated with raylib 2.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include "reasings.h" // Required for easing functions - -#define RECS_WIDTH 50 -#define RECS_HEIGHT 50 - -#define MAX_RECS_X 800/RECS_WIDTH -#define MAX_RECS_Y 450/RECS_HEIGHT - -#define PLAY_TIME_IN_FRAMES 240 // At 60 fps = 4 seconds - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - easings rectangle array"); - - Rectangle recs[MAX_RECS_X*MAX_RECS_Y] = { 0 }; - - for (int y = 0; y < MAX_RECS_Y; y++) - { - for (int x = 0; x < MAX_RECS_X; x++) - { - recs[y*MAX_RECS_X + x].x = RECS_WIDTH/2.0f + RECS_WIDTH*x; - recs[y*MAX_RECS_X + x].y = RECS_HEIGHT/2.0f + RECS_HEIGHT*y; - recs[y*MAX_RECS_X + x].width = RECS_WIDTH; - recs[y*MAX_RECS_X + x].height = RECS_HEIGHT; - } - } - - float rotation = 0.0f; - int framesCounter = 0; - int state = 0; // Rectangles animation state: 0-Playing, 1-Finished - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - if (state == 0) - { - framesCounter++; - - for (int i = 0; i < MAX_RECS_X*MAX_RECS_Y; i++) - { - recs[i].height = EaseCircOut((float)framesCounter, RECS_HEIGHT, -RECS_HEIGHT, PLAY_TIME_IN_FRAMES); - recs[i].width = EaseCircOut((float)framesCounter, RECS_WIDTH, -RECS_WIDTH, PLAY_TIME_IN_FRAMES); - - if (recs[i].height < 0) recs[i].height = 0; - if (recs[i].width < 0) recs[i].width = 0; - - if ((recs[i].height == 0) && (recs[i].width == 0)) state = 1; // Finish playing - - rotation = EaseLinearIn((float)framesCounter, 0.0f, 360.0f, PLAY_TIME_IN_FRAMES); - } - } - else if ((state == 1) && IsKeyPressed(KEY_SPACE)) - { - // When animation has finished, press space to restart - framesCounter = 0; - - for (int i = 0; i < MAX_RECS_X*MAX_RECS_Y; i++) - { - recs[i].height = RECS_HEIGHT; - recs[i].width = RECS_WIDTH; - } - - state = 0; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - if (state == 0) - { - for (int i = 0; i < MAX_RECS_X*MAX_RECS_Y; i++) - { - DrawRectanglePro(recs[i], (Vector2){ recs[i].width/2, recs[i].height/2 }, rotation, RED); - } - } - else if (state == 1) DrawText("PRESS [SPACE] TO PLAY AGAIN!", 240, 200, 20, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shapes/shapes_following_eyes.c b/examples/shapes/shapes_following_eyes.c deleted file mode 100644 index 2137d79..0000000 --- a/examples/shapes/shapes_following_eyes.c +++ /dev/null @@ -1,109 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - following eyes -* -* Example originally created with raylib 2.5, last time updated with raylib 2.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2013-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include // Required for: atan2f() - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - following eyes"); - - Vector2 scleraLeftPosition = { GetScreenWidth()/2.0f - 100.0f, GetScreenHeight()/2.0f }; - Vector2 scleraRightPosition = { GetScreenWidth()/2.0f + 100.0f, GetScreenHeight()/2.0f }; - float scleraRadius = 80; - - Vector2 irisLeftPosition = { GetScreenWidth()/2.0f - 100.0f, GetScreenHeight()/2.0f }; - Vector2 irisRightPosition = { GetScreenWidth()/2.0f + 100.0f, GetScreenHeight()/2.0f }; - float irisRadius = 24; - - float angle = 0.0f; - float dx = 0.0f, dy = 0.0f, dxx = 0.0f, dyy = 0.0f; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - irisLeftPosition = GetMousePosition(); - irisRightPosition = GetMousePosition(); - - // Check not inside the left eye sclera - if (!CheckCollisionPointCircle(irisLeftPosition, scleraLeftPosition, scleraRadius - 20)) - { - dx = irisLeftPosition.x - scleraLeftPosition.x; - dy = irisLeftPosition.y - scleraLeftPosition.y; - - angle = atan2f(dy, dx); - - dxx = (scleraRadius - irisRadius)*cosf(angle); - dyy = (scleraRadius - irisRadius)*sinf(angle); - - irisLeftPosition.x = scleraLeftPosition.x + dxx; - irisLeftPosition.y = scleraLeftPosition.y + dyy; - } - - // Check not inside the right eye sclera - if (!CheckCollisionPointCircle(irisRightPosition, scleraRightPosition, scleraRadius - 20)) - { - dx = irisRightPosition.x - scleraRightPosition.x; - dy = irisRightPosition.y - scleraRightPosition.y; - - angle = atan2f(dy, dx); - - dxx = (scleraRadius - irisRadius)*cosf(angle); - dyy = (scleraRadius - irisRadius)*sinf(angle); - - irisRightPosition.x = scleraRightPosition.x + dxx; - irisRightPosition.y = scleraRightPosition.y + dyy; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawCircleV(scleraLeftPosition, scleraRadius, LIGHTGRAY); - DrawCircleV(irisLeftPosition, irisRadius, BROWN); - DrawCircleV(irisLeftPosition, 10, BLACK); - - DrawCircleV(scleraRightPosition, scleraRadius, LIGHTGRAY); - DrawCircleV(irisRightPosition, irisRadius, DARKGREEN); - DrawCircleV(irisRightPosition, 10, BLACK); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shapes/shapes_lines_bezier.c b/examples/shapes/shapes_lines_bezier.c deleted file mode 100644 index 195281b..0000000 --- a/examples/shapes/shapes_lines_bezier.c +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - Cubic-bezier lines -* -* Example originally created with raylib 1.7, last time updated with raylib 1.7 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2017-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - SetConfigFlags(FLAG_MSAA_4X_HINT); - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - cubic-bezier lines"); - - Vector2 start = { 0, 0 }; - Vector2 end = { (float)screenWidth, (float)screenHeight }; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) start = GetMousePosition(); - else if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) end = GetMousePosition(); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText("USE MOUSE LEFT-RIGHT CLICK to DEFINE LINE START and END POINTS", 15, 20, 20, GRAY); - - DrawLineBezier(start, end, 2.0f, RED); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shapes/shapes_logo_raylib.c b/examples/shapes/shapes_logo_raylib.c deleted file mode 100644 index 4f625c2..0000000 --- a/examples/shapes/shapes_logo_raylib.c +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - Draw raylib logo using basic shapes -* -* Example originally created with raylib 1.0, last time updated with raylib 1.0 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - raylib logo using shapes"); - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // TODO: Update your variables here - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawRectangle(screenWidth/2 - 128, screenHeight/2 - 128, 256, 256, BLACK); - DrawRectangle(screenWidth/2 - 112, screenHeight/2 - 112, 224, 224, RAYWHITE); - DrawText("raylib", screenWidth/2 - 44, screenHeight/2 + 48, 50, BLACK); - - DrawText("this is NOT a texture!", 350, 370, 10, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shapes/shapes_logo_raylib_anim.c b/examples/shapes/shapes_logo_raylib_anim.c deleted file mode 100644 index 5d6dd35..0000000 --- a/examples/shapes/shapes_logo_raylib_anim.c +++ /dev/null @@ -1,165 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - raylib logo animation -* -* Example originally created with raylib 2.5, last time updated with raylib 4.0 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - raylib logo animation"); - - int logoPositionX = screenWidth/2 - 128; - int logoPositionY = screenHeight/2 - 128; - - int framesCounter = 0; - int lettersCount = 0; - - int topSideRecWidth = 16; - int leftSideRecHeight = 16; - - int bottomSideRecWidth = 16; - int rightSideRecHeight = 16; - - int state = 0; // Tracking animation states (State Machine) - float alpha = 1.0f; // Useful for fading - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - if (state == 0) // State 0: Small box blinking - { - framesCounter++; - - if (framesCounter == 120) - { - state = 1; - framesCounter = 0; // Reset counter... will be used later... - } - } - else if (state == 1) // State 1: Top and left bars growing - { - topSideRecWidth += 4; - leftSideRecHeight += 4; - - if (topSideRecWidth == 256) state = 2; - } - else if (state == 2) // State 2: Bottom and right bars growing - { - bottomSideRecWidth += 4; - rightSideRecHeight += 4; - - if (bottomSideRecWidth == 256) state = 3; - } - else if (state == 3) // State 3: Letters appearing (one by one) - { - framesCounter++; - - if (framesCounter/12) // Every 12 frames, one more letter! - { - lettersCount++; - framesCounter = 0; - } - - if (lettersCount >= 10) // When all letters have appeared, just fade out everything - { - alpha -= 0.02f; - - if (alpha <= 0.0f) - { - alpha = 0.0f; - state = 4; - } - } - } - else if (state == 4) // State 4: Reset and Replay - { - if (IsKeyPressed(KEY_R)) - { - framesCounter = 0; - lettersCount = 0; - - topSideRecWidth = 16; - leftSideRecHeight = 16; - - bottomSideRecWidth = 16; - rightSideRecHeight = 16; - - alpha = 1.0f; - state = 0; // Return to State 0 - } - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - if (state == 0) - { - if ((framesCounter/15)%2) DrawRectangle(logoPositionX, logoPositionY, 16, 16, BLACK); - } - else if (state == 1) - { - DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, BLACK); - DrawRectangle(logoPositionX, logoPositionY, 16, leftSideRecHeight, BLACK); - } - else if (state == 2) - { - DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, BLACK); - DrawRectangle(logoPositionX, logoPositionY, 16, leftSideRecHeight, BLACK); - - DrawRectangle(logoPositionX + 240, logoPositionY, 16, rightSideRecHeight, BLACK); - DrawRectangle(logoPositionX, logoPositionY + 240, bottomSideRecWidth, 16, BLACK); - } - else if (state == 3) - { - DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, Fade(BLACK, alpha)); - DrawRectangle(logoPositionX, logoPositionY + 16, 16, leftSideRecHeight - 32, Fade(BLACK, alpha)); - - DrawRectangle(logoPositionX + 240, logoPositionY + 16, 16, rightSideRecHeight - 32, Fade(BLACK, alpha)); - DrawRectangle(logoPositionX, logoPositionY + 240, bottomSideRecWidth, 16, Fade(BLACK, alpha)); - - DrawRectangle(GetScreenWidth()/2 - 112, GetScreenHeight()/2 - 112, 224, 224, Fade(RAYWHITE, alpha)); - - DrawText(TextSubtext("raylib", 0, lettersCount), GetScreenWidth()/2 - 44, GetScreenHeight()/2 + 48, 50, Fade(BLACK, alpha)); - } - else if (state == 4) - { - DrawText("[R] REPLAY", 340, 200, 20, GRAY); - } - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/shapes/shapes_rectangle_scaling.c b/examples/shapes/shapes_rectangle_scaling.c deleted file mode 100644 index 18104b1..0000000 --- a/examples/shapes/shapes_rectangle_scaling.c +++ /dev/null @@ -1,103 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - rectangle scaling by mouse -* -* Example originally created with raylib 2.5, last time updated with raylib 2.5 -* -* Example contributed by Vlad Adrian (@demizdor) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2018-2023 Vlad Adrian (@demizdor) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define MOUSE_SCALE_MARK_SIZE 12 - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - rectangle scaling mouse"); - - Rectangle rec = { 100, 100, 200, 80 }; - - Vector2 mousePosition = { 0 }; - - bool mouseScaleReady = false; - bool mouseScaleMode = false; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - mousePosition = GetMousePosition(); - - if (CheckCollisionPointRec(mousePosition, (Rectangle){ rec.x + rec.width - MOUSE_SCALE_MARK_SIZE, rec.y + rec.height - MOUSE_SCALE_MARK_SIZE, MOUSE_SCALE_MARK_SIZE, MOUSE_SCALE_MARK_SIZE })) - { - mouseScaleReady = true; - if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) mouseScaleMode = true; - } - else mouseScaleReady = false; - - if (mouseScaleMode) - { - mouseScaleReady = true; - - rec.width = (mousePosition.x - rec.x); - rec.height = (mousePosition.y - rec.y); - - // Check minimum rec size - if (rec.width < MOUSE_SCALE_MARK_SIZE) rec.width = MOUSE_SCALE_MARK_SIZE; - if (rec.height < MOUSE_SCALE_MARK_SIZE) rec.height = MOUSE_SCALE_MARK_SIZE; - - // Check maximum rec size - if (rec.width > (GetScreenWidth() - rec.x)) rec.width = GetScreenWidth() - rec.x; - if (rec.height > (GetScreenHeight() - rec.y)) rec.height = GetScreenHeight() - rec.y; - - if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) mouseScaleMode = false; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText("Scale rectangle dragging from bottom-right corner!", 10, 10, 20, GRAY); - - DrawRectangleRec(rec, Fade(GREEN, 0.5f)); - - if (mouseScaleReady) - { - DrawRectangleLinesEx(rec, 1, RED); - DrawTriangle((Vector2){ rec.x + rec.width - MOUSE_SCALE_MARK_SIZE, rec.y + rec.height }, - (Vector2){ rec.x + rec.width, rec.y + rec.height }, - (Vector2){ rec.x + rec.width, rec.y + rec.height - MOUSE_SCALE_MARK_SIZE }, RED); - } - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shapes/shapes_top_down_lights.c b/examples/shapes/shapes_top_down_lights.c deleted file mode 100644 index b09137c..0000000 --- a/examples/shapes/shapes_top_down_lights.c +++ /dev/null @@ -1,355 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - top down lights -* -* Example originally created with raylib 4.2, last time updated with raylib 4.2 -* -* Example contributed by Vlad Adrian (@demizdor) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2022-2023 Jeffery Myers (@JeffM2501) -* -********************************************************************************************/ - -#include "raylib.h" -#include "raymath.h" -#include "rlgl.h" - -// Custom Blend Modes -#define RLGL_SRC_ALPHA 0x0302 -#define RLGL_MIN 0x8007 -#define RLGL_MAX 0x8008 - -#define MAX_BOXES 20 -#define MAX_SHADOWS MAX_BOXES*3 // MAX_BOXES *3. Each box can cast up to two shadow volumes for the edges it is away from, and one for the box itself -#define MAX_LIGHTS 16 - -// Shadow geometry type -typedef struct ShadowGeometry { - Vector2 vertices[4]; -} ShadowGeometry; - -// Light info type -typedef struct LightInfo { - bool active; // Is this light slot active? - bool dirty; // Does this light need to be updated? - bool valid; // Is this light in a valid position? - - Vector2 position; // Light position - RenderTexture mask; // Alpha mask for the light - float outerRadius; // The distance the light touches - Rectangle bounds; // A cached rectangle of the light bounds to help with culling - - ShadowGeometry shadows[MAX_SHADOWS]; - int shadowCount; -} LightInfo; - - -LightInfo lights[MAX_LIGHTS] = { 0 }; - -// Move a light and mark it as dirty so that we update it's mask next frame -void MoveLight(int slot, float x, float y) -{ - lights[slot].dirty = true; - lights[slot].position.x = x; - lights[slot].position.y = y; - - // update the cached bounds - lights[slot].bounds.x = x - lights[slot].outerRadius; - lights[slot].bounds.y = y - lights[slot].outerRadius; -} - -// Compute a shadow volume for the edge -// It takes the edge and projects it back by the light radius and turns it into a quad -void ComputeShadowVolumeForEdge(int slot, Vector2 sp, Vector2 ep) -{ - if (lights[slot].shadowCount >= MAX_SHADOWS) return; - - float extension = lights[slot].outerRadius*2; - - Vector2 spVector = Vector2Normalize(Vector2Subtract(sp, lights[slot].position)); - Vector2 spProjection = Vector2Add(sp, Vector2Scale(spVector, extension)); - - Vector2 epVector = Vector2Normalize(Vector2Subtract(ep, lights[slot].position)); - Vector2 epProjection = Vector2Add(ep, Vector2Scale(epVector, extension)); - - lights[slot].shadows[lights[slot].shadowCount].vertices[0] = sp; - lights[slot].shadows[lights[slot].shadowCount].vertices[1] = ep; - lights[slot].shadows[lights[slot].shadowCount].vertices[2] = epProjection; - lights[slot].shadows[lights[slot].shadowCount].vertices[3] = spProjection; - - lights[slot].shadowCount++; -} - -// Draw the light and shadows to the mask for a light -void DrawLightMask(int slot) -{ - // Use the light mask - BeginTextureMode(lights[slot].mask); - - ClearBackground(WHITE); - - // Force the blend mode to only set the alpha of the destination - rlSetBlendFactors(RLGL_SRC_ALPHA, RLGL_SRC_ALPHA, RLGL_MIN); - rlSetBlendMode(BLEND_CUSTOM); - - // If we are valid, then draw the light radius to the alpha mask - if (lights[slot].valid) DrawCircleGradient((int)lights[slot].position.x, (int)lights[slot].position.y, lights[slot].outerRadius, ColorAlpha(WHITE, 0), WHITE); - - rlDrawRenderBatchActive(); - - // Cut out the shadows from the light radius by forcing the alpha to maximum - rlSetBlendMode(BLEND_ALPHA); - rlSetBlendFactors(RLGL_SRC_ALPHA, RLGL_SRC_ALPHA, RLGL_MAX); - rlSetBlendMode(BLEND_CUSTOM); - - // Draw the shadows to the alpha mask - for (int i = 0; i < lights[slot].shadowCount; i++) - { - DrawTriangleFan(lights[slot].shadows[i].vertices, 4, WHITE); - } - - rlDrawRenderBatchActive(); - - // Go back to normal blend mode - rlSetBlendMode(BLEND_ALPHA); - - EndTextureMode(); -} - -// Setup a light -void SetupLight(int slot, float x, float y, float radius) -{ - lights[slot].active = true; - lights[slot].valid = false; // The light must prove it is valid - lights[slot].mask = LoadRenderTexture(GetScreenWidth(), GetScreenHeight()); - lights[slot].outerRadius = radius; - - lights[slot].bounds.width = radius * 2; - lights[slot].bounds.height = radius * 2; - - MoveLight(slot, x, y); - - // Force the render texture to have something in it - DrawLightMask(slot); -} - -// See if a light needs to update it's mask -bool UpdateLight(int slot, Rectangle* boxes, int count) -{ - if (!lights[slot].active || !lights[slot].dirty) return false; - - lights[slot].dirty = false; - lights[slot].shadowCount = 0; - lights[slot].valid = false; - - for (int i = 0; i < count; i++) - { - // Are we in a box? if so we are not valid - if (CheckCollisionPointRec(lights[slot].position, boxes[i])) return false; - - // If this box is outside our bounds, we can skip it - if (!CheckCollisionRecs(lights[slot].bounds, boxes[i])) continue; - - // Check the edges that are on the same side we are, and cast shadow volumes out from them - - // Top - Vector2 sp = (Vector2){ boxes[i].x, boxes[i].y }; - Vector2 ep = (Vector2){ boxes[i].x + boxes[i].width, boxes[i].y }; - - if (lights[slot].position.y > ep.y) ComputeShadowVolumeForEdge(slot, sp, ep); - - // Right - sp = ep; - ep.y += boxes[i].height; - if (lights[slot].position.x < ep.x) ComputeShadowVolumeForEdge(slot, sp, ep); - - // Bottom - sp = ep; - ep.x -= boxes[i].width; - if (lights[slot].position.y < ep.y) ComputeShadowVolumeForEdge(slot, sp, ep); - - // Left - sp = ep; - ep.y -= boxes[i].height; - if (lights[slot].position.x > ep.x) ComputeShadowVolumeForEdge(slot, sp, ep); - - // The box itself - lights[slot].shadows[lights[slot].shadowCount].vertices[0] = (Vector2){ boxes[i].x, boxes[i].y }; - lights[slot].shadows[lights[slot].shadowCount].vertices[1] = (Vector2){ boxes[i].x, boxes[i].y + boxes[i].height }; - lights[slot].shadows[lights[slot].shadowCount].vertices[2] = (Vector2){ boxes[i].x + boxes[i].width, boxes[i].y + boxes[i].height }; - lights[slot].shadows[lights[slot].shadowCount].vertices[3] = (Vector2){ boxes[i].x + boxes[i].width, boxes[i].y }; - lights[slot].shadowCount++; - } - - lights[slot].valid = true; - - DrawLightMask(slot); - - return true; -} - -// Set up some boxes -void SetupBoxes(Rectangle *boxes, int *count) -{ - boxes[0] = (Rectangle){ 150,80, 40, 40 }; - boxes[1] = (Rectangle){ 1200, 700, 40, 40 }; - boxes[2] = (Rectangle){ 200, 600, 40, 40 }; - boxes[3] = (Rectangle){ 1000, 50, 40, 40 }; - boxes[4] = (Rectangle){ 500, 350, 40, 40 }; - - for (int i = 5; i < MAX_BOXES; i++) - { - boxes[i] = (Rectangle){(float)GetRandomValue(0,GetScreenWidth()), (float)GetRandomValue(0,GetScreenHeight()), (float)GetRandomValue(10,100), (float)GetRandomValue(10,100) }; - } - - *count = MAX_BOXES; -} - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [shapes] example - top down lights"); - - // Initialize our 'world' of boxes - int boxCount = 0; - Rectangle boxes[MAX_BOXES] = { 0 }; - SetupBoxes(boxes, &boxCount); - - // Create a checkerboard ground texture - Image img = GenImageChecked(64, 64, 32, 32, DARKBROWN, DARKGRAY); - Texture2D backgroundTexture = LoadTextureFromImage(img); - UnloadImage(img); - - // Create a global light mask to hold all the blended lights - RenderTexture lightMask = LoadRenderTexture(GetScreenWidth(), GetScreenHeight()); - - // Setup initial light - SetupLight(0, 600, 400, 300); - int nextLight = 1; - - bool showLines = false; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // Drag light 0 - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) MoveLight(0, GetMousePosition().x, GetMousePosition().y); - - // Make a new light - if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT) && (nextLight < MAX_LIGHTS)) - { - SetupLight(nextLight, GetMousePosition().x, GetMousePosition().y, 200); - nextLight++; - } - - // Toggle debug info - if (IsKeyPressed(KEY_F1)) showLines = !showLines; - - // Update the lights and keep track if any were dirty so we know if we need to update the master light mask - bool dirtyLights = false; - for (int i = 0; i < MAX_LIGHTS; i++) - { - if (UpdateLight(i, boxes, boxCount)) dirtyLights = true; - } - - // Update the light mask - if (dirtyLights) - { - // Build up the light mask - BeginTextureMode(lightMask); - - ClearBackground(BLACK); - - // Force the blend mode to only set the alpha of the destination - rlSetBlendFactors(RLGL_SRC_ALPHA, RLGL_SRC_ALPHA, RLGL_MIN); - rlSetBlendMode(BLEND_CUSTOM); - - // Merge in all the light masks - for (int i = 0; i < MAX_LIGHTS; i++) - { - if (lights[i].active) DrawTextureRec(lights[i].mask.texture, (Rectangle){ 0, 0, (float)GetScreenWidth(), -(float)GetScreenHeight() }, Vector2Zero(), WHITE); - } - - rlDrawRenderBatchActive(); - - // Go back to normal blend - rlSetBlendMode(BLEND_ALPHA); - EndTextureMode(); - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(BLACK); - - // Draw the tile background - DrawTextureRec(backgroundTexture, (Rectangle){ 0, 0, (float)GetScreenWidth(), (float)GetScreenHeight() }, Vector2Zero(), WHITE); - - // Overlay the shadows from all the lights - DrawTextureRec(lightMask.texture, (Rectangle){ 0, 0, (float)GetScreenWidth(), -(float)GetScreenHeight() }, Vector2Zero(), ColorAlpha(WHITE, showLines? 0.75f : 1.0f)); - - // Draw the lights - for (int i = 0; i < MAX_LIGHTS; i++) - { - if (lights[i].active) DrawCircle((int)lights[i].position.x, (int)lights[i].position.y, 10, (i == 0)? YELLOW : WHITE); - } - - if (showLines) - { - for (int s = 0; s < lights[0].shadowCount; s++) - { - DrawTriangleFan(lights[0].shadows[s].vertices, 4, DARKPURPLE); - } - - for (int b = 0; b < boxCount; b++) - { - if (CheckCollisionRecs(boxes[b],lights[0].bounds)) DrawRectangleRec(boxes[b], PURPLE); - - DrawRectangleLines((int)boxes[b].x, (int)boxes[b].y, (int)boxes[b].width, (int)boxes[b].height, DARKBLUE); - } - - DrawText("(F1) Hide Shadow Volumes", 10, 50, 10, GREEN); - } - else - { - DrawText("(F1) Show Shadow Volumes", 10, 50, 10, GREEN); - } - - DrawFPS(screenWidth - 80, 10); - DrawText("Drag to move light #1", 10, 10, 10, DARKGREEN); - DrawText("Right click to add new light", 10, 30, 10, DARKGREEN); - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(backgroundTexture); - UnloadRenderTexture(lightMask); - for (int i = 0; i < MAX_LIGHTS; i++) - { - if (lights[i].active) UnloadRenderTexture(lights[i].mask); - } - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/test_game/levels/autosave/test.1.map b/examples/test_game/levels/autosave/test.1.map deleted file mode 100644 index c77d05a..0000000 --- a/examples/test_game/levels/autosave/test.1.map +++ /dev/null @@ -1,191 +0,0 @@ -// Game: Generic -// Format: Standard -// entity 0 -{ -"classname" "worldspawn" -"_tb_textures" "textures;textures/retro-texture-pack-v9" -"_tb_mod" "textures" -// brush 0 -{ -( -80 144 64 ) ( -80 0 64 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 64 ) ( 0 0 64 ) ( 0 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 32 ) ( 0 144 32 ) ( -80 144 32 ) __TB_empty 0 0 0 1 1 -( -80 144 64 ) ( 0 144 64 ) ( 0 0 64 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( 0 144 32 ) ( 0 144 64 ) ( -80 144 64 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 64 ) ( 0 144 64 ) ( 0 144 32 ) __TB_empty 0 0 0 1 1 -} -// brush 1 -{ -( -176 120 40 ) ( -176 32 40 ) ( -176 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -176 32 40 ) ( -152 32 40 ) ( -152 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 32 ) ( -152 120 32 ) ( -176 120 32 ) __TB_empty 0 0 0 1 1 -( -176 120 40 ) ( -152 120 40 ) ( -152 32 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -152 120 32 ) ( -152 120 40 ) ( -176 120 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 40 ) ( -152 120 40 ) ( -152 120 32 ) __TB_empty 0 0 0 1 1 -} -// brush 2 -{ -( -136 144 48 ) ( -136 104 48 ) ( -136 104 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 104 48 ) ( -80 104 48 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -( -80 104 32 ) ( -80 144 32 ) ( -136 144 32 ) __TB_empty 0 0 0 1 1 -( -136 144 48 ) ( -80 144 48 ) ( -80 104 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 144 32 ) ( -80 144 48 ) ( -136 144 48 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 104 48 ) ( -80 144 48 ) ( -80 144 32 ) __TB_empty 0 0 0 1 1 -} -// brush 3 -{ -( -136 40 48 ) ( -136 0 48 ) ( -136 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 0 48 ) ( -80 0 48 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 32 ) ( -80 40 32 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -( -136 40 48 ) ( -80 40 48 ) ( -80 0 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 40 32 ) ( -80 40 48 ) ( -136 40 48 ) __TB_empty 0 0 0 1 1 -( -80 0 48 ) ( -80 40 48 ) ( -80 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 4 -{ -( -152 104 56 ) ( -152 40 56 ) ( -152 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 40 56 ) ( -80 40 56 ) ( -80 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 32 ) ( -80 104 32 ) ( -152 104 32 ) __TB_empty 0 0 0 1 1 -( -152 104 56 ) ( -80 104 56 ) ( -80 40 56 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 104 32 ) ( -80 104 56 ) ( -152 104 56 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 56 ) ( -80 104 56 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -} -// brush 5 -{ -( -192 200 32 ) ( -192 -48 32 ) ( -192 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 -48 32 ) ( 16 -48 32 ) ( 16 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 24 ) ( 16 200 24 ) ( -192 200 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 200 32 ) ( 16 200 32 ) ( 16 -48 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 200 24 ) ( 16 200 32 ) ( -192 200 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 32 ) ( 16 200 32 ) ( 16 200 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -} -// brush 6 -{ -( -32 120 64 ) ( -8 96 80 ) ( -8 96 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 64 ) ( -32 120 64 ) ( -8 96 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 80 ) ( -32 120 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 80 ) ( -32 120 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 64 ) ( -8 96 80 ) __TB_empty 0 0 0 1 1 -} -// brush 7 -{ -( -8 48 64 ) ( -8 48 80 ) ( -32 24 80 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 64 ) ( -32 24 64 ) ( -32 24 80 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( -8 48 64 ) ( -32 24 64 ) __TB_empty 0 0 0 1 1 -( -32 24 80 ) ( -8 48 80 ) ( -8 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 80 ) ( -8 48 80 ) ( -8 48 64 ) __TB_empty 0 0 0 1 1 -} -// brush 8 -{ -( -152 40 40 ) ( -152 16 40 ) ( -152 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 16 40 ) ( -136 16 40 ) ( -136 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 16 32 ) ( -136 40 32 ) ( -152 40 32 ) __TB_empty 0 0 0 1 1 -( -152 40 40 ) ( -136 40 40 ) ( -136 16 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 40 32 ) ( -136 40 40 ) ( -152 40 40 ) __TB_empty 0 0 0 1 1 -( -136 16 40 ) ( -136 40 40 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 9 -{ -( -152 128 40 ) ( -152 96 40 ) ( -152 96 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 96 40 ) ( -136 96 40 ) ( -136 96 32 ) __TB_empty 0 0 0 1 1 -( -136 96 32 ) ( -136 128 32 ) ( -152 128 32 ) __TB_empty 0 0 0 1 1 -( -152 128 40 ) ( -136 128 40 ) ( -136 96 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 128 32 ) ( -136 128 40 ) ( -152 128 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 96 40 ) ( -136 128 40 ) ( -136 128 32 ) __TB_empty 0 0 0 1 1 -} -// brush 10 -{ -( -32 120 144 ) ( -8 96 160 ) ( -8 96 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 144 ) ( -32 120 144 ) ( -8 96 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( -8 96 160 ) ( -32 120 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -32 120 144 ) ( -8 120 144 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 96 144 ) ( -8 96 160 ) __TB_empty 0 0 0 1 1 -} -// brush 11 -{ -( -8 48 144 ) ( -8 48 160 ) ( -32 24 160 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 144 ) ( -32 24 144 ) ( -32 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 144 ) ( -8 48 144 ) ( -32 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 160 ) ( -8 48 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 160 ) ( -8 48 160 ) ( -8 48 144 ) __TB_empty 0 0 0 1 1 -} -// brush 12 -{ -( -32 0 64 ) ( -32 1 64 ) ( -32 0 65 ) retro-texture-pack-v9/CRATE_1M 0 0 0 1 1 -( -32 0 64 ) ( -32 0 65 ) ( -31 0 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -32 0 64 ) ( -31 0 64 ) ( -32 1 64 ) __TB_empty 0 0 0 1 1 -( 0 24 160 ) ( 0 25 160 ) ( 1 24 160 ) __TB_empty 0 0 0 1 1 -( 0 24 72 ) ( 1 24 72 ) ( 0 24 73 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 24 72 ) ( 0 24 73 ) ( 0 25 72 ) __TB_empty 0 0 0 1 1 -} -// brush 13 -{ -( -32 120 160 ) ( -32 144 64 ) ( -32 144 160 ) retro-texture-pack-v9/CRATE_1M 48 0 0 1 1 -( 0 120 160 ) ( -32 120 64 ) ( -32 120 160 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 144 64 ) ( -32 120 64 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 120 160 ) ( -32 144 160 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 144 64 ) ( 0 144 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 0 144 160 ) ( 0 120 64 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -} -// brush 14 -{ -( -32 120 104 ) ( -8 96 120 ) ( -8 96 104 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 104 ) ( -32 120 104 ) ( -8 96 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 96 120 ) ( -32 120 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -32 120 104 ) ( -8 120 104 ) __TB_empty 0 0 0 1 1 -( -8 120 120 ) ( -8 96 104 ) ( -8 96 120 ) __TB_empty 0 0 0 1 1 -} -// brush 15 -{ -( -8 48 104 ) ( -8 48 120 ) ( -32 24 120 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 104 ) ( -32 24 104 ) ( -32 24 120 ) __TB_empty 0 0 0 1 1 -( -8 24 104 ) ( -8 48 104 ) ( -32 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 120 ) ( -8 48 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 120 ) ( -8 48 120 ) ( -8 48 104 ) __TB_empty 0 0 0 1 1 -} -// brush 16 -{ -( -8 24 160 ) ( -8 24 144 ) ( -8 120 160 ) retro-texture-pack-v9/CRATE_1L 24 -7 0 1 1 -( 0 24 160 ) ( 0 24 144 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( 0 120 144 ) ( -8 120 144 ) ( 0 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( 0 120 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 120 144 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -( 0 120 160 ) ( 0 120 144 ) ( 0 24 160 ) __TB_empty 0 0 0 1 1 -} -// brush 17 -{ -( -8 24 120 ) ( -8 24 104 ) ( -8 120 120 ) retro-texture-pack-v9/CRATE_1L -40 6 0 1 1 -( 0 24 120 ) ( 0 24 104 ) ( -8 24 120 ) __TB_empty 0 0 0 1 1 -( 0 120 104 ) ( -8 120 104 ) ( 0 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( 0 120 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 120 104 ) ( 0 120 120 ) __TB_empty 0 0 0 1 1 -( 0 120 120 ) ( 0 120 104 ) ( 0 24 120 ) __TB_empty 0 0 0 1 1 -} -// brush 18 -{ -( -8 120 64 ) ( -8 120 80 ) ( -8 24 64 ) retro-texture-pack-v9/CRATE_1L 24 0 0 1 1 -( -8 24 64 ) ( -8 24 80 ) ( 0 24 64 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( 0 24 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 24 80 ) ( -8 120 80 ) ( 0 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 120 64 ) ( 0 120 80 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( 0 24 64 ) ( 0 24 80 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -} -// brush 19 -{ -( 0 0 144 ) ( 0 144 32 ) ( 0 144 144 ) retro-texture-pack-v9/LIGHT_1A -19 -16 0 1 1 -( 16 0 144 ) ( 0 0 32 ) ( 0 0 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 32 ) ( 0 0 32 ) ( 16 0 32 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 0 144 ) ( 0 144 144 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 144 32 ) ( 16 144 32 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 144 ) ( 16 0 32 ) ( 16 0 144 ) __TB_empty 0 0 0 1 1 -} -// brush 20 -{ -( -48 80 96 ) ( -48 96 64 ) ( -48 96 96 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -32 80 96 ) ( -48 80 64 ) ( -48 80 96 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -32 96 64 ) ( -48 80 64 ) ( -32 80 64 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -32 96 96 ) ( -48 80 96 ) ( -48 96 96 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -32 96 96 ) ( -48 96 64 ) ( -32 96 64 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -32 96 96 ) ( -32 80 64 ) ( -32 80 96 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -} -} diff --git a/examples/test_game/levels/autosave/test.2.map b/examples/test_game/levels/autosave/test.2.map deleted file mode 100644 index 9f712c4..0000000 --- a/examples/test_game/levels/autosave/test.2.map +++ /dev/null @@ -1,191 +0,0 @@ -// Game: Generic -// Format: Standard -// entity 0 -{ -"classname" "worldspawn" -"_tb_textures" "textures;textures/retro-texture-pack-v9" -"_tb_mod" "textures" -// brush 0 -{ -( -80 144 64 ) ( -80 0 64 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 64 ) ( 0 0 64 ) ( 0 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 32 ) ( 0 144 32 ) ( -80 144 32 ) __TB_empty 0 0 0 1 1 -( -80 144 64 ) ( 0 144 64 ) ( 0 0 64 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( 0 144 32 ) ( 0 144 64 ) ( -80 144 64 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 64 ) ( 0 144 64 ) ( 0 144 32 ) __TB_empty 0 0 0 1 1 -} -// brush 1 -{ -( -176 120 40 ) ( -176 32 40 ) ( -176 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -176 32 40 ) ( -152 32 40 ) ( -152 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 32 ) ( -152 120 32 ) ( -176 120 32 ) __TB_empty 0 0 0 1 1 -( -176 120 40 ) ( -152 120 40 ) ( -152 32 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -152 120 32 ) ( -152 120 40 ) ( -176 120 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 40 ) ( -152 120 40 ) ( -152 120 32 ) __TB_empty 0 0 0 1 1 -} -// brush 2 -{ -( -136 144 48 ) ( -136 104 48 ) ( -136 104 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 104 48 ) ( -80 104 48 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -( -80 104 32 ) ( -80 144 32 ) ( -136 144 32 ) __TB_empty 0 0 0 1 1 -( -136 144 48 ) ( -80 144 48 ) ( -80 104 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 144 32 ) ( -80 144 48 ) ( -136 144 48 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 104 48 ) ( -80 144 48 ) ( -80 144 32 ) __TB_empty 0 0 0 1 1 -} -// brush 3 -{ -( -136 40 48 ) ( -136 0 48 ) ( -136 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 0 48 ) ( -80 0 48 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 32 ) ( -80 40 32 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -( -136 40 48 ) ( -80 40 48 ) ( -80 0 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 40 32 ) ( -80 40 48 ) ( -136 40 48 ) __TB_empty 0 0 0 1 1 -( -80 0 48 ) ( -80 40 48 ) ( -80 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 4 -{ -( -152 104 56 ) ( -152 40 56 ) ( -152 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 40 56 ) ( -80 40 56 ) ( -80 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 32 ) ( -80 104 32 ) ( -152 104 32 ) __TB_empty 0 0 0 1 1 -( -152 104 56 ) ( -80 104 56 ) ( -80 40 56 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 104 32 ) ( -80 104 56 ) ( -152 104 56 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 56 ) ( -80 104 56 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -} -// brush 5 -{ -( -192 200 32 ) ( -192 -48 32 ) ( -192 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 -48 32 ) ( 16 -48 32 ) ( 16 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 24 ) ( 16 200 24 ) ( -192 200 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 200 32 ) ( 16 200 32 ) ( 16 -48 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 200 24 ) ( 16 200 32 ) ( -192 200 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 32 ) ( 16 200 32 ) ( 16 200 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -} -// brush 6 -{ -( -32 120 64 ) ( -8 96 80 ) ( -8 96 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 64 ) ( -32 120 64 ) ( -8 96 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 80 ) ( -32 120 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 80 ) ( -32 120 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 64 ) ( -8 96 80 ) __TB_empty 0 0 0 1 1 -} -// brush 7 -{ -( -8 48 64 ) ( -8 48 80 ) ( -32 24 80 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 64 ) ( -32 24 64 ) ( -32 24 80 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( -8 48 64 ) ( -32 24 64 ) __TB_empty 0 0 0 1 1 -( -32 24 80 ) ( -8 48 80 ) ( -8 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 80 ) ( -8 48 80 ) ( -8 48 64 ) __TB_empty 0 0 0 1 1 -} -// brush 8 -{ -( -152 40 40 ) ( -152 16 40 ) ( -152 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 16 40 ) ( -136 16 40 ) ( -136 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 16 32 ) ( -136 40 32 ) ( -152 40 32 ) __TB_empty 0 0 0 1 1 -( -152 40 40 ) ( -136 40 40 ) ( -136 16 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 40 32 ) ( -136 40 40 ) ( -152 40 40 ) __TB_empty 0 0 0 1 1 -( -136 16 40 ) ( -136 40 40 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 9 -{ -( -152 128 40 ) ( -152 96 40 ) ( -152 96 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 96 40 ) ( -136 96 40 ) ( -136 96 32 ) __TB_empty 0 0 0 1 1 -( -136 96 32 ) ( -136 128 32 ) ( -152 128 32 ) __TB_empty 0 0 0 1 1 -( -152 128 40 ) ( -136 128 40 ) ( -136 96 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 128 32 ) ( -136 128 40 ) ( -152 128 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 96 40 ) ( -136 128 40 ) ( -136 128 32 ) __TB_empty 0 0 0 1 1 -} -// brush 10 -{ -( -32 120 144 ) ( -8 96 160 ) ( -8 96 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 144 ) ( -32 120 144 ) ( -8 96 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( -8 96 160 ) ( -32 120 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -32 120 144 ) ( -8 120 144 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 96 144 ) ( -8 96 160 ) __TB_empty 0 0 0 1 1 -} -// brush 11 -{ -( -8 48 144 ) ( -8 48 160 ) ( -32 24 160 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 144 ) ( -32 24 144 ) ( -32 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 144 ) ( -8 48 144 ) ( -32 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 160 ) ( -8 48 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 160 ) ( -8 48 160 ) ( -8 48 144 ) __TB_empty 0 0 0 1 1 -} -// brush 12 -{ -( -32 0 64 ) ( -32 1 64 ) ( -32 0 65 ) retro-texture-pack-v9/CRATE_1M 0 0 0 1 1 -( -32 0 64 ) ( -32 0 65 ) ( -31 0 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -32 0 64 ) ( -31 0 64 ) ( -32 1 64 ) __TB_empty 0 0 0 1 1 -( 0 24 160 ) ( 0 25 160 ) ( 1 24 160 ) __TB_empty 0 0 0 1 1 -( 0 24 72 ) ( 1 24 72 ) ( 0 24 73 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 24 72 ) ( 0 24 73 ) ( 0 25 72 ) __TB_empty 0 0 0 1 1 -} -// brush 13 -{ -( -32 120 160 ) ( -32 144 64 ) ( -32 144 160 ) retro-texture-pack-v9/CRATE_1M 48 0 0 1 1 -( 0 120 160 ) ( -32 120 64 ) ( -32 120 160 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 144 64 ) ( -32 120 64 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 120 160 ) ( -32 144 160 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 144 64 ) ( 0 144 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 0 144 160 ) ( 0 120 64 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -} -// brush 14 -{ -( -32 120 104 ) ( -8 96 120 ) ( -8 96 104 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 104 ) ( -32 120 104 ) ( -8 96 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 96 120 ) ( -32 120 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -32 120 104 ) ( -8 120 104 ) __TB_empty 0 0 0 1 1 -( -8 120 120 ) ( -8 96 104 ) ( -8 96 120 ) __TB_empty 0 0 0 1 1 -} -// brush 15 -{ -( -8 48 104 ) ( -8 48 120 ) ( -32 24 120 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 104 ) ( -32 24 104 ) ( -32 24 120 ) __TB_empty 0 0 0 1 1 -( -8 24 104 ) ( -8 48 104 ) ( -32 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 120 ) ( -8 48 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 120 ) ( -8 48 120 ) ( -8 48 104 ) __TB_empty 0 0 0 1 1 -} -// brush 16 -{ -( -8 24 160 ) ( -8 24 144 ) ( -8 120 160 ) retro-texture-pack-v9/CRATE_1L 24 -7 0 1 1 -( 0 24 160 ) ( 0 24 144 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( 0 120 144 ) ( -8 120 144 ) ( 0 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( 0 120 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 120 144 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -( 0 120 160 ) ( 0 120 144 ) ( 0 24 160 ) __TB_empty 0 0 0 1 1 -} -// brush 17 -{ -( -8 24 120 ) ( -8 24 104 ) ( -8 120 120 ) retro-texture-pack-v9/CRATE_1L -40 6 0 1 1 -( 0 24 120 ) ( 0 24 104 ) ( -8 24 120 ) __TB_empty 0 0 0 1 1 -( 0 120 104 ) ( -8 120 104 ) ( 0 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( 0 120 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 120 104 ) ( 0 120 120 ) __TB_empty 0 0 0 1 1 -( 0 120 120 ) ( 0 120 104 ) ( 0 24 120 ) __TB_empty 0 0 0 1 1 -} -// brush 18 -{ -( -8 120 64 ) ( -8 120 80 ) ( -8 24 64 ) retro-texture-pack-v9/CRATE_1L 24 0 0 1 1 -( -8 24 64 ) ( -8 24 80 ) ( 0 24 64 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( 0 24 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 24 80 ) ( -8 120 80 ) ( 0 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 120 64 ) ( 0 120 80 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( 0 24 64 ) ( 0 24 80 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -} -// brush 19 -{ -( 0 0 144 ) ( 0 144 32 ) ( 0 144 144 ) retro-texture-pack-v9/LIGHT_1A -19 -16 0 1 1 -( 16 0 144 ) ( 0 0 32 ) ( 0 0 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 32 ) ( 0 0 32 ) ( 16 0 32 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 0 144 ) ( 0 144 144 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 144 32 ) ( 16 144 32 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 144 ) ( 16 0 32 ) ( 16 0 144 ) __TB_empty 0 0 0 1 1 -} -// brush 20 -{ -( -70.62741699796953 80 64 ) ( -69.92031021678298 80.70710678118655 64 ) ( -70.62741699796953 80 65 ) retro-texture-pack-v9/CRATE_1H -34.274063 0 0 0.35355356 0.49999976 -( -70.62741699796953 80 64 ) ( -70.62741699796953 80 65 ) ( -69.92031021678298 79.29289321881346 64 ) retro-texture-pack-v9/CRATE_1H -7.764488 0 180 0.35355344 -0.49999976 -( -70.62741699796953 80 64 ) ( -69.92031021678298 79.29289321881346 64 ) ( -69.92031021678298 80.70710678118655 64 ) retro-texture-pack-v9/CRATE_1H 42.509666 -9.3725815 315 1 1 -( -25.372583002030495 80 96 ) ( -24.665476220843942 80.70710678118655 96 ) ( -24.665476220843942 79.29289321881345 96 ) retro-texture-pack-v9/CRATE_1H -49.952244 -21.019333 225 0.5079364 0.5 -( -25.372583002030495 80 80 ) ( -25.372583002030495 80 81 ) ( -24.665476220843942 80.70710678118655 80 ) retro-texture-pack-v9/CRATE_1H -1.137085 0 0 0.70710677 1 -( -25.372583002030495 80 80 ) ( -24.665476220843942 79.29289321881345 80 ) ( -25.372583002030495 80 81 ) retro-texture-pack-v9/CRATE_1H 25.20314 0 180 0.3649583 -0.49999988 -} -} diff --git a/examples/test_game/levels/autosave/test.3.map b/examples/test_game/levels/autosave/test.3.map deleted file mode 100644 index 13d9cde..0000000 --- a/examples/test_game/levels/autosave/test.3.map +++ /dev/null @@ -1,200 +0,0 @@ -// Game: Generic -// Format: Standard -// entity 0 -{ -"classname" "worldspawn" -"_tb_textures" "textures;textures/retro-texture-pack-v9" -"_tb_mod" "textures" -// brush 0 -{ -( -80 144 64 ) ( -80 0 64 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 64 ) ( 0 0 64 ) ( 0 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 32 ) ( 0 144 32 ) ( -80 144 32 ) __TB_empty 0 0 0 1 1 -( -80 144 64 ) ( 0 144 64 ) ( 0 0 64 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( 0 144 32 ) ( 0 144 64 ) ( -80 144 64 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 64 ) ( 0 144 64 ) ( 0 144 32 ) __TB_empty 0 0 0 1 1 -} -// brush 1 -{ -( -176 120 40 ) ( -176 32 40 ) ( -176 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -176 32 40 ) ( -152 32 40 ) ( -152 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 32 ) ( -152 120 32 ) ( -176 120 32 ) __TB_empty 0 0 0 1 1 -( -176 120 40 ) ( -152 120 40 ) ( -152 32 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -152 120 32 ) ( -152 120 40 ) ( -176 120 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 40 ) ( -152 120 40 ) ( -152 120 32 ) __TB_empty 0 0 0 1 1 -} -// brush 2 -{ -( -136 144 48 ) ( -136 104 48 ) ( -136 104 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 104 48 ) ( -80 104 48 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -( -80 104 32 ) ( -80 144 32 ) ( -136 144 32 ) __TB_empty 0 0 0 1 1 -( -136 144 48 ) ( -80 144 48 ) ( -80 104 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 144 32 ) ( -80 144 48 ) ( -136 144 48 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 104 48 ) ( -80 144 48 ) ( -80 144 32 ) __TB_empty 0 0 0 1 1 -} -// brush 3 -{ -( -136 40 48 ) ( -136 0 48 ) ( -136 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 0 48 ) ( -80 0 48 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 32 ) ( -80 40 32 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -( -136 40 48 ) ( -80 40 48 ) ( -80 0 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 40 32 ) ( -80 40 48 ) ( -136 40 48 ) __TB_empty 0 0 0 1 1 -( -80 0 48 ) ( -80 40 48 ) ( -80 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 4 -{ -( -152 104 56 ) ( -152 40 56 ) ( -152 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 40 56 ) ( -80 40 56 ) ( -80 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 32 ) ( -80 104 32 ) ( -152 104 32 ) __TB_empty 0 0 0 1 1 -( -152 104 56 ) ( -80 104 56 ) ( -80 40 56 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 104 32 ) ( -80 104 56 ) ( -152 104 56 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 56 ) ( -80 104 56 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -} -// brush 5 -{ -( -192 376 32 ) ( -192 -48 32 ) ( -192 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 -48 32 ) ( 16 -48 32 ) ( 16 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 24 ) ( 16 376 24 ) ( -192 376 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 376 32 ) ( 16 376 32 ) ( 16 -48 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 376 24 ) ( 16 376 32 ) ( -192 376 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 32 ) ( 16 376 32 ) ( 16 376 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -} -// brush 6 -{ -( -32 120 64 ) ( -8 96 80 ) ( -8 96 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 64 ) ( -32 120 64 ) ( -8 96 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 80 ) ( -32 120 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 80 ) ( -32 120 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 64 ) ( -8 96 80 ) __TB_empty 0 0 0 1 1 -} -// brush 7 -{ -( -8 48 64 ) ( -8 48 80 ) ( -32 24 80 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 64 ) ( -32 24 64 ) ( -32 24 80 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( -8 48 64 ) ( -32 24 64 ) __TB_empty 0 0 0 1 1 -( -32 24 80 ) ( -8 48 80 ) ( -8 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 80 ) ( -8 48 80 ) ( -8 48 64 ) __TB_empty 0 0 0 1 1 -} -// brush 8 -{ -( -152 40 40 ) ( -152 16 40 ) ( -152 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 16 40 ) ( -136 16 40 ) ( -136 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 16 32 ) ( -136 40 32 ) ( -152 40 32 ) __TB_empty 0 0 0 1 1 -( -152 40 40 ) ( -136 40 40 ) ( -136 16 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 40 32 ) ( -136 40 40 ) ( -152 40 40 ) __TB_empty 0 0 0 1 1 -( -136 16 40 ) ( -136 40 40 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 9 -{ -( -152 128 40 ) ( -152 96 40 ) ( -152 96 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 96 40 ) ( -136 96 40 ) ( -136 96 32 ) __TB_empty 0 0 0 1 1 -( -136 96 32 ) ( -136 128 32 ) ( -152 128 32 ) __TB_empty 0 0 0 1 1 -( -152 128 40 ) ( -136 128 40 ) ( -136 96 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 128 32 ) ( -136 128 40 ) ( -152 128 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 96 40 ) ( -136 128 40 ) ( -136 128 32 ) __TB_empty 0 0 0 1 1 -} -// brush 10 -{ -( -32 120 144 ) ( -8 96 160 ) ( -8 96 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 144 ) ( -32 120 144 ) ( -8 96 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( -8 96 160 ) ( -32 120 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -32 120 144 ) ( -8 120 144 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 96 144 ) ( -8 96 160 ) __TB_empty 0 0 0 1 1 -} -// brush 11 -{ -( -8 48 144 ) ( -8 48 160 ) ( -32 24 160 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 144 ) ( -32 24 144 ) ( -32 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 144 ) ( -8 48 144 ) ( -32 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 160 ) ( -8 48 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 160 ) ( -8 48 160 ) ( -8 48 144 ) __TB_empty 0 0 0 1 1 -} -// brush 12 -{ -( -32 0 64 ) ( -32 1 64 ) ( -32 0 65 ) retro-texture-pack-v9/CRATE_1M 0 0 0 1 1 -( -32 0 64 ) ( -32 0 65 ) ( -31 0 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -32 0 64 ) ( -31 0 64 ) ( -32 1 64 ) __TB_empty 0 0 0 1 1 -( 0 24 160 ) ( 0 25 160 ) ( 1 24 160 ) __TB_empty 0 0 0 1 1 -( 0 24 72 ) ( 1 24 72 ) ( 0 24 73 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 24 72 ) ( 0 24 73 ) ( 0 25 72 ) __TB_empty 0 0 0 1 1 -} -// brush 13 -{ -( -32 120 160 ) ( -32 144 64 ) ( -32 144 160 ) retro-texture-pack-v9/CRATE_1M 48 0 0 1 1 -( 0 120 160 ) ( -32 120 64 ) ( -32 120 160 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 144 64 ) ( -32 120 64 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 120 160 ) ( -32 144 160 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 144 64 ) ( 0 144 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 0 144 160 ) ( 0 120 64 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -} -// brush 14 -{ -( -32 120 104 ) ( -8 96 120 ) ( -8 96 104 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 104 ) ( -32 120 104 ) ( -8 96 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 96 120 ) ( -32 120 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -32 120 104 ) ( -8 120 104 ) __TB_empty 0 0 0 1 1 -( -8 120 120 ) ( -8 96 104 ) ( -8 96 120 ) __TB_empty 0 0 0 1 1 -} -// brush 15 -{ -( -8 48 104 ) ( -8 48 120 ) ( -32 24 120 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 104 ) ( -32 24 104 ) ( -32 24 120 ) __TB_empty 0 0 0 1 1 -( -8 24 104 ) ( -8 48 104 ) ( -32 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 120 ) ( -8 48 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 120 ) ( -8 48 120 ) ( -8 48 104 ) __TB_empty 0 0 0 1 1 -} -// brush 16 -{ -( -8 24 160 ) ( -8 24 144 ) ( -8 120 160 ) retro-texture-pack-v9/CRATE_1L 24 -7 0 1 1 -( 0 24 160 ) ( 0 24 144 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( 0 120 144 ) ( -8 120 144 ) ( 0 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( 0 120 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 120 144 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -( 0 120 160 ) ( 0 120 144 ) ( 0 24 160 ) __TB_empty 0 0 0 1 1 -} -// brush 17 -{ -( -8 24 120 ) ( -8 24 104 ) ( -8 120 120 ) retro-texture-pack-v9/CRATE_1L -40 6 0 1 1 -( 0 24 120 ) ( 0 24 104 ) ( -8 24 120 ) __TB_empty 0 0 0 1 1 -( 0 120 104 ) ( -8 120 104 ) ( 0 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( 0 120 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 120 104 ) ( 0 120 120 ) __TB_empty 0 0 0 1 1 -( 0 120 120 ) ( 0 120 104 ) ( 0 24 120 ) __TB_empty 0 0 0 1 1 -} -// brush 18 -{ -( -8 120 64 ) ( -8 120 80 ) ( -8 24 64 ) retro-texture-pack-v9/CRATE_1L 24 0 0 1 1 -( -8 24 64 ) ( -8 24 80 ) ( 0 24 64 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( 0 24 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 24 80 ) ( -8 120 80 ) ( 0 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 120 64 ) ( 0 120 80 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( 0 24 64 ) ( 0 24 80 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -} -// brush 19 -{ -( 0 0 144 ) ( 0 144 32 ) ( 0 144 144 ) retro-texture-pack-v9/LIGHT_1A -19 -16 0 1 1 -( 16 0 144 ) ( 0 0 32 ) ( 0 0 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 32 ) ( 0 0 32 ) ( 16 0 32 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 0 144 ) ( 0 144 144 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 144 32 ) ( 16 144 32 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 144 ) ( 16 0 32 ) ( 16 0 144 ) __TB_empty 0 0 0 1 1 -} -// brush 20 -{ -( -70.62741699796953 80 64 ) ( -69.92031021678298 80.70710678118655 64 ) ( -70.62741699796953 80 65 ) retro-texture-pack-v9/CRATE_1H -34.274063 0 0 0.35355356 0.49999976 -( -70.62741699796953 80 64 ) ( -70.62741699796953 80 65 ) ( -69.92031021678298 79.29289321881346 64 ) retro-texture-pack-v9/CRATE_1H -7.764488 0 180 0.35355344 -0.49999976 -( -70.62741699796953 80 64 ) ( -69.92031021678298 79.29289321881346 64 ) ( -69.92031021678298 80.70710678118655 64 ) retro-texture-pack-v9/CRATE_1H 42.509666 -9.3725815 315 1 1 -( -25.372583002030495 80 96 ) ( -24.665476220843942 80.70710678118655 96 ) ( -24.665476220843942 79.29289321881345 96 ) retro-texture-pack-v9/CRATE_1H -49.952244 -21.019333 225 0.5079364 0.5 -( -25.372583002030495 80 80 ) ( -25.372583002030495 80 81 ) ( -24.665476220843942 80.70710678118655 80 ) retro-texture-pack-v9/CRATE_1H -1.137085 0 0 0.70710677 1 -( -25.372583002030495 80 80 ) ( -24.665476220843942 79.29289321881345 80 ) ( -25.372583002030495 80 81 ) retro-texture-pack-v9/CRATE_1H 25.20314 0 180 0.3649583 -0.49999988 -} -// brush 21 -{ -( 0 144 144 ) ( 0 368 32 ) ( 0 368 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 144 ) ( 0 144 32 ) ( 0 144 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 368 32 ) ( 0 144 32 ) ( 16 144 32 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 368 144 ) ( 0 144 144 ) ( 0 368 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 368 144 ) ( 0 368 32 ) ( 16 368 32 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 368 144 ) ( 16 144 32 ) ( 16 144 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -} -} diff --git a/examples/test_game/levels/autosave/test.4.map b/examples/test_game/levels/autosave/test.4.map deleted file mode 100644 index 18f9814..0000000 --- a/examples/test_game/levels/autosave/test.4.map +++ /dev/null @@ -1,244 +0,0 @@ -// Game: Generic -// Format: Standard -// entity 0 -{ -"classname" "worldspawn" -"_tb_textures" "textures;textures/retro-texture-pack-v9" -"_tb_mod" "textures" -// brush 0 -{ -( -80 144 64 ) ( -80 0 64 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 64 ) ( 0 0 64 ) ( 0 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 32 ) ( 0 144 32 ) ( -80 144 32 ) __TB_empty 0 0 0 1 1 -( -80 144 64 ) ( 0 144 64 ) ( 0 0 64 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( 0 144 32 ) ( 0 144 64 ) ( -80 144 64 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 64 ) ( 0 144 64 ) ( 0 144 32 ) __TB_empty 0 0 0 1 1 -} -// brush 1 -{ -( -176 120 40 ) ( -176 32 40 ) ( -176 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -176 32 40 ) ( -152 32 40 ) ( -152 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 32 ) ( -152 120 32 ) ( -176 120 32 ) __TB_empty 0 0 0 1 1 -( -176 120 40 ) ( -152 120 40 ) ( -152 32 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -152 120 32 ) ( -152 120 40 ) ( -176 120 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 40 ) ( -152 120 40 ) ( -152 120 32 ) __TB_empty 0 0 0 1 1 -} -// brush 2 -{ -( -136 144 48 ) ( -136 104 48 ) ( -136 104 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 104 48 ) ( -80 104 48 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -( -80 104 32 ) ( -80 144 32 ) ( -136 144 32 ) __TB_empty 0 0 0 1 1 -( -136 144 48 ) ( -80 144 48 ) ( -80 104 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 144 32 ) ( -80 144 48 ) ( -136 144 48 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 104 48 ) ( -80 144 48 ) ( -80 144 32 ) __TB_empty 0 0 0 1 1 -} -// brush 3 -{ -( -136 40 48 ) ( -136 0 48 ) ( -136 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 0 48 ) ( -80 0 48 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 32 ) ( -80 40 32 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -( -136 40 48 ) ( -80 40 48 ) ( -80 0 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 40 32 ) ( -80 40 48 ) ( -136 40 48 ) __TB_empty 0 0 0 1 1 -( -80 0 48 ) ( -80 40 48 ) ( -80 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 4 -{ -( -152 104 56 ) ( -152 40 56 ) ( -152 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 40 56 ) ( -80 40 56 ) ( -80 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 32 ) ( -80 104 32 ) ( -152 104 32 ) __TB_empty 0 0 0 1 1 -( -152 104 56 ) ( -80 104 56 ) ( -80 40 56 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 104 32 ) ( -80 104 56 ) ( -152 104 56 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 56 ) ( -80 104 56 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -} -// brush 5 -{ -( -192 376 32 ) ( -192 -48 32 ) ( -192 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 -48 32 ) ( 16 -48 32 ) ( 16 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 24 ) ( 16 376 24 ) ( -192 376 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 376 32 ) ( 16 376 32 ) ( 16 -48 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 376 24 ) ( 16 376 32 ) ( -192 376 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 32 ) ( 16 376 32 ) ( 16 376 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -} -// brush 6 -{ -( -32 120 64 ) ( -8 96 80 ) ( -8 96 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 64 ) ( -32 120 64 ) ( -8 96 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 80 ) ( -32 120 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 80 ) ( -32 120 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 64 ) ( -8 96 80 ) __TB_empty 0 0 0 1 1 -} -// brush 7 -{ -( -8 48 64 ) ( -8 48 80 ) ( -32 24 80 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 64 ) ( -32 24 64 ) ( -32 24 80 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( -8 48 64 ) ( -32 24 64 ) __TB_empty 0 0 0 1 1 -( -32 24 80 ) ( -8 48 80 ) ( -8 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 80 ) ( -8 48 80 ) ( -8 48 64 ) __TB_empty 0 0 0 1 1 -} -// brush 8 -{ -( -152 40 40 ) ( -152 16 40 ) ( -152 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 16 40 ) ( -136 16 40 ) ( -136 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 16 32 ) ( -136 40 32 ) ( -152 40 32 ) __TB_empty 0 0 0 1 1 -( -152 40 40 ) ( -136 40 40 ) ( -136 16 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 40 32 ) ( -136 40 40 ) ( -152 40 40 ) __TB_empty 0 0 0 1 1 -( -136 16 40 ) ( -136 40 40 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 9 -{ -( -152 128 40 ) ( -152 96 40 ) ( -152 96 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 96 40 ) ( -136 96 40 ) ( -136 96 32 ) __TB_empty 0 0 0 1 1 -( -136 96 32 ) ( -136 128 32 ) ( -152 128 32 ) __TB_empty 0 0 0 1 1 -( -152 128 40 ) ( -136 128 40 ) ( -136 96 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 128 32 ) ( -136 128 40 ) ( -152 128 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 96 40 ) ( -136 128 40 ) ( -136 128 32 ) __TB_empty 0 0 0 1 1 -} -// brush 10 -{ -( -32 120 144 ) ( -8 96 160 ) ( -8 96 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 144 ) ( -32 120 144 ) ( -8 96 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( -8 96 160 ) ( -32 120 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -32 120 144 ) ( -8 120 144 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 96 144 ) ( -8 96 160 ) __TB_empty 0 0 0 1 1 -} -// brush 11 -{ -( -8 48 144 ) ( -8 48 160 ) ( -32 24 160 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 144 ) ( -32 24 144 ) ( -32 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 144 ) ( -8 48 144 ) ( -32 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 160 ) ( -8 48 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 160 ) ( -8 48 160 ) ( -8 48 144 ) __TB_empty 0 0 0 1 1 -} -// brush 12 -{ -( -32 0 64 ) ( -32 1 64 ) ( -32 0 65 ) retro-texture-pack-v9/CRATE_1M 0 0 0 1 1 -( -32 0 64 ) ( -32 0 65 ) ( -31 0 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -32 0 64 ) ( -31 0 64 ) ( -32 1 64 ) __TB_empty 0 0 0 1 1 -( 0 24 160 ) ( 0 25 160 ) ( 1 24 160 ) __TB_empty 0 0 0 1 1 -( 0 24 72 ) ( 1 24 72 ) ( 0 24 73 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 24 72 ) ( 0 24 73 ) ( 0 25 72 ) __TB_empty 0 0 0 1 1 -} -// brush 13 -{ -( -32 120 160 ) ( -32 144 64 ) ( -32 144 160 ) retro-texture-pack-v9/CRATE_1M 48 0 0 1 1 -( 0 120 160 ) ( -32 120 64 ) ( -32 120 160 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 144 64 ) ( -32 120 64 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 120 160 ) ( -32 144 160 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 144 64 ) ( 0 144 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 0 144 160 ) ( 0 120 64 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -} -// brush 14 -{ -( -32 120 104 ) ( -8 96 120 ) ( -8 96 104 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 104 ) ( -32 120 104 ) ( -8 96 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 96 120 ) ( -32 120 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -32 120 104 ) ( -8 120 104 ) __TB_empty 0 0 0 1 1 -( -8 120 120 ) ( -8 96 104 ) ( -8 96 120 ) __TB_empty 0 0 0 1 1 -} -// brush 15 -{ -( -8 48 104 ) ( -8 48 120 ) ( -32 24 120 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 104 ) ( -32 24 104 ) ( -32 24 120 ) __TB_empty 0 0 0 1 1 -( -8 24 104 ) ( -8 48 104 ) ( -32 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 120 ) ( -8 48 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 120 ) ( -8 48 120 ) ( -8 48 104 ) __TB_empty 0 0 0 1 1 -} -// brush 16 -{ -( -8 24 160 ) ( -8 24 144 ) ( -8 120 160 ) retro-texture-pack-v9/CRATE_1L 24 -7 0 1 1 -( 0 24 160 ) ( 0 24 144 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( 0 120 144 ) ( -8 120 144 ) ( 0 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( 0 120 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 120 144 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -( 0 120 160 ) ( 0 120 144 ) ( 0 24 160 ) __TB_empty 0 0 0 1 1 -} -// brush 17 -{ -( -8 24 120 ) ( -8 24 104 ) ( -8 120 120 ) retro-texture-pack-v9/CRATE_1L -40 6 0 1 1 -( 0 24 120 ) ( 0 24 104 ) ( -8 24 120 ) __TB_empty 0 0 0 1 1 -( 0 120 104 ) ( -8 120 104 ) ( 0 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( 0 120 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 120 104 ) ( 0 120 120 ) __TB_empty 0 0 0 1 1 -( 0 120 120 ) ( 0 120 104 ) ( 0 24 120 ) __TB_empty 0 0 0 1 1 -} -// brush 18 -{ -( -8 120 64 ) ( -8 120 80 ) ( -8 24 64 ) retro-texture-pack-v9/CRATE_1L 24 0 0 1 1 -( -8 24 64 ) ( -8 24 80 ) ( 0 24 64 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( 0 24 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 24 80 ) ( -8 120 80 ) ( 0 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 120 64 ) ( 0 120 80 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( 0 24 64 ) ( 0 24 80 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -} -// brush 19 -{ -( 0 0 144 ) ( 0 144 32 ) ( 0 144 144 ) retro-texture-pack-v9/LIGHT_1A -19 -16 0 1 1 -( 16 0 144 ) ( 0 0 32 ) ( 0 0 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 32 ) ( 0 0 32 ) ( 16 0 32 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 0 144 ) ( 0 144 144 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 144 32 ) ( 16 144 32 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 144 ) ( 16 0 32 ) ( 16 0 144 ) __TB_empty 0 0 0 1 1 -} -// brush 20 -{ -( -70.62741699796953 80 64 ) ( -69.92031021678298 80.70710678118655 64 ) ( -70.62741699796953 80 65 ) retro-texture-pack-v9/CRATE_1H -34.274063 0 0 0.35355356 0.49999976 -( -70.62741699796953 80 64 ) ( -70.62741699796953 80 65 ) ( -69.92031021678298 79.29289321881346 64 ) retro-texture-pack-v9/CRATE_1H -7.764488 0 180 0.35355344 -0.49999976 -( -70.62741699796953 80 64 ) ( -69.92031021678298 79.29289321881346 64 ) ( -69.92031021678298 80.70710678118655 64 ) retro-texture-pack-v9/CRATE_1H 42.509666 -9.3725815 315 1 1 -( -25.372583002030495 80 96 ) ( -24.665476220843942 80.70710678118655 96 ) ( -24.665476220843942 79.29289321881345 96 ) retro-texture-pack-v9/CRATE_1H -49.952244 -21.019333 225 0.5079364 0.5 -( -25.372583002030495 80 80 ) ( -25.372583002030495 80 81 ) ( -24.665476220843942 80.70710678118655 80 ) retro-texture-pack-v9/CRATE_1H -1.137085 0 0 0.70710677 1 -( -25.372583002030495 80 80 ) ( -24.665476220843942 79.29289321881345 80 ) ( -25.372583002030495 80 81 ) retro-texture-pack-v9/CRATE_1H 25.20314 0 180 0.3649583 -0.49999988 -} -// brush 21 -{ -( 16 256 96 ) ( 16 272 32 ) ( 16 272 80 ) retro-texture-pack-v9/DOOR_2C -16 -35 0 1 1.032258 -( 32 208 80 ) ( 16 208 32 ) ( 16 208 80 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 224 96 ) ( 16 208 80 ) ( 16 224 96 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 272 32 ) ( 16 208 32 ) ( 32 208 32 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 256 96 ) ( 16 224 96 ) ( 16 256 96 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 272 80 ) ( 16 256 96 ) ( 16 272 80 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 272 80 ) ( 16 272 32 ) ( 32 272 32 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 272 80 ) ( 32 224 96 ) ( 32 256 96 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -} -// brush 22 -{ -( 0 352 144 ) ( 0 272 144 ) ( 0 352 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 272 32 ) ( 0 272 32 ) ( 16 272 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 352 32 ) ( 0 272 32 ) ( 16 352 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 352 144 ) ( 16 272 144 ) ( 0 352 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 0 352 32 ) ( 16 352 32 ) ( 0 352 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 16 352 32 ) ( 16 272 32 ) ( 16 352 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 23 -{ -( 0 128 32 ) ( 0 208 32 ) ( 0 128 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 128 144 ) ( 16 128 144 ) ( 0 128 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 16 128 32 ) ( 16 208 32 ) ( 0 128 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 128 144 ) ( 0 208 144 ) ( 16 128 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 0 208 144 ) ( 0 208 32 ) ( 16 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 128 144 ) ( 16 208 144 ) ( 16 128 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 24 -{ -( 0 272 144 ) ( 0 208 144 ) ( 0 272 80 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 272 80 ) ( 0 208 144 ) ( 16 272 80 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 272 144 ) ( 16 208 144 ) ( 0 272 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 0 272 144 ) ( 0 272 80 ) ( 16 272 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 272 144 ) ( 16 272 80 ) ( 16 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 25 -{ -( 0 208 144 ) ( 0 208 80 ) ( 0 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 208 144 ) ( 16 208 80 ) ( 0 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 208 80 ) ( 16 208 80 ) ( 0 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 208 144 ) ( 0 240 112 ) ( 16 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 208 144 ) ( 16 240 112 ) ( 16 208 80 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 26 -{ -( 0 240 112 ) ( 0 224 96 ) ( 0 256 96 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 240 112 ) ( 16 224 96 ) ( 0 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 224 96 ) ( 16 256 96 ) ( 0 224 96 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 240 112 ) ( 0 256 96 ) ( 16 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 240 112 ) ( 16 256 96 ) ( 16 224 96 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -} diff --git a/examples/test_game/levels/autosave/test.5.map b/examples/test_game/levels/autosave/test.5.map deleted file mode 100644 index 3f32fac..0000000 --- a/examples/test_game/levels/autosave/test.5.map +++ /dev/null @@ -1,244 +0,0 @@ -// Game: Generic -// Format: Standard -// entity 0 -{ -"classname" "worldspawn" -"_tb_textures" "textures;textures/retro-texture-pack-v9" -"_tb_mod" "textures" -// brush 0 -{ -( -80 160 64 ) ( -80 0 64 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 64 ) ( 0 0 64 ) ( 0 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 32 ) ( 0 160 32 ) ( -80 160 32 ) __TB_empty 0 0 0 1 1 -( -80 160 64 ) ( 0 160 64 ) ( 0 0 64 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( 0 160 32 ) ( 0 160 64 ) ( -80 160 64 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 64 ) ( 0 160 64 ) ( 0 160 32 ) __TB_empty 0 0 0 1 1 -} -// brush 1 -{ -( -176 120 40 ) ( -176 32 40 ) ( -176 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -176 32 40 ) ( -152 32 40 ) ( -152 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 32 ) ( -152 120 32 ) ( -176 120 32 ) __TB_empty 0 0 0 1 1 -( -176 120 40 ) ( -152 120 40 ) ( -152 32 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -152 120 32 ) ( -152 120 40 ) ( -176 120 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 40 ) ( -152 120 40 ) ( -152 120 32 ) __TB_empty 0 0 0 1 1 -} -// brush 2 -{ -( -136 144 48 ) ( -136 104 48 ) ( -136 104 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 104 48 ) ( -80 104 48 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -( -80 104 32 ) ( -80 144 32 ) ( -136 144 32 ) __TB_empty 0 0 0 1 1 -( -136 144 48 ) ( -80 144 48 ) ( -80 104 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 144 32 ) ( -80 144 48 ) ( -136 144 48 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 104 48 ) ( -80 144 48 ) ( -80 144 32 ) __TB_empty 0 0 0 1 1 -} -// brush 3 -{ -( -136 40 48 ) ( -136 0 48 ) ( -136 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 0 48 ) ( -80 0 48 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 32 ) ( -80 40 32 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -( -136 40 48 ) ( -80 40 48 ) ( -80 0 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 40 32 ) ( -80 40 48 ) ( -136 40 48 ) __TB_empty 0 0 0 1 1 -( -80 0 48 ) ( -80 40 48 ) ( -80 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 4 -{ -( -152 104 56 ) ( -152 40 56 ) ( -152 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 40 56 ) ( -80 40 56 ) ( -80 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 32 ) ( -80 104 32 ) ( -152 104 32 ) __TB_empty 0 0 0 1 1 -( -152 104 56 ) ( -80 104 56 ) ( -80 40 56 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 104 32 ) ( -80 104 56 ) ( -152 104 56 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 56 ) ( -80 104 56 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -} -// brush 5 -{ -( -192 376 32 ) ( -192 -48 32 ) ( -192 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 -48 32 ) ( 16 -48 32 ) ( 16 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 24 ) ( 16 376 24 ) ( -192 376 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 376 32 ) ( 16 376 32 ) ( 16 -48 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 376 24 ) ( 16 376 32 ) ( -192 376 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 32 ) ( 16 376 32 ) ( 16 376 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -} -// brush 6 -{ -( -32 120 64 ) ( -8 96 80 ) ( -8 96 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 64 ) ( -32 120 64 ) ( -8 96 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 80 ) ( -32 120 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 80 ) ( -32 120 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 64 ) ( -8 96 80 ) __TB_empty 0 0 0 1 1 -} -// brush 7 -{ -( -8 48 64 ) ( -8 48 80 ) ( -32 24 80 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 64 ) ( -32 24 64 ) ( -32 24 80 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( -8 48 64 ) ( -32 24 64 ) __TB_empty 0 0 0 1 1 -( -32 24 80 ) ( -8 48 80 ) ( -8 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 80 ) ( -8 48 80 ) ( -8 48 64 ) __TB_empty 0 0 0 1 1 -} -// brush 8 -{ -( -152 40 40 ) ( -152 16 40 ) ( -152 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 16 40 ) ( -136 16 40 ) ( -136 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 16 32 ) ( -136 40 32 ) ( -152 40 32 ) __TB_empty 0 0 0 1 1 -( -152 40 40 ) ( -136 40 40 ) ( -136 16 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 40 32 ) ( -136 40 40 ) ( -152 40 40 ) __TB_empty 0 0 0 1 1 -( -136 16 40 ) ( -136 40 40 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 9 -{ -( -152 128 40 ) ( -152 96 40 ) ( -152 96 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 96 40 ) ( -136 96 40 ) ( -136 96 32 ) __TB_empty 0 0 0 1 1 -( -136 96 32 ) ( -136 128 32 ) ( -152 128 32 ) __TB_empty 0 0 0 1 1 -( -152 128 40 ) ( -136 128 40 ) ( -136 96 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 128 32 ) ( -136 128 40 ) ( -152 128 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 96 40 ) ( -136 128 40 ) ( -136 128 32 ) __TB_empty 0 0 0 1 1 -} -// brush 10 -{ -( -32 120 144 ) ( -8 96 160 ) ( -8 96 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 144 ) ( -32 120 144 ) ( -8 96 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( -8 96 160 ) ( -32 120 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -32 120 144 ) ( -8 120 144 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 96 144 ) ( -8 96 160 ) __TB_empty 0 0 0 1 1 -} -// brush 11 -{ -( -8 48 144 ) ( -8 48 160 ) ( -32 24 160 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 144 ) ( -32 24 144 ) ( -32 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 144 ) ( -8 48 144 ) ( -32 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 160 ) ( -8 48 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 160 ) ( -8 48 160 ) ( -8 48 144 ) __TB_empty 0 0 0 1 1 -} -// brush 12 -{ -( -32 0 64 ) ( -32 1 64 ) ( -32 0 65 ) retro-texture-pack-v9/CRATE_1M 0 0 0 1 1 -( -32 0 64 ) ( -32 0 65 ) ( -31 0 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -32 0 64 ) ( -31 0 64 ) ( -32 1 64 ) __TB_empty 0 0 0 1 1 -( 0 24 160 ) ( 0 25 160 ) ( 1 24 160 ) __TB_empty 0 0 0 1 1 -( 0 24 72 ) ( 1 24 72 ) ( 0 24 73 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 24 72 ) ( 0 24 73 ) ( 0 25 72 ) __TB_empty 0 0 0 1 1 -} -// brush 13 -{ -( -32 120 160 ) ( -32 144 64 ) ( -32 144 160 ) retro-texture-pack-v9/CRATE_1M 48 0 0 1 1 -( 0 120 160 ) ( -32 120 64 ) ( -32 120 160 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 144 64 ) ( -32 120 64 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 120 160 ) ( -32 144 160 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 144 64 ) ( 0 144 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 0 144 160 ) ( 0 120 64 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -} -// brush 14 -{ -( -32 120 104 ) ( -8 96 120 ) ( -8 96 104 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 104 ) ( -32 120 104 ) ( -8 96 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 96 120 ) ( -32 120 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -32 120 104 ) ( -8 120 104 ) __TB_empty 0 0 0 1 1 -( -8 120 120 ) ( -8 96 104 ) ( -8 96 120 ) __TB_empty 0 0 0 1 1 -} -// brush 15 -{ -( -8 48 104 ) ( -8 48 120 ) ( -32 24 120 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 104 ) ( -32 24 104 ) ( -32 24 120 ) __TB_empty 0 0 0 1 1 -( -8 24 104 ) ( -8 48 104 ) ( -32 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 120 ) ( -8 48 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 120 ) ( -8 48 120 ) ( -8 48 104 ) __TB_empty 0 0 0 1 1 -} -// brush 16 -{ -( -8 24 160 ) ( -8 24 144 ) ( -8 120 160 ) retro-texture-pack-v9/CRATE_1L 24 -7 0 1 1 -( 0 24 160 ) ( 0 24 144 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( 0 120 144 ) ( -8 120 144 ) ( 0 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( 0 120 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 120 144 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -( 0 120 160 ) ( 0 120 144 ) ( 0 24 160 ) __TB_empty 0 0 0 1 1 -} -// brush 17 -{ -( -8 24 120 ) ( -8 24 104 ) ( -8 120 120 ) retro-texture-pack-v9/CRATE_1L -40 6 0 1 1 -( 0 24 120 ) ( 0 24 104 ) ( -8 24 120 ) __TB_empty 0 0 0 1 1 -( 0 120 104 ) ( -8 120 104 ) ( 0 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( 0 120 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 120 104 ) ( 0 120 120 ) __TB_empty 0 0 0 1 1 -( 0 120 120 ) ( 0 120 104 ) ( 0 24 120 ) __TB_empty 0 0 0 1 1 -} -// brush 18 -{ -( -8 120 64 ) ( -8 120 80 ) ( -8 24 64 ) retro-texture-pack-v9/CRATE_1L 24 0 0 1 1 -( -8 24 64 ) ( -8 24 80 ) ( 0 24 64 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( 0 24 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 24 80 ) ( -8 120 80 ) ( 0 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 120 64 ) ( 0 120 80 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( 0 24 64 ) ( 0 24 80 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -} -// brush 19 -{ -( 0 0 144 ) ( 0 144 32 ) ( 0 144 144 ) retro-texture-pack-v9/LIGHT_1A -19 -16 0 1 1 -( 16 0 144 ) ( 0 0 32 ) ( 0 0 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 32 ) ( 0 0 32 ) ( 16 0 32 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 0 144 ) ( 0 144 144 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 144 32 ) ( 16 144 32 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 144 ) ( 16 0 32 ) ( 16 0 144 ) __TB_empty 0 0 0 1 1 -} -// brush 20 -{ -( -48 102.62741699796607 64 ) ( -48 102.62741699796669 96 ) ( -70.62741699796324 80 96 ) retro-texture-pack-v9/CRATE_1H -34.274063 0 0 0.35355356 0.49999976 -( -48 57.37258300203757 96 ) ( -48 57.372583002035135 64 ) ( -70.62741699796297 80 64 ) retro-texture-pack-v9/CRATE_1H 34.27414 0 180 0.35355344 -0.49999976 -( -48 57.372583002035135 64 ) ( -25.37258300202666 80 64 ) ( -48 102.62741699796607 64 ) retro-texture-pack-v9/CRATE_1H 42.509666 -9.3725815 315 1 1 -( -48 102.62741699796669 96 ) ( -25.372583002033117 80 96 ) ( -48 57.37258300203757 96 ) retro-texture-pack-v9/CRATE_1H -49.952244 -21.019333 225 0.5079364 0.5 -( -25.372583002033117 80 96 ) ( -25.37258300202666 80 64 ) ( -48 57.372583002035135 64 ) retro-texture-pack-v9/CRATE_1H 19.882263 0 0 0.70710677 1 -( -25.372583002033117 80 96 ) ( -48 102.62741699796669 96 ) ( -48 102.62741699796607 64 ) retro-texture-pack-v9/CRATE_1H -7.5218506 0 180 0.3649583 -0.49999988 -} -// brush 21 -{ -( 16 272 80 ) ( 16 256 96 ) ( 16 224 96 ) retro-texture-pack-v9/DOOR_2C -16 -35 0 1 1.032258 -( 16 208 80 ) ( 32 208 80 ) ( 32 208 32 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 208 80 ) ( 16 208 80 ) ( 16 224 96 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 208 32 ) ( 32 272 32 ) ( 16 272 32 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 16 256 96 ) ( 32 256 96 ) ( 32 224 96 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 256 96 ) ( 16 256 96 ) ( 16 272 80 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 272 32 ) ( 32 272 80 ) ( 16 272 80 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 256 96 ) ( 32 272 80 ) ( 32 272 32 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -} -// brush 22 -{ -( 0 352 144 ) ( 0 272 144 ) ( 0 352 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 272 32 ) ( 0 272 32 ) ( 16 272 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 352 32 ) ( 0 272 32 ) ( 16 352 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 352 144 ) ( 16 272 144 ) ( 0 352 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 0 352 32 ) ( 16 352 32 ) ( 0 352 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 16 352 32 ) ( 16 272 32 ) ( 16 352 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 23 -{ -( 0 128 32 ) ( 0 208 32 ) ( 0 128 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 128 144 ) ( 16 128 144 ) ( 0 128 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 16 128 32 ) ( 16 208 32 ) ( 0 128 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 128 144 ) ( 0 208 144 ) ( 16 128 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 0 208 144 ) ( 0 208 32 ) ( 16 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 128 144 ) ( 16 208 144 ) ( 16 128 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 24 -{ -( 0 272 144 ) ( 0 208 144 ) ( 0 272 80 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 272 80 ) ( 0 208 144 ) ( 16 272 80 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 272 144 ) ( 16 208 144 ) ( 0 272 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 0 272 144 ) ( 0 272 80 ) ( 16 272 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 272 144 ) ( 16 272 80 ) ( 16 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 25 -{ -( 0 208 144 ) ( 0 208 80 ) ( 0 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 208 144 ) ( 16 208 80 ) ( 0 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 208 80 ) ( 16 208 80 ) ( 0 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 208 144 ) ( 0 240 112 ) ( 16 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 208 144 ) ( 16 240 112 ) ( 16 208 80 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 26 -{ -( 0 240 112 ) ( 0 224 96 ) ( 0 256 96 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 240 112 ) ( 16 224 96 ) ( 0 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 224 96 ) ( 16 256 96 ) ( 0 224 96 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 240 112 ) ( 0 256 96 ) ( 16 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 240 112 ) ( 16 256 96 ) ( 16 224 96 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -} diff --git a/examples/test_game/levels/autosave/test.6.map b/examples/test_game/levels/autosave/test.6.map deleted file mode 100644 index e2b1fba..0000000 --- a/examples/test_game/levels/autosave/test.6.map +++ /dev/null @@ -1,191 +0,0 @@ -// Game: Generic -// Format: Standard -// entity 0 -{ -"classname" "worldspawn" -"_tb_textures" "textures;textures/retro-texture-pack-v9" -"_tb_mod" "textures" -// brush 0 -{ -( -80 160 64 ) ( -80 0 64 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 64 ) ( 0 0 64 ) ( 0 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 32 ) ( 0 160 32 ) ( -80 160 32 ) __TB_empty 0 0 0 1 1 -( -80 160 64 ) ( 0 160 64 ) ( 0 0 64 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( 0 160 32 ) ( 0 160 64 ) ( -80 160 64 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 64 ) ( 0 160 64 ) ( 0 160 32 ) __TB_empty 0 0 0 1 1 -} -// brush 1 -{ -( -176 120 40 ) ( -176 32 40 ) ( -176 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -176 32 40 ) ( -152 32 40 ) ( -152 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 32 ) ( -152 120 32 ) ( -176 120 32 ) __TB_empty 0 0 0 1 1 -( -176 120 40 ) ( -152 120 40 ) ( -152 32 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -152 120 32 ) ( -152 120 40 ) ( -176 120 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 40 ) ( -152 120 40 ) ( -152 120 32 ) __TB_empty 0 0 0 1 1 -} -// brush 2 -{ -( -136 144 48 ) ( -136 104 48 ) ( -136 104 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 104 48 ) ( -80 104 48 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -( -80 104 32 ) ( -80 144 32 ) ( -136 144 32 ) __TB_empty 0 0 0 1 1 -( -136 144 48 ) ( -80 144 48 ) ( -80 104 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 144 32 ) ( -80 144 48 ) ( -136 144 48 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 104 48 ) ( -80 144 48 ) ( -80 144 32 ) __TB_empty 0 0 0 1 1 -} -// brush 3 -{ -( -136 40 48 ) ( -136 0 48 ) ( -136 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 0 48 ) ( -80 0 48 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 32 ) ( -80 40 32 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -( -136 40 48 ) ( -80 40 48 ) ( -80 0 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 40 32 ) ( -80 40 48 ) ( -136 40 48 ) __TB_empty 0 0 0 1 1 -( -80 0 48 ) ( -80 40 48 ) ( -80 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 4 -{ -( -152 104 56 ) ( -152 40 56 ) ( -152 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 40 56 ) ( -80 40 56 ) ( -80 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 32 ) ( -80 104 32 ) ( -152 104 32 ) __TB_empty 0 0 0 1 1 -( -152 104 56 ) ( -80 104 56 ) ( -80 40 56 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 104 32 ) ( -80 104 56 ) ( -152 104 56 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 56 ) ( -80 104 56 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -} -// brush 5 -{ -( -192 376 32 ) ( -192 -48 32 ) ( -192 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 -48 32 ) ( 16 -48 32 ) ( 16 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 24 ) ( 16 376 24 ) ( -192 376 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 376 32 ) ( 16 376 32 ) ( 16 -48 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 376 24 ) ( 16 376 32 ) ( -192 376 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 32 ) ( 16 376 32 ) ( 16 376 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -} -// brush 6 -{ -( -32 120 64 ) ( -8 96 80 ) ( -8 96 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 64 ) ( -32 120 64 ) ( -8 96 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 80 ) ( -32 120 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 80 ) ( -32 120 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 64 ) ( -8 96 80 ) __TB_empty 0 0 0 1 1 -} -// brush 7 -{ -( -8 48 64 ) ( -8 48 80 ) ( -32 24 80 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 64 ) ( -32 24 64 ) ( -32 24 80 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( -8 48 64 ) ( -32 24 64 ) __TB_empty 0 0 0 1 1 -( -32 24 80 ) ( -8 48 80 ) ( -8 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 80 ) ( -8 48 80 ) ( -8 48 64 ) __TB_empty 0 0 0 1 1 -} -// brush 8 -{ -( -152 40 40 ) ( -152 16 40 ) ( -152 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 16 40 ) ( -136 16 40 ) ( -136 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 16 32 ) ( -136 40 32 ) ( -152 40 32 ) __TB_empty 0 0 0 1 1 -( -152 40 40 ) ( -136 40 40 ) ( -136 16 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 40 32 ) ( -136 40 40 ) ( -152 40 40 ) __TB_empty 0 0 0 1 1 -( -136 16 40 ) ( -136 40 40 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 9 -{ -( -152 128 40 ) ( -152 96 40 ) ( -152 96 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 96 40 ) ( -136 96 40 ) ( -136 96 32 ) __TB_empty 0 0 0 1 1 -( -136 96 32 ) ( -136 128 32 ) ( -152 128 32 ) __TB_empty 0 0 0 1 1 -( -152 128 40 ) ( -136 128 40 ) ( -136 96 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 128 32 ) ( -136 128 40 ) ( -152 128 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 96 40 ) ( -136 128 40 ) ( -136 128 32 ) __TB_empty 0 0 0 1 1 -} -// brush 10 -{ -( -32 120 144 ) ( -8 96 160 ) ( -8 96 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 144 ) ( -32 120 144 ) ( -8 96 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( -8 96 160 ) ( -32 120 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -32 120 144 ) ( -8 120 144 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 96 144 ) ( -8 96 160 ) __TB_empty 0 0 0 1 1 -} -// brush 11 -{ -( -8 48 144 ) ( -8 48 160 ) ( -32 24 160 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 144 ) ( -32 24 144 ) ( -32 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 144 ) ( -8 48 144 ) ( -32 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 160 ) ( -8 48 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 160 ) ( -8 48 160 ) ( -8 48 144 ) __TB_empty 0 0 0 1 1 -} -// brush 12 -{ -( -32 0 64 ) ( -32 1 64 ) ( -32 0 65 ) retro-texture-pack-v9/CRATE_1M 0 0 0 1 1 -( -32 0 64 ) ( -32 0 65 ) ( -31 0 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -32 0 64 ) ( -31 0 64 ) ( -32 1 64 ) __TB_empty 0 0 0 1 1 -( 0 24 160 ) ( 0 25 160 ) ( 1 24 160 ) __TB_empty 0 0 0 1 1 -( 0 24 72 ) ( 1 24 72 ) ( 0 24 73 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 24 72 ) ( 0 24 73 ) ( 0 25 72 ) __TB_empty 0 0 0 1 1 -} -// brush 13 -{ -( -32 120 160 ) ( -32 144 64 ) ( -32 144 160 ) retro-texture-pack-v9/CRATE_1M 48 0 0 1 1 -( 0 120 160 ) ( -32 120 64 ) ( -32 120 160 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 144 64 ) ( -32 120 64 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 120 160 ) ( -32 144 160 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 144 64 ) ( 0 144 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 0 144 160 ) ( 0 120 64 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -} -// brush 14 -{ -( -32 120 104 ) ( -8 96 120 ) ( -8 96 104 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 104 ) ( -32 120 104 ) ( -8 96 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 96 120 ) ( -32 120 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -32 120 104 ) ( -8 120 104 ) __TB_empty 0 0 0 1 1 -( -8 120 120 ) ( -8 96 104 ) ( -8 96 120 ) __TB_empty 0 0 0 1 1 -} -// brush 15 -{ -( -8 48 104 ) ( -8 48 120 ) ( -32 24 120 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 104 ) ( -32 24 104 ) ( -32 24 120 ) __TB_empty 0 0 0 1 1 -( -8 24 104 ) ( -8 48 104 ) ( -32 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 120 ) ( -8 48 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 120 ) ( -8 48 120 ) ( -8 48 104 ) __TB_empty 0 0 0 1 1 -} -// brush 16 -{ -( -8 24 160 ) ( -8 24 144 ) ( -8 120 160 ) retro-texture-pack-v9/CRATE_1L 24 -7 0 1 1 -( 0 24 160 ) ( 0 24 144 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( 0 120 144 ) ( -8 120 144 ) ( 0 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( 0 120 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 120 144 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -( 0 120 160 ) ( 0 120 144 ) ( 0 24 160 ) __TB_empty 0 0 0 1 1 -} -// brush 17 -{ -( -8 24 120 ) ( -8 24 104 ) ( -8 120 120 ) retro-texture-pack-v9/CRATE_1L -40 6 0 1 1 -( 0 24 120 ) ( 0 24 104 ) ( -8 24 120 ) __TB_empty 0 0 0 1 1 -( 0 120 104 ) ( -8 120 104 ) ( 0 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( 0 120 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 120 104 ) ( 0 120 120 ) __TB_empty 0 0 0 1 1 -( 0 120 120 ) ( 0 120 104 ) ( 0 24 120 ) __TB_empty 0 0 0 1 1 -} -// brush 18 -{ -( -8 120 64 ) ( -8 120 80 ) ( -8 24 64 ) retro-texture-pack-v9/CRATE_1L 24 0 0 1 1 -( -8 24 64 ) ( -8 24 80 ) ( 0 24 64 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( 0 24 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 24 80 ) ( -8 120 80 ) ( 0 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 120 64 ) ( 0 120 80 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( 0 24 64 ) ( 0 24 80 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -} -// brush 19 -{ -( 0 0 144 ) ( 0 144 32 ) ( 0 144 144 ) retro-texture-pack-v9/LIGHT_1A -19 -16 0 1 1 -( 16 0 144 ) ( 0 0 32 ) ( 0 0 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 32 ) ( 0 0 32 ) ( 16 0 32 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 0 144 ) ( 0 144 144 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 144 32 ) ( 16 144 32 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 144 ) ( 16 0 32 ) ( 16 0 144 ) __TB_empty 0 0 0 1 1 -} -// brush 20 -{ -( -48 102.62741699796607 64 ) ( -48 102.62741699796669 96 ) ( -70.62741699796324 80 96 ) retro-texture-pack-v9/CRATE_1H -34.274063 0 0 0.35355356 0.49999976 -( -48 57.37258300203757 96 ) ( -48 57.372583002035135 64 ) ( -70.62741699796297 80 64 ) retro-texture-pack-v9/CRATE_1H 34.27414 0 180 0.35355344 -0.49999976 -( -48 57.372583002035135 64 ) ( -25.37258300202666 80 64 ) ( -48 102.62741699796607 64 ) retro-texture-pack-v9/CRATE_1H 42.509666 -9.3725815 315 1 1 -( -48 102.62741699796669 96 ) ( -25.372583002033117 80 96 ) ( -48 57.37258300203757 96 ) retro-texture-pack-v9/CRATE_1H -49.952244 -21.019333 225 0.5079364 0.5 -( -25.372583002033117 80 96 ) ( -25.37258300202666 80 64 ) ( -48 57.372583002035135 64 ) retro-texture-pack-v9/CRATE_1H 19.882263 0 0 0.70710677 1 -( -25.372583002033117 80 96 ) ( -48 102.62741699796669 96 ) ( -48 102.62741699796607 64 ) retro-texture-pack-v9/CRATE_1H -7.5218506 0 180 0.3649583 -0.49999988 -} -} diff --git a/examples/test_game/levels/test.map b/examples/test_game/levels/test.map deleted file mode 100644 index 3f32fac..0000000 --- a/examples/test_game/levels/test.map +++ /dev/null @@ -1,244 +0,0 @@ -// Game: Generic -// Format: Standard -// entity 0 -{ -"classname" "worldspawn" -"_tb_textures" "textures;textures/retro-texture-pack-v9" -"_tb_mod" "textures" -// brush 0 -{ -( -80 160 64 ) ( -80 0 64 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 64 ) ( 0 0 64 ) ( 0 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 32 ) ( 0 160 32 ) ( -80 160 32 ) __TB_empty 0 0 0 1 1 -( -80 160 64 ) ( 0 160 64 ) ( 0 0 64 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( 0 160 32 ) ( 0 160 64 ) ( -80 160 64 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( 0 0 64 ) ( 0 160 64 ) ( 0 160 32 ) __TB_empty 0 0 0 1 1 -} -// brush 1 -{ -( -176 120 40 ) ( -176 32 40 ) ( -176 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -176 32 40 ) ( -152 32 40 ) ( -152 32 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 32 ) ( -152 120 32 ) ( -176 120 32 ) __TB_empty 0 0 0 1 1 -( -176 120 40 ) ( -152 120 40 ) ( -152 32 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -152 120 32 ) ( -152 120 40 ) ( -176 120 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 32 40 ) ( -152 120 40 ) ( -152 120 32 ) __TB_empty 0 0 0 1 1 -} -// brush 2 -{ -( -136 144 48 ) ( -136 104 48 ) ( -136 104 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 104 48 ) ( -80 104 48 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -( -80 104 32 ) ( -80 144 32 ) ( -136 144 32 ) __TB_empty 0 0 0 1 1 -( -136 144 48 ) ( -80 144 48 ) ( -80 104 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 144 32 ) ( -80 144 48 ) ( -136 144 48 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 104 48 ) ( -80 144 48 ) ( -80 144 32 ) __TB_empty 0 0 0 1 1 -} -// brush 3 -{ -( -136 40 48 ) ( -136 0 48 ) ( -136 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 0 48 ) ( -80 0 48 ) ( -80 0 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 0 32 ) ( -80 40 32 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -( -136 40 48 ) ( -80 40 48 ) ( -80 0 48 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 40 32 ) ( -80 40 48 ) ( -136 40 48 ) __TB_empty 0 0 0 1 1 -( -80 0 48 ) ( -80 40 48 ) ( -80 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 4 -{ -( -152 104 56 ) ( -152 40 56 ) ( -152 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 40 56 ) ( -80 40 56 ) ( -80 40 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 32 ) ( -80 104 32 ) ( -152 104 32 ) __TB_empty 0 0 0 1 1 -( -152 104 56 ) ( -80 104 56 ) ( -80 40 56 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -80 104 32 ) ( -80 104 56 ) ( -152 104 56 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -80 40 56 ) ( -80 104 56 ) ( -80 104 32 ) __TB_empty 0 0 0 1 1 -} -// brush 5 -{ -( -192 376 32 ) ( -192 -48 32 ) ( -192 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 -48 32 ) ( 16 -48 32 ) ( 16 -48 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 24 ) ( 16 376 24 ) ( -192 376 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( -192 376 32 ) ( 16 376 32 ) ( 16 -48 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 376 24 ) ( 16 376 32 ) ( -192 376 32 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -( 16 -48 32 ) ( 16 376 32 ) ( 16 376 24 ) retro-texture-pack-v9/SAND_1A 0 0 0 1 1 -} -// brush 6 -{ -( -32 120 64 ) ( -8 96 80 ) ( -8 96 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 64 ) ( -32 120 64 ) ( -8 96 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 80 ) ( -32 120 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 80 ) ( -32 120 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 120 80 ) ( -8 96 64 ) ( -8 96 80 ) __TB_empty 0 0 0 1 1 -} -// brush 7 -{ -( -8 48 64 ) ( -8 48 80 ) ( -32 24 80 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 64 ) ( -32 24 64 ) ( -32 24 80 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( -8 48 64 ) ( -32 24 64 ) __TB_empty 0 0 0 1 1 -( -32 24 80 ) ( -8 48 80 ) ( -8 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 80 ) ( -8 48 80 ) ( -8 48 64 ) __TB_empty 0 0 0 1 1 -} -// brush 8 -{ -( -152 40 40 ) ( -152 16 40 ) ( -152 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 16 40 ) ( -136 16 40 ) ( -136 16 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 16 32 ) ( -136 40 32 ) ( -152 40 32 ) __TB_empty 0 0 0 1 1 -( -152 40 40 ) ( -136 40 40 ) ( -136 16 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 40 32 ) ( -136 40 40 ) ( -152 40 40 ) __TB_empty 0 0 0 1 1 -( -136 16 40 ) ( -136 40 40 ) ( -136 40 32 ) __TB_empty 0 0 0 1 1 -} -// brush 9 -{ -( -152 128 40 ) ( -152 96 40 ) ( -152 96 32 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -152 96 40 ) ( -136 96 40 ) ( -136 96 32 ) __TB_empty 0 0 0 1 1 -( -136 96 32 ) ( -136 128 32 ) ( -152 128 32 ) __TB_empty 0 0 0 1 1 -( -152 128 40 ) ( -136 128 40 ) ( -136 96 40 ) retro-texture-pack-v9/TILE_2D 0 0 0 1 1 -( -136 128 32 ) ( -136 128 40 ) ( -152 128 40 ) retro-texture-pack-v9/STUCCO_1A 0 0 0 1 1 -( -136 96 40 ) ( -136 128 40 ) ( -136 128 32 ) __TB_empty 0 0 0 1 1 -} -// brush 10 -{ -( -32 120 144 ) ( -8 96 160 ) ( -8 96 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 144 ) ( -32 120 144 ) ( -8 96 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( -8 96 160 ) ( -32 120 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -32 120 144 ) ( -8 120 144 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 96 144 ) ( -8 96 160 ) __TB_empty 0 0 0 1 1 -} -// brush 11 -{ -( -8 48 144 ) ( -8 48 160 ) ( -32 24 160 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 144 ) ( -32 24 144 ) ( -32 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 144 ) ( -8 48 144 ) ( -32 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 160 ) ( -8 48 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 24 160 ) ( -8 48 160 ) ( -8 48 144 ) __TB_empty 0 0 0 1 1 -} -// brush 12 -{ -( -32 0 64 ) ( -32 1 64 ) ( -32 0 65 ) retro-texture-pack-v9/CRATE_1M 0 0 0 1 1 -( -32 0 64 ) ( -32 0 65 ) ( -31 0 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -32 0 64 ) ( -31 0 64 ) ( -32 1 64 ) __TB_empty 0 0 0 1 1 -( 0 24 160 ) ( 0 25 160 ) ( 1 24 160 ) __TB_empty 0 0 0 1 1 -( 0 24 72 ) ( 1 24 72 ) ( 0 24 73 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 24 72 ) ( 0 24 73 ) ( 0 25 72 ) __TB_empty 0 0 0 1 1 -} -// brush 13 -{ -( -32 120 160 ) ( -32 144 64 ) ( -32 144 160 ) retro-texture-pack-v9/CRATE_1M 48 0 0 1 1 -( 0 120 160 ) ( -32 120 64 ) ( -32 120 160 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 144 64 ) ( -32 120 64 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 120 160 ) ( -32 144 160 ) __TB_empty 0 0 0 1 1 -( 0 144 160 ) ( -32 144 64 ) ( 0 144 64 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 0 144 160 ) ( 0 120 64 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -} -// brush 14 -{ -( -32 120 104 ) ( -8 96 120 ) ( -8 96 104 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 120 104 ) ( -32 120 104 ) ( -8 96 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 96 120 ) ( -32 120 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -32 120 104 ) ( -8 120 104 ) __TB_empty 0 0 0 1 1 -( -8 120 120 ) ( -8 96 104 ) ( -8 96 120 ) __TB_empty 0 0 0 1 1 -} -// brush 15 -{ -( -8 48 104 ) ( -8 48 120 ) ( -32 24 120 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( -8 24 104 ) ( -32 24 104 ) ( -32 24 120 ) __TB_empty 0 0 0 1 1 -( -8 24 104 ) ( -8 48 104 ) ( -32 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -32 24 120 ) ( -8 48 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 24 120 ) ( -8 48 120 ) ( -8 48 104 ) __TB_empty 0 0 0 1 1 -} -// brush 16 -{ -( -8 24 160 ) ( -8 24 144 ) ( -8 120 160 ) retro-texture-pack-v9/CRATE_1L 24 -7 0 1 1 -( 0 24 160 ) ( 0 24 144 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( 0 120 144 ) ( -8 120 144 ) ( 0 24 144 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 160 ) ( 0 120 160 ) ( -8 24 160 ) __TB_empty 0 0 0 1 1 -( -8 120 160 ) ( -8 120 144 ) ( 0 120 160 ) __TB_empty 0 0 0 1 1 -( 0 120 160 ) ( 0 120 144 ) ( 0 24 160 ) __TB_empty 0 0 0 1 1 -} -// brush 17 -{ -( -8 24 120 ) ( -8 24 104 ) ( -8 120 120 ) retro-texture-pack-v9/CRATE_1L -40 6 0 1 1 -( 0 24 120 ) ( 0 24 104 ) ( -8 24 120 ) __TB_empty 0 0 0 1 1 -( 0 120 104 ) ( -8 120 104 ) ( 0 24 104 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( 0 120 120 ) ( -8 24 120 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( -8 120 120 ) ( -8 120 104 ) ( 0 120 120 ) __TB_empty 0 0 0 1 1 -( 0 120 120 ) ( 0 120 104 ) ( 0 24 120 ) __TB_empty 0 0 0 1 1 -} -// brush 18 -{ -( -8 120 64 ) ( -8 120 80 ) ( -8 24 64 ) retro-texture-pack-v9/CRATE_1L 24 0 0 1 1 -( -8 24 64 ) ( -8 24 80 ) ( 0 24 64 ) __TB_empty 0 0 0 1 1 -( -8 24 64 ) ( 0 24 64 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( -8 24 80 ) ( -8 120 80 ) ( 0 24 80 ) retro-texture-pack-v9/GRID_1A 0 0 0 1 1 -( 0 120 64 ) ( 0 120 80 ) ( -8 120 64 ) __TB_empty 0 0 0 1 1 -( 0 24 64 ) ( 0 24 80 ) ( 0 120 64 ) __TB_empty 0 0 0 1 1 -} -// brush 19 -{ -( 0 0 144 ) ( 0 144 32 ) ( 0 144 144 ) retro-texture-pack-v9/LIGHT_1A -19 -16 0 1 1 -( 16 0 144 ) ( 0 0 32 ) ( 0 0 144 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 32 ) ( 0 0 32 ) ( 16 0 32 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 0 144 ) ( 0 144 144 ) __TB_empty 0 0 0 1 1 -( 16 144 144 ) ( 0 144 32 ) ( 16 144 32 ) retro-texture-pack-v9/CRATE_1L 0 0 0 1 1 -( 16 144 144 ) ( 16 0 32 ) ( 16 0 144 ) __TB_empty 0 0 0 1 1 -} -// brush 20 -{ -( -48 102.62741699796607 64 ) ( -48 102.62741699796669 96 ) ( -70.62741699796324 80 96 ) retro-texture-pack-v9/CRATE_1H -34.274063 0 0 0.35355356 0.49999976 -( -48 57.37258300203757 96 ) ( -48 57.372583002035135 64 ) ( -70.62741699796297 80 64 ) retro-texture-pack-v9/CRATE_1H 34.27414 0 180 0.35355344 -0.49999976 -( -48 57.372583002035135 64 ) ( -25.37258300202666 80 64 ) ( -48 102.62741699796607 64 ) retro-texture-pack-v9/CRATE_1H 42.509666 -9.3725815 315 1 1 -( -48 102.62741699796669 96 ) ( -25.372583002033117 80 96 ) ( -48 57.37258300203757 96 ) retro-texture-pack-v9/CRATE_1H -49.952244 -21.019333 225 0.5079364 0.5 -( -25.372583002033117 80 96 ) ( -25.37258300202666 80 64 ) ( -48 57.372583002035135 64 ) retro-texture-pack-v9/CRATE_1H 19.882263 0 0 0.70710677 1 -( -25.372583002033117 80 96 ) ( -48 102.62741699796669 96 ) ( -48 102.62741699796607 64 ) retro-texture-pack-v9/CRATE_1H -7.5218506 0 180 0.3649583 -0.49999988 -} -// brush 21 -{ -( 16 272 80 ) ( 16 256 96 ) ( 16 224 96 ) retro-texture-pack-v9/DOOR_2C -16 -35 0 1 1.032258 -( 16 208 80 ) ( 32 208 80 ) ( 32 208 32 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 208 80 ) ( 16 208 80 ) ( 16 224 96 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 208 32 ) ( 32 272 32 ) ( 16 272 32 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 16 256 96 ) ( 32 256 96 ) ( 32 224 96 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 256 96 ) ( 16 256 96 ) ( 16 272 80 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 272 32 ) ( 32 272 80 ) ( 16 272 80 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -( 32 256 96 ) ( 32 272 80 ) ( 32 272 32 ) retro-texture-pack-v9/DOOR_2C 0 0 0 1 1 -} -// brush 22 -{ -( 0 352 144 ) ( 0 272 144 ) ( 0 352 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 272 32 ) ( 0 272 32 ) ( 16 272 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 352 32 ) ( 0 272 32 ) ( 16 352 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 352 144 ) ( 16 272 144 ) ( 0 352 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 0 352 32 ) ( 16 352 32 ) ( 0 352 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 16 352 32 ) ( 16 272 32 ) ( 16 352 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 23 -{ -( 0 128 32 ) ( 0 208 32 ) ( 0 128 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 128 144 ) ( 16 128 144 ) ( 0 128 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 16 128 32 ) ( 16 208 32 ) ( 0 128 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 128 144 ) ( 0 208 144 ) ( 16 128 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 0 208 144 ) ( 0 208 32 ) ( 16 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 128 144 ) ( 16 208 144 ) ( 16 128 32 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 24 -{ -( 0 272 144 ) ( 0 208 144 ) ( 0 272 80 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 272 80 ) ( 0 208 144 ) ( 16 272 80 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 272 144 ) ( 16 208 144 ) ( 0 272 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 0.5 0.5 -( 0 272 144 ) ( 0 272 80 ) ( 16 272 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 272 144 ) ( 16 272 80 ) ( 16 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 25 -{ -( 0 208 144 ) ( 0 208 80 ) ( 0 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 208 144 ) ( 16 208 80 ) ( 0 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 208 80 ) ( 16 208 80 ) ( 0 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 208 144 ) ( 0 240 112 ) ( 16 208 144 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 208 144 ) ( 16 240 112 ) ( 16 208 80 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -// brush 26 -{ -( 0 240 112 ) ( 0 224 96 ) ( 0 256 96 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 240 112 ) ( 16 224 96 ) ( 0 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 224 96 ) ( 16 256 96 ) ( 0 224 96 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 0 240 112 ) ( 0 256 96 ) ( 16 240 112 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -( 16 240 112 ) ( 16 256 96 ) ( 16 224 96 ) retro-texture-pack-v9/CONCRETE_2C 0 0 0 1 1 -} -} diff --git a/examples/test_game/levels/test.mtl b/examples/test_game/levels/test.mtl deleted file mode 100644 index fc5210b..0000000 --- a/examples/test_game/levels/test.mtl +++ /dev/null @@ -1,27 +0,0 @@ -newmtl __TB_empty -map_Kd ..\..\..\..\..\..\..\..\Users\z002f2au\Downloads\TrenchBroom-Win64-v2023.1-Release\defaults\assets\textures\__TB_empty.png - -newmtl retro-texture-pack-v9/CRATE_1H -map_Kd ..\textures\retro-texture-pack-v9\CRATE_1H.png - -newmtl retro-texture-pack-v9/CRATE_1L -map_Kd ..\textures\retro-texture-pack-v9\CRATE_1L.png - -newmtl retro-texture-pack-v9/CRATE_1M -map_Kd ..\textures\retro-texture-pack-v9\CRATE_1M.png - -newmtl retro-texture-pack-v9/GRID_1A -map_Kd ..\textures\retro-texture-pack-v9\GRID_1A.png - -newmtl retro-texture-pack-v9/LIGHT_1A -map_Kd ..\textures\retro-texture-pack-v9\LIGHT_1A.png - -newmtl retro-texture-pack-v9/SAND_1A -map_Kd ..\textures\retro-texture-pack-v9\SAND_1A.png - -newmtl retro-texture-pack-v9/STUCCO_1A -map_Kd ..\textures\retro-texture-pack-v9\STUCCO_1A.png - -newmtl retro-texture-pack-v9/TILE_2D -map_Kd ..\textures\retro-texture-pack-v9\TILE_2D.png - diff --git a/examples/test_game/levels/test.obj b/examples/test_game/levels/test.obj deleted file mode 100644 index 7f2183b..0000000 --- a/examples/test_game/levels/test.obj +++ /dev/null @@ -1,694 +0,0 @@ -mtllib test.mtl -# vertices -v -80 32 -160 -v -80 32 -0 -v -80 64 -0 -v -80 64 -160 -v 0 64 -0 -v 0 32 -0 -v 0 32 -160 -v 0 64 -160 -v -176 32 -120 -v -176 32 -32 -v -176 40 -32 -v -176 40 -120 -v -152 40 -32 -v -152 32 -32 -v -152 32 -120 -v -152 40 -120 -v -136 32 -144 -v -136 32 -104 -v -136 48 -104 -v -136 48 -144 -v -80 48 -104 -v -80 32 -104 -v -80 32 -144 -v -80 48 -144 -v -136 32 -40 -v -136 32 -0 -v -136 48 -0 -v -136 48 -40 -v -80 48 -0 -v -80 32 -0 -v -80 32 -40 -v -80 48 -40 -v -152 32 -104 -v -152 32 -40 -v -152 56 -40 -v -152 56 -104 -v -80 56 -40 -v -80 32 -40 -v -80 32 -104 -v -80 56 -104 -v -192 24 -376 -v -192 24 48 -v -192 32 48 -v -192 32 -376 -v 16 32 48 -v 16 24 48 -v 16 24 -376 -v 16 32 -376 -v -8 80 -96 -v -32 80 -120 -v -32 64 -120 -v -8 64 -96 -v -8 64 -120 -v -8 80 -120 -v -8 64 -48 -v -32 64 -24 -v -32 80 -24 -v -8 80 -48 -v -8 80 -24 -v -8 64 -24 -v -152 32 -40 -v -152 32 -16 -v -152 40 -16 -v -152 40 -40 -v -136 40 -16 -v -136 32 -16 -v -136 32 -40 -v -136 40 -40 -v -152 32 -128 -v -152 32 -96 -v -152 40 -96 -v -152 40 -128 -v -136 40 -96 -v -136 32 -96 -v -136 32 -128 -v -136 40 -128 -v -8 160 -96 -v -32 160 -120 -v -32 144 -120 -v -8 144 -96 -v -8 144 -120 -v -8 160 -120 -v -8 144 -48 -v -32 144 -24 -v -32 160 -24 -v -8 160 -48 -v -8 160 -24 -v -8 144 -24 -v -32 64 -24 -v -32 64 -0 -v -32 160 -0 -v -32 160 -24 -v 0 160 -0 -v 0 64 -0 -v 0 64 -24 -v 0 160 -24 -v -32 64 -144 -v -32 64 -120 -v -32 160 -120 -v -32 160 -144 -v 0 160 -120 -v 0 64 -120 -v 0 64 -144 -v 0 160 -144 -v -8 120 -96 -v -32 120 -120 -v -32 104 -120 -v -8 104 -96 -v -8 104 -120 -v -8 120 -120 -v -8 104 -48 -v -32 104 -24 -v -32 120 -24 -v -8 120 -48 -v -8 120 -24 -v -8 104 -24 -v -8 144 -120 -v -8 144 -24 -v -8 160 -24 -v -8 160 -120 -v 0 160 -24 -v 0 144 -24 -v 0 144 -120 -v 0 160 -120 -v -8 104 -120 -v -8 104 -24 -v -8 120 -24 -v -8 120 -120 -v 0 120 -24 -v 0 104 -24 -v 0 104 -120 -v 0 120 -120 -v -8 64 -120 -v -8 64 -24 -v -8 80 -24 -v -8 80 -120 -v 0 80 -24 -v 0 64 -24 -v 0 64 -120 -v 0 80 -120 -v 0 32 -144 -v 0 32 -0 -v 0 144 -0 -v 0 144 -144 -v 16 144 -0 -v 16 32 -0 -v 16 32 -144 -v 16 144 -144 -v -48 64 -102.62741699796607 -v -70.62741699796061 64 -80 -v -70.6274169979597 96 -80 -v -48 96 -102.62741699796723 -v -48 96 -57.372583002048486 -v -48 64 -57.37258300203785 -v -25.37258300202666 64 -80 -v -25.372583002036556 96 -80 - -# texture coordinates -vt 2.5 0.5 -vt 0 0.5 -vt 0 1 -vt 2.5 1 -vt -1.25 1 -vt -1.25 0.5 -vt 0 -0 -vt -2.5 -0 -vt -2.5 5 -vt 0 5 -vt 0 2.5 -vt -1.25 2.5 -vt -1.25 -0 -vt 5 2 -vt 0 2 -vt 5 1 -vt 1.875 0.5 -vt 0.5 0.5 -vt 0.5 0.625 -vt 1.875 0.625 -vt -2.375 0.625 -vt -2.75 0.625 -vt -2.75 0.5 -vt -2.375 0.5 -vt -4.75 1 -vt -5.5 1 -vt -5.5 3.75 -vt -4.75 3.75 -vt -2.375 1.875 -vt -2.75 1.875 -vt 3.75 1.25 -vt 1 1.25 -vt 1 1 -vt 3.75 1 -vt 2.25 0.5 -vt 1.625 0.5 -vt 1.625 0.75 -vt 2.25 0.75 -vt -2.5 1.5 -vt -4.25 1.5 -vt -4.25 1 -vt -2.5 1 -vt -2.5 3.25 -vt -4.25 3.25 -vt -4.25 4.5 -vt -2.5 4.5 -vt -1.25 2.25 -vt -2.125 2.25 -vt -2.125 1.625 -vt -1.25 1.625 -vt -2.125 0.5 -vt -2.125 0.75 -vt -1.25 0.75 -vt 4.5 1.5 -vt 3.25 1.5 -vt 3.25 1 -vt 4.5 1 -vt 0.625 0.5 -vt 0 0.75 -vt 0.625 0.75 -vt -4.25 -0 -vt -4.25 1.25 -vt -2.5 1.25 -vt -1.25 0.625 -vt -2.125 0.625 -vt -2.125 -0 -vt 1.25 1.5 -vt 0 1.5 -vt 1.25 1 -vt 0.625 0.875 -vt 1.625 0.875 -vt -1.25 0.875 -vt -2.375 0.875 -vt -4.75 1.25 -vt -4.75 3.25 -vt -2.375 1.625 -vt 3.25 1.75 -vt 1.25 1.75 -vt 5.875 0.375 -vt -0.75 0.375 -vt -0.75 0.5 -vt 5.875 0.5 -vt 0.25 0.5 -vt -3 0.5 -vt -3 0.375 -vt 0.25 0.375 -vt 0.25 -0.75 -vt -3 -0.75 -vt -3 5.875 -vt 0.25 5.875 -vt 1.5 1.25 -vt 1.875 1.25 -vt 1.875 1 -vt 1.5 1 -vt -0.25 3 -vt -1 3.75 -vt -0.25 3.75 -vt -0.125 1.875 -vt -0.5 1.875 -vt -0.125 1.5 -vt -0.25 2 -vt -1 2 -vt -1 2.5 -vt -0.25 2.5 -vt 3 2.5 -vt 3 2 -vt 3.75 2 -vt 3.75 2.5 -vt 0.75 1 -vt 0.375 1 -vt 0.375 1.25 -vt 0.75 1.25 -vt -0.25 0.75 -vt -1 0.75 -vt -0.25 1.5 -vt -0.125 0.75 -vt -0.5 0.375 -vt -0.125 0.375 -vt 0.75 2 -vt 1.5 2 -vt 1.5 2.5 -vt 0.75 2.5 -vt 0.25 0.625 -vt 0.625 0.625 -vt -4.25 0.5 -vt -4.75 0.5 -vt -2.375 0.25 -vt -2.125 0.25 -vt 1.25 1.25 -vt 0.5 1.25 -vt 0.5 1 -vt 2 0.5 -vt 1.5 0.5 -vt 1.5 0.625 -vt 2 0.625 -vt -4.25 3 -vt -4.75 3 -vt -4.75 4 -vt -4.25 4 -vt -2.125 2 -vt -2.375 2 -vt -2.375 1.5 -vt -2.125 1.5 -vt 4 1.25 -vt 3 1.25 -vt 3 1 -vt 4 1 -vt 1.875 2.5 -vt 1.875 2.25 -vt 1.5 2.25 -vt -0.25 4.5 -vt -1 4.5 -vt -1 5 -vt -0.25 5 -vt 3 5 -vt 3 4.5 -vt 3.75 4.5 -vt 3.75 5 -vt 0.75 2.25 -vt 0.375 2.25 -vt 0.375 2.5 -vt 0.75 4.5 -vt 1.5 4.5 -vt 1.5 5 -vt 0.75 5 -vt -0.5 2.5 -vt -0.5 1 -vt -1 -0 -vt 2.625 1 -vt 2.625 2.5 -vt 0 3.75 -vt 0 4.5 -vt 4.5 5 -vt 4.5 2 -vt 1.5 1.875 -vt 1.875 1.875 -vt 1.875 1.625 -vt 1.5 1.625 -vt -0.25 3.25 -vt -1 3.25 -vt 3 3.75 -vt 3 3.25 -vt 3.75 3.25 -vt 3.75 3.75 -vt 0.75 1.625 -vt 0.375 1.625 -vt 0.375 1.875 -vt 0.75 1.875 -vt 0.75 3.25 -vt 1.5 3.25 -vt 1.5 3.75 -vt 0.75 3.75 -vt 2.25 2.359375 -vt 0.75 2.359375 -vt 0.75 2.609375 -vt 2.25 2.609375 -vt 0 0.375 -vt 0 1.875 -vt 1.25 1.53125 -vt -0.25 1.53125 -vt -0.25 1.78125 -vt 1.25 1.78125 -vt 0 3.25 -vt 2.25 1 -vt 2.25 1.25 -vt 1.953125 0.75 -vt -0.296875 0.75 -vt -0.296875 2.5 -vt 1.953125 2.5 -vt 0.25 2.25 -vt 0 2.25 -vt 0.5 -0 -vt 0.5 4.5 -vt 4.5 4.5 -vt 3.9999993 2.000001 -vt 3 2.000001 -vt 3 3.0000014 -vt 3.9999993 3.0000014 -vt -2 3.0000014 -vt -3 3.0000014 -vt -3 2.000001 -vt -2 2.000001 -vt -0.5 0.75 -vt -0.5 0.24999997 -vt -1 0.24999997 -vt -1.9687498 -3 -vt -0.9843746 -3 -vt -0.9843746 -2 -vt -1.9687498 -2 -vt -0.24999982 1.5 -vt -0.7499999 1.5 -vt -0.7499999 1 -vt -0.24999982 1 -vt 1.9375005 2.0000005 -vt 1.9375005 3.0000007 -vt 0.96875036 3.0000007 -vt 0.96875036 2.0000005 - -# normals -vn -1 0 0 -vn 0 0 1 -vn 0 -1 -0 -vn -0 1 -0 -vn 0 -0 -1 -vn 1 0 0 -vn -0.7071067811865476 0 0.7071067811865476 -vn -0.7071067811865476 0 -0.7071067811865476 -vn -0.7071067811866015 -1.3816813636416168e-14 -0.7071067811864936 -vn -0.7071067811865772 5.385417133285123e-14 0.7071067811865179 -vn 0.707106781186415 1.427214044943284e-13 0.7071067811866799 -vn 0.7071067811865445 -1.3822276656584868e-14 -0.7071067811865505 - -o entity0_brush0 -usemtl retro-texture-pack-v9/STUCCO_1A -f 1/1/1 2/2/1 3/3/1 4/4/1 -usemtl retro-texture-pack-v9/STUCCO_1A -f 5/3/2 3/5/2 2/6/2 6/2/2 -usemtl __TB_empty -f 6/7/3 2/8/3 1/9/3 7/10/3 -usemtl retro-texture-pack-v9/TILE_2D -f 8/11/4 4/12/4 3/13/4 5/7/4 -usemtl retro-texture-pack-v9/STUCCO_1A -f 7/2/5 1/6/5 4/5/5 8/3/5 -usemtl __TB_empty -f 8/14/6 5/15/6 6/3/6 7/16/6 - -o entity0_brush1 -usemtl retro-texture-pack-v9/STUCCO_1A -f 9/17/1 10/18/1 11/19/1 12/20/1 -usemtl retro-texture-pack-v9/STUCCO_1A -f 13/21/2 11/22/2 10/23/2 14/24/2 -usemtl __TB_empty -f 14/25/3 10/26/3 9/27/3 15/28/3 -usemtl retro-texture-pack-v9/TILE_2D -f 16/29/4 12/30/4 11/23/4 13/24/4 -usemtl retro-texture-pack-v9/STUCCO_1A -f 15/24/5 9/23/5 12/22/5 16/21/5 -usemtl __TB_empty -f 16/31/6 13/32/6 14/33/6 15/34/6 - -o entity0_brush2 -usemtl retro-texture-pack-v9/STUCCO_1A -f 17/35/1 18/36/1 19/37/1 20/38/1 -usemtl __TB_empty -f 21/39/2 19/40/2 18/41/2 22/42/2 -usemtl __TB_empty -f 22/43/3 18/44/3 17/45/3 23/46/3 -usemtl retro-texture-pack-v9/TILE_2D -f 24/47/4 20/48/4 19/49/4 21/50/4 -usemtl retro-texture-pack-v9/STUCCO_1A -f 23/6/5 17/51/5 20/52/5 24/53/5 -usemtl __TB_empty -f 24/54/6 21/55/6 22/56/6 23/57/6 - -o entity0_brush3 -usemtl retro-texture-pack-v9/STUCCO_1A -f 25/58/1 26/2/1 27/59/1 28/60/1 -usemtl retro-texture-pack-v9/STUCCO_1A -f 29/53/2 27/52/2 26/51/2 30/6/2 -usemtl __TB_empty -f 30/8/3 26/61/3 25/62/3 31/63/3 -usemtl retro-texture-pack-v9/TILE_2D -f 32/64/4 28/65/4 27/66/4 29/13/4 -usemtl __TB_empty -f 31/42/5 25/41/5 28/40/5 32/39/5 -usemtl __TB_empty -f 32/67/6 29/68/6 30/3/6 31/69/6 - -o entity0_brush4 -usemtl retro-texture-pack-v9/STUCCO_1A -f 33/36/1 34/58/1 35/70/1 36/71/1 -usemtl retro-texture-pack-v9/STUCCO_1A -f 37/72/2 35/73/2 34/24/2 38/6/2 -usemtl __TB_empty -f 38/63/3 34/74/3 33/75/3 39/43/3 -usemtl retro-texture-pack-v9/TILE_2D -f 40/50/4 36/76/4 35/21/4 37/64/4 -usemtl retro-texture-pack-v9/STUCCO_1A -f 39/6/5 33/24/5 36/73/5 40/72/5 -usemtl __TB_empty -f 40/77/6 37/78/6 38/69/6 39/56/6 - -o entity0_brush5 -usemtl retro-texture-pack-v9/SAND_1A -f 41/79/1 42/80/1 43/81/1 44/82/1 -usemtl retro-texture-pack-v9/SAND_1A -f 45/83/2 43/84/2 42/85/2 46/86/2 -usemtl retro-texture-pack-v9/SAND_1A -f 46/87/3 42/88/3 41/89/3 47/90/3 -usemtl retro-texture-pack-v9/SAND_1A -f 48/90/4 44/89/4 43/88/4 45/87/4 -usemtl retro-texture-pack-v9/SAND_1A -f 47/86/5 41/85/5 44/84/5 48/83/5 -usemtl retro-texture-pack-v9/SAND_1A -f 48/82/6 45/81/6 46/80/6 47/79/6 - -o entity0_brush6 -usemtl retro-texture-pack-v9/CRATE_1L -f 49/91/7 50/92/7 51/93/7 52/94/7 -usemtl __TB_empty -f 52/95/3 51/96/3 53/97/3 -usemtl retro-texture-pack-v9/GRID_1A -f 54/98/4 50/99/4 49/100/4 -usemtl __TB_empty -f 53/101/5 51/102/5 50/103/5 54/104/5 -usemtl __TB_empty -f 49/105/6 52/106/6 53/107/6 54/108/6 - -o entity0_brush7 -usemtl retro-texture-pack-v9/CRATE_1L -f 55/109/8 56/110/8 57/111/8 58/112/8 -usemtl __TB_empty -f 59/104/2 57/103/2 56/102/2 60/101/2 -usemtl __TB_empty -f 60/113/3 56/114/3 55/115/3 -usemtl retro-texture-pack-v9/GRID_1A -f 58/116/4 57/117/4 59/118/4 -usemtl __TB_empty -f 60/119/6 55/120/6 58/121/6 59/122/6 - -o entity0_brush8 -usemtl retro-texture-pack-v9/STUCCO_1A -f 61/58/1 62/83/1 63/123/1 64/124/1 -usemtl retro-texture-pack-v9/STUCCO_1A -f 65/65/2 63/21/2 62/24/2 66/51/2 -usemtl __TB_empty -f 66/125/3 62/126/3 61/74/3 67/62/3 -usemtl retro-texture-pack-v9/TILE_2D -f 68/65/4 64/21/4 63/127/4 65/128/4 -usemtl __TB_empty -f 67/41/5 61/25/5 64/74/5 68/62/5 -usemtl __TB_empty -f 68/129/6 65/130/6 66/131/6 67/69/6 - -o entity0_brush9 -usemtl retro-texture-pack-v9/STUCCO_1A -f 69/132/1 70/133/1 71/134/1 72/135/1 -usemtl __TB_empty -f 73/62/2 71/74/2 70/25/2 74/41/2 -usemtl __TB_empty -f 74/136/3 70/137/3 69/138/3 75/139/3 -usemtl retro-texture-pack-v9/TILE_2D -f 76/140/4 72/141/4 71/142/4 73/143/4 -usemtl retro-texture-pack-v9/STUCCO_1A -f 75/51/5 69/24/5 72/21/5 76/65/5 -usemtl __TB_empty -f 76/144/6 73/145/6 74/146/6 75/147/6 - -o entity0_brush10 -usemtl retro-texture-pack-v9/CRATE_1L -f 77/121/7 78/148/7 79/149/7 80/150/7 -usemtl retro-texture-pack-v9/GRID_1A -f 80/100/3 79/99/3 81/98/3 -usemtl __TB_empty -f 82/97/4 78/96/4 77/95/4 -usemtl __TB_empty -f 81/151/5 79/152/5 78/153/5 82/154/5 -usemtl __TB_empty -f 77/155/6 80/156/6 81/157/6 82/158/6 - -o entity0_brush11 -usemtl retro-texture-pack-v9/CRATE_1L -f 83/159/8 84/160/8 85/161/8 86/122/8 -usemtl __TB_empty -f 87/154/2 85/153/2 84/152/2 88/151/2 -usemtl retro-texture-pack-v9/GRID_1A -f 88/118/3 84/117/3 83/116/3 -usemtl __TB_empty -f 86/115/4 85/114/4 87/113/4 -usemtl __TB_empty -f 88/162/6 83/163/6 86/164/6 87/165/6 - -o entity0_brush12 -usemtl retro-texture-pack-v9/CRATE_1M -f 89/110/1 90/3/1 91/11/1 92/161/1 -usemtl retro-texture-pack-v9/CRATE_1L -f 93/11/2 91/166/2 90/167/2 94/3/2 -usemtl __TB_empty -f 94/7/3 90/168/3 89/114/3 95/59/3 -usemtl __TB_empty -f 96/59/4 92/114/4 91/168/4 93/7/4 -usemtl retro-texture-pack-v9/GRID_1A -f 95/3/5 89/167/5 92/166/5 96/11/5 -usemtl __TB_empty -f 96/165/6 93/10/6 94/15/6 95/119/6 - -o entity0_brush13 -usemtl retro-texture-pack-v9/CRATE_1M -f 97/146/1 98/169/1 99/170/1 100/105/1 -usemtl retro-texture-pack-v9/GRID_1A -f 101/11/2 99/166/2 98/167/2 102/3/2 -usemtl __TB_empty -f 102/171/3 98/96/3 97/152/3 103/172/3 -usemtl __TB_empty -f 104/172/4 100/152/4 99/96/4 101/171/4 -usemtl retro-texture-pack-v9/CRATE_1L -f 103/3/5 97/167/5 100/166/5 104/11/5 -usemtl __TB_empty -f 104/173/6 101/158/6 102/107/6 103/174/6 - -o entity0_brush14 -usemtl retro-texture-pack-v9/CRATE_1L -f 105/175/7 106/176/7 107/177/7 108/178/7 -usemtl retro-texture-pack-v9/GRID_1A -f 108/100/3 107/99/3 109/98/3 -usemtl retro-texture-pack-v9/GRID_1A -f 110/98/4 106/99/4 105/100/4 -usemtl __TB_empty -f 109/179/5 107/180/5 106/96/5 110/97/5 -usemtl __TB_empty -f 105/181/6 108/182/6 109/183/6 110/184/6 - -o entity0_brush15 -usemtl retro-texture-pack-v9/CRATE_1L -f 111/185/8 112/186/8 113/187/8 114/188/8 -usemtl __TB_empty -f 115/97/2 113/96/2 112/180/2 116/179/2 -usemtl retro-texture-pack-v9/GRID_1A -f 116/118/3 112/117/3 111/116/3 -usemtl retro-texture-pack-v9/GRID_1A -f 114/116/4 113/117/4 115/118/4 -usemtl __TB_empty -f 116/189/6 111/190/6 114/191/6 115/192/6 - -o entity0_brush16 -usemtl retro-texture-pack-v9/CRATE_1L -f 117/193/1 118/194/1 119/195/1 120/196/1 -usemtl __TB_empty -f 121/10/2 119/154/2 118/151/2 122/172/2 -usemtl retro-texture-pack-v9/GRID_1A -f 122/197/3 118/118/3 117/98/3 123/198/3 -usemtl __TB_empty -f 124/171/4 120/97/4 119/113/4 121/59/4 -usemtl __TB_empty -f 123/172/5 117/151/5 120/154/5 124/10/5 -usemtl __TB_empty -f 124/158/6 121/165/6 122/162/6 123/157/6 - -o entity0_brush17 -usemtl retro-texture-pack-v9/CRATE_1L -f 125/199/1 126/200/1 127/201/1 128/202/1 -usemtl __TB_empty -f 129/171/2 127/97/2 126/179/2 130/203/2 -usemtl retro-texture-pack-v9/GRID_1A -f 130/197/3 126/118/3 125/98/3 131/198/3 -usemtl retro-texture-pack-v9/GRID_1A -f 132/198/4 128/98/4 127/118/4 129/197/4 -usemtl __TB_empty -f 131/203/5 125/179/5 128/97/5 132/171/5 -usemtl __TB_empty -f 132/184/6 129/192/6 130/189/6 131/183/6 - -o entity0_brush18 -usemtl retro-texture-pack-v9/CRATE_1L -f 133/204/1 134/109/1 135/112/1 136/205/1 -usemtl __TB_empty -f 137/11/2 135/104/2 134/101/2 138/15/2 -usemtl __TB_empty -f 138/59/3 134/113/3 133/97/3 139/171/3 -usemtl retro-texture-pack-v9/GRID_1A -f 140/198/4 136/98/4 135/118/4 137/197/4 -usemtl __TB_empty -f 139/15/5 133/101/5 136/104/5 140/11/5 -usemtl __TB_empty -f 140/108/6 137/122/6 138/119/6 139/107/6 - -o entity0_brush19 -usemtl retro-texture-pack-v9/LIGHT_1A -f 141/206/1 142/207/1 143/208/1 144/209/1 -usemtl retro-texture-pack-v9/CRATE_1L -f 145/210/2 143/211/2 142/2/2 146/83/2 -usemtl __TB_empty -f 146/212/3 142/7/3 141/172/3 147/213/3 -usemtl __TB_empty -f 148/213/4 144/172/4 143/7/4 145/212/4 -usemtl retro-texture-pack-v9/CRATE_1L -f 147/83/5 141/2/5 144/211/5 148/210/5 -usemtl __TB_empty -f 148/214/6 145/172/6 146/3/6 147/57/6 - -o entity0_brush20 -usemtl retro-texture-pack-v9/CRATE_1H -f 149/215/9 150/216/9 151/217/9 152/218/9 -usemtl retro-texture-pack-v9/CRATE_1H -f 153/219/10 151/220/10 150/221/10 154/222/10 -usemtl retro-texture-pack-v9/CRATE_1H -f 155/223/3 154/224/3 150/225/3 149/114/3 -usemtl retro-texture-pack-v9/CRATE_1H -f 152/226/4 151/227/4 153/228/4 156/229/4 -usemtl retro-texture-pack-v9/CRATE_1H -f 156/230/11 153/231/11 154/232/11 155/233/11 -usemtl retro-texture-pack-v9/CRATE_1H -f 149/234/12 152/235/12 156/236/12 155/237/12 - diff --git a/examples/test_game/levels/untitled.mtl b/examples/test_game/levels/untitled.mtl deleted file mode 100644 index f24203b..0000000 --- a/examples/test_game/levels/untitled.mtl +++ /dev/null @@ -1,123 +0,0 @@ -# Blender MTL File: 'None' -# Material Count: 11 - -newmtl __TB_empty -Ns 0.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.000000 0.000000 0.000000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 1 -map_Kd C:\\Users\\z002f2au\\Downloads\\TrenchBroom-Win64-v2023.1-Release\\defaults\\assets\\textures\\__TB_empty.png - -newmtl retro-texture-pack-v9/CONCRETE_2C -Ns 0.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.000000 0.000000 0.000000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 1 -map_Kd C:\\UserData\\z002f2au\\Documents\\repos\\rayjs\\examples\\test_game\\textures\\retro-texture-pack-v9\\CONCRETE_2C.png - -newmtl retro-texture-pack-v9/CRATE_1H -Ns 0.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.000000 0.000000 0.000000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 1 -map_Kd C:\\UserData\\z002f2au\\Documents\\repos\\rayjs\\examples\\test_game\\textures\\retro-texture-pack-v9\\CRATE_1H.png - -newmtl retro-texture-pack-v9/CRATE_1L -Ns 0.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.000000 0.000000 0.000000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 1 -map_Kd C:\\UserData\\z002f2au\\Documents\\repos\\rayjs\\examples\\test_game\\textures\\retro-texture-pack-v9\\CRATE_1L.png - -newmtl retro-texture-pack-v9/CRATE_1M -Ns 0.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.000000 0.000000 0.000000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 1 -map_Kd C:\\UserData\\z002f2au\\Documents\\repos\\rayjs\\examples\\test_game\\textures\\retro-texture-pack-v9\\CRATE_1M.png - -newmtl retro-texture-pack-v9/DOOR_2C -Ns 0.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.000000 0.000000 0.000000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 1 -map_Kd C:\\UserData\\z002f2au\\Documents\\repos\\rayjs\\examples\\test_game\\textures\\retro-texture-pack-v9\\DOOR_2C.png - -newmtl retro-texture-pack-v9/GRID_1A -Ns 0.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.000000 0.000000 0.000000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 1 -map_Kd C:\\UserData\\z002f2au\\Documents\\repos\\rayjs\\examples\\test_game\\textures\\retro-texture-pack-v9\\GRID_1A.png - -newmtl retro-texture-pack-v9/LIGHT_1A -Ns 0.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.000000 0.000000 0.000000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 1 -map_Kd C:\\UserData\\z002f2au\\Documents\\repos\\rayjs\\examples\\test_game\\textures\\retro-texture-pack-v9\\LIGHT_1A.png - -newmtl retro-texture-pack-v9/SAND_1A -Ns 0.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.000000 0.000000 0.000000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 1 -map_Kd C:\\UserData\\z002f2au\\Documents\\repos\\rayjs\\examples\\test_game\\textures\\retro-texture-pack-v9\\SAND_1A.png - -newmtl retro-texture-pack-v9/STUCCO_1A -Ns 0.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.000000 0.000000 0.000000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 1 -map_Kd C:\\UserData\\z002f2au\\Documents\\repos\\rayjs\\examples\\test_game\\textures\\retro-texture-pack-v9\\STUCCO_1A.png - -newmtl retro-texture-pack-v9/TILE_2D -Ns 0.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.000000 0.000000 0.000000 -Ke 0.000000 0.000000 0.000000 -Ni 1.450000 -d 1.000000 -illum 1 -map_Kd C:\\UserData\\z002f2au\\Documents\\repos\\rayjs\\examples\\test_game\\textures\\retro-texture-pack-v9\\TILE_2D.png diff --git a/examples/test_game/levels/untitled.obj b/examples/test_game/levels/untitled.obj deleted file mode 100644 index 1cf96c3..0000000 --- a/examples/test_game/levels/untitled.obj +++ /dev/null @@ -1,1230 +0,0 @@ -# Blender v2.93.4 OBJ File: '' -# www.blender.org -mtllib untitled.mtl -o entity0_brush0 -v -80.000000 32.000027 -160.000000 -v -80.000000 32.000000 0.000005 -v -80.000000 64.000000 0.000010 -v -80.000000 64.000023 -159.999985 -v 0.000000 64.000000 0.000010 -v 0.000000 32.000000 0.000005 -v 0.000000 32.000027 -160.000000 -v 0.000000 64.000023 -159.999985 -vt 2.500000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 1.000000 -vt 2.500000 1.000000 -vt 0.000000 1.000000 -vt -1.250000 1.000000 -vt -1.250000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.500000 -vt -1.250000 0.500000 -vt -1.250000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 -0.000000 -vt -2.500000 -0.000000 -vt -2.500000 5.000000 -vt 0.000000 5.000000 -vt 5.000000 2.000000 -vt 0.000000 2.000000 -vt 0.000000 1.000000 -vt 5.000000 1.000000 -vt 0.000000 2.500000 -vt -1.250000 2.500000 -vt -1.250000 -0.000000 -vt 0.000000 -0.000000 -vn -1.0000 -0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/STUCCO_1A -s 1 -f 1/1/1 2/2/1 3/3/1 4/4/1 -f 5/5/2 3/6/2 2/7/2 6/8/2 -f 7/9/3 1/10/3 4/11/3 8/12/3 -usemtl __TB_empty -f 6/13/4 2/14/4 1/15/4 7/16/4 -f 8/17/5 5/18/5 6/19/5 7/20/5 -usemtl retro-texture-pack-v9/TILE_2D -f 8/21/6 4/22/6 3/23/6 5/24/6 -o entity0_brush1 -v -176.000000 32.000019 -119.999992 -v -176.000000 32.000004 -31.999994 -v -176.000000 40.000004 -31.999994 -v -176.000000 40.000019 -119.999992 -v -152.000000 40.000004 -31.999994 -v -152.000000 32.000004 -31.999994 -v -152.000000 32.000019 -119.999992 -v -152.000000 40.000019 -119.999992 -vt 1.875000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.625000 -vt 1.875000 0.625000 -vt -2.375000 0.625000 -vt -2.750000 0.625000 -vt -2.750000 0.500000 -vt -2.375000 0.500000 -vt -2.375000 0.500000 -vt -2.750000 0.500000 -vt -2.750000 0.625000 -vt -2.375000 0.625000 -vt -4.750000 1.000000 -vt -5.500000 1.000000 -vt -5.500000 3.750000 -vt -4.750000 3.750000 -vt 3.750000 1.250000 -vt 1.000000 1.250000 -vt 1.000000 1.000000 -vt 3.750000 1.000000 -vt -2.375000 1.875000 -vt -2.750000 1.875000 -vt -2.750000 0.500000 -vt -2.375000 0.500000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/STUCCO_1A -s 1 -f 9/25/7 10/26/7 11/27/7 12/28/7 -f 13/29/8 11/30/8 10/31/8 14/32/8 -f 15/33/9 9/34/9 12/35/9 16/36/9 -usemtl __TB_empty -f 14/37/10 10/38/10 9/39/10 15/40/10 -f 16/41/11 13/42/11 14/43/11 15/44/11 -usemtl retro-texture-pack-v9/TILE_2D -f 16/45/12 12/46/12 11/47/12 13/48/12 -o entity0_brush2 -v -136.000000 32.000023 -144.000000 -v -136.000000 32.000015 -103.999992 -v -136.000000 48.000015 -103.999992 -v -136.000000 48.000023 -143.999985 -v -80.000000 48.000015 -103.999992 -v -80.000000 32.000015 -103.999992 -v -80.000000 32.000023 -144.000000 -v -80.000000 48.000023 -143.999985 -vt 2.250000 0.500000 -vt 1.625000 0.500000 -vt 1.625000 0.750000 -vt 2.250000 0.750000 -vt -1.250000 0.500000 -vt -2.125000 0.500000 -vt -2.125000 0.750000 -vt -1.250000 0.750000 -vt -2.500000 1.500000 -vt -4.250000 1.500000 -vt -4.250000 1.000000 -vt -2.500000 1.000000 -vt -2.500000 3.250000 -vt -4.250000 3.250000 -vt -4.250000 4.500000 -vt -2.500000 4.500000 -vt 4.500000 1.500000 -vt 3.250000 1.500000 -vt 3.250000 1.000000 -vt 4.500000 1.000000 -vt -1.250000 2.250000 -vt -2.125000 2.250000 -vt -2.125000 1.625000 -vt -1.250000 1.625000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/STUCCO_1A -s 1 -f 17/49/13 18/50/13 19/51/13 20/52/13 -f 23/53/14 17/54/14 20/55/14 24/56/14 -usemtl __TB_empty -f 21/57/15 19/58/15 18/59/15 22/60/15 -f 22/61/16 18/62/16 17/63/16 23/64/16 -f 24/65/17 21/66/17 22/67/17 23/68/17 -usemtl retro-texture-pack-v9/TILE_2D -f 24/69/18 20/70/18 19/71/18 21/72/18 -o entity0_brush3 -v -136.000000 32.000008 -39.999996 -v -136.000000 32.000000 0.000005 -v -136.000000 48.000000 0.000008 -v -136.000000 48.000008 -39.999992 -v -80.000000 48.000000 0.000008 -v -80.000000 32.000000 0.000005 -v -80.000000 32.000008 -39.999996 -v -80.000000 48.000008 -39.999992 -vt 0.625000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.750000 -vt 0.625000 0.750000 -vt -1.250000 0.750000 -vt -2.125000 0.750000 -vt -2.125000 0.500000 -vt -1.250000 0.500000 -vt -2.500000 -0.000000 -vt -4.250000 -0.000000 -vt -4.250000 1.250000 -vt -2.500000 1.250000 -vt -2.500000 1.000000 -vt -4.250000 1.000000 -vt -4.250000 1.500000 -vt -2.500000 1.500000 -vt 1.250000 1.500000 -vt 0.000000 1.500000 -vt 0.000000 1.000000 -vt 1.250000 1.000000 -vt -1.250000 0.625000 -vt -2.125000 0.625000 -vt -2.125000 -0.000000 -vt -1.250000 -0.000000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/STUCCO_1A -s 1 -f 25/73/19 26/74/19 27/75/19 28/76/19 -f 29/77/20 27/78/20 26/79/20 30/80/20 -usemtl __TB_empty -f 30/81/21 26/82/21 25/83/21 31/84/21 -f 31/85/22 25/86/22 28/87/22 32/88/22 -f 32/89/23 29/90/23 30/91/23 31/92/23 -usemtl retro-texture-pack-v9/TILE_2D -f 32/93/24 28/94/24 27/95/24 29/96/24 -o entity0_brush4 -v -152.000000 32.000015 -103.999992 -v -152.000000 32.000008 -39.999996 -v -152.000000 56.000008 -39.999992 -v -152.000000 56.000015 -103.999992 -v -80.000000 56.000008 -39.999992 -v -80.000000 32.000008 -39.999996 -v -80.000000 32.000015 -103.999992 -v -80.000000 56.000015 -103.999992 -vt 1.625000 0.500000 -vt 0.625000 0.500000 -vt 0.625000 0.875000 -vt 1.625000 0.875000 -vt -1.250000 0.875000 -vt -2.375000 0.875000 -vt -2.375000 0.500000 -vt -1.250000 0.500000 -vt -1.250000 0.500000 -vt -2.375000 0.500000 -vt -2.375000 0.875000 -vt -1.250000 0.875000 -vt -2.500000 1.250000 -vt -4.750000 1.250000 -vt -4.750000 3.250000 -vt -2.500000 3.250000 -vt 3.250000 1.750000 -vt 1.250000 1.750000 -vt 1.250000 1.000000 -vt 3.250000 1.000000 -vt -1.250000 1.625000 -vt -2.375000 1.625000 -vt -2.375000 0.625000 -vt -1.250000 0.625000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/STUCCO_1A -s 1 -f 33/97/25 34/98/25 35/99/25 36/100/25 -f 37/101/26 35/102/26 34/103/26 38/104/26 -f 39/105/27 33/106/27 36/107/27 40/108/27 -usemtl __TB_empty -f 38/109/28 34/110/28 33/111/28 39/112/28 -f 40/113/29 37/114/29 38/115/29 39/116/29 -usemtl retro-texture-pack-v9/TILE_2D -f 40/117/30 36/118/30 35/119/30 37/120/30 -o entity0_brush5 -v -192.000000 24.000061 -376.000000 -v -192.000000 23.999992 48.000004 -v -192.000000 31.999992 48.000004 -v -192.000000 32.000061 -376.000000 -v 16.000000 31.999992 48.000004 -v 16.000000 23.999992 48.000004 -v 16.000000 24.000061 -376.000000 -v 16.000000 32.000061 -376.000000 -vt 5.875000 0.375000 -vt -0.750000 0.375000 -vt -0.750000 0.500000 -vt 5.875000 0.500000 -vt 0.250000 0.500000 -vt -3.000000 0.500000 -vt -3.000000 0.375000 -vt 0.250000 0.375000 -vt 0.250000 -0.750000 -vt -3.000000 -0.750000 -vt -3.000000 5.875000 -vt 0.250000 5.875000 -vt 0.250000 5.875000 -vt -3.000000 5.875000 -vt -3.000000 -0.750000 -vt 0.250000 -0.750000 -vt 0.250000 0.375000 -vt -3.000000 0.375000 -vt -3.000000 0.500000 -vt 0.250000 0.500000 -vt 5.875000 0.500000 -vt -0.750000 0.500000 -vt -0.750000 0.375000 -vt 5.875000 0.375000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -usemtl retro-texture-pack-v9/SAND_1A -s 1 -f 41/121/31 42/122/31 43/123/31 44/124/31 -f 45/125/32 43/126/32 42/127/32 46/128/32 -f 46/129/33 42/130/33 41/131/33 47/132/33 -f 48/133/34 44/134/34 43/135/34 45/136/34 -f 47/137/35 41/138/35 44/139/35 48/140/35 -f 48/141/36 45/142/36 46/143/36 47/144/36 -o entity0_brush6 -v -8.000000 80.000015 -95.999985 -v -32.000000 80.000023 -119.999985 -v -32.000000 64.000023 -119.999992 -v -8.000000 64.000015 -95.999992 -v -8.000000 64.000023 -119.999992 -v -8.000000 80.000023 -119.999985 -vt 1.500000 1.250000 -vt 1.875000 1.250000 -vt 1.875000 1.000000 -vt 1.500000 1.000000 -vt -0.250000 3.000000 -vt -1.000000 3.750000 -vt -0.250000 3.750000 -vt -0.250000 2.000000 -vt -1.000000 2.000000 -vt -1.000000 2.500000 -vt -0.250000 2.500000 -vt 3.000000 2.500000 -vt 3.000000 2.000000 -vt 3.750000 2.000000 -vt 3.750000 2.500000 -vt -0.125000 1.875000 -vt -0.500000 1.875000 -vt -0.125000 1.500000 -vn -0.7071 -0.0000 0.7071 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/CRATE_1L -s 1 -f 49/145/37 50/146/37 51/147/37 52/148/37 -usemtl __TB_empty -f 52/149/38 51/150/38 53/151/38 -f 53/152/39 51/153/39 50/154/39 54/155/39 -f 49/156/40 52/157/40 53/158/40 54/159/40 -usemtl retro-texture-pack-v9/GRID_1A -f 54/160/41 50/161/41 49/162/41 -o entity0_brush7 -v -8.000000 64.000008 -47.999989 -v -32.000000 64.000008 -23.999990 -v -32.000000 80.000008 -23.999987 -v -8.000000 80.000008 -47.999989 -v -8.000000 80.000008 -23.999987 -v -8.000000 64.000008 -23.999990 -vt 0.750000 1.000000 -vt 0.375000 1.000000 -vt 0.375000 1.250000 -vt 0.750000 1.250000 -vt -0.250000 2.500000 -vt -1.000000 2.500000 -vt -1.000000 2.000000 -vt -0.250000 2.000000 -vt -0.250000 0.750000 -vt -1.000000 0.750000 -vt -0.250000 1.500000 -vt 0.750000 2.000000 -vt 1.500000 2.000000 -vt 1.500000 2.500000 -vt 0.750000 2.500000 -vt -0.125000 0.750000 -vt -0.500000 0.375000 -vt -0.125000 0.375000 -vn -0.7071 0.0000 -0.7071 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/CRATE_1L -s 1 -f 55/163/42 56/164/42 57/165/42 58/166/42 -usemtl __TB_empty -f 59/167/43 57/168/43 56/169/43 60/170/43 -f 60/171/44 56/172/44 55/173/44 -f 60/174/45 55/175/45 58/176/45 59/177/45 -usemtl retro-texture-pack-v9/GRID_1A -f 58/178/46 57/179/46 59/180/46 -o entity0_brush8 -v -152.000000 32.000008 -39.999996 -v -152.000000 32.000004 -15.999995 -v -152.000000 40.000004 -15.999993 -v -152.000000 40.000008 -39.999992 -v -136.000000 40.000004 -15.999993 -v -136.000000 32.000004 -15.999995 -v -136.000000 32.000008 -39.999996 -v -136.000000 40.000008 -39.999992 -vt 0.625000 0.500000 -vt 0.250000 0.500000 -vt 0.250000 0.625000 -vt 0.625000 0.625000 -vt -2.125000 0.625000 -vt -2.375000 0.625000 -vt -2.375000 0.500000 -vt -2.125000 0.500000 -vt -4.250000 0.500000 -vt -4.750000 0.500000 -vt -4.750000 1.250000 -vt -4.250000 1.250000 -vt -4.250000 1.000000 -vt -4.750000 1.000000 -vt -4.750000 1.250000 -vt -4.250000 1.250000 -vt 1.250000 1.250000 -vt 0.500000 1.250000 -vt 0.500000 1.000000 -vt 1.250000 1.000000 -vt -2.125000 0.625000 -vt -2.375000 0.625000 -vt -2.375000 0.250000 -vt -2.125000 0.250000 -vn -1.0000 -0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/STUCCO_1A -s 1 -f 61/181/47 62/182/47 63/183/47 64/184/47 -f 65/185/48 63/186/48 62/187/48 66/188/48 -usemtl __TB_empty -f 66/189/49 62/190/49 61/191/49 67/192/49 -f 67/193/50 61/194/50 64/195/50 68/196/50 -f 68/197/51 65/198/51 66/199/51 67/200/51 -usemtl retro-texture-pack-v9/TILE_2D -f 68/201/52 64/202/52 63/203/52 65/204/52 -o entity0_brush9 -v -152.000000 32.000019 -127.999992 -v -152.000000 32.000015 -95.999992 -v -152.000000 40.000015 -95.999992 -v -152.000000 40.000019 -127.999992 -v -136.000000 40.000015 -95.999992 -v -136.000000 32.000015 -95.999992 -v -136.000000 32.000019 -127.999992 -v -136.000000 40.000019 -127.999992 -vt 2.000000 0.500000 -vt 1.500000 0.500000 -vt 1.500000 0.625000 -vt 2.000000 0.625000 -vt -2.125000 0.500000 -vt -2.375000 0.500000 -vt -2.375000 0.625000 -vt -2.125000 0.625000 -vt -4.250000 1.250000 -vt -4.750000 1.250000 -vt -4.750000 1.000000 -vt -4.250000 1.000000 -vt -4.250000 3.000000 -vt -4.750000 3.000000 -vt -4.750000 4.000000 -vt -4.250000 4.000000 -vt 4.000000 1.250000 -vt 3.000000 1.250000 -vt 3.000000 1.000000 -vt 4.000000 1.000000 -vt -2.125000 2.000000 -vt -2.375000 2.000000 -vt -2.375000 1.500000 -vt -2.125000 1.500000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/STUCCO_1A -s 1 -f 69/205/53 70/206/53 71/207/53 72/208/53 -f 75/209/54 69/210/54 72/211/54 76/212/54 -usemtl __TB_empty -f 73/213/55 71/214/55 70/215/55 74/216/55 -f 74/217/56 70/218/56 69/219/56 75/220/56 -f 76/221/57 73/222/57 74/223/57 75/224/57 -usemtl retro-texture-pack-v9/TILE_2D -f 76/225/58 72/226/58 71/227/58 73/228/58 -o entity0_brush10 -v -8.000000 160.000015 -95.999977 -v -32.000000 160.000015 -119.999977 -v -32.000000 144.000015 -119.999977 -v -8.000000 144.000015 -95.999977 -v -8.000000 144.000015 -119.999977 -v -8.000000 160.000015 -119.999977 -vt 1.500000 2.500000 -vt 1.875000 2.500000 -vt 1.875000 2.250000 -vt 1.500000 2.250000 -vt -0.125000 1.500000 -vt -0.500000 1.875000 -vt -0.125000 1.875000 -vt -0.250000 3.750000 -vt -1.000000 3.750000 -vt -0.250000 3.000000 -vt -0.250000 4.500000 -vt -1.000000 4.500000 -vt -1.000000 5.000000 -vt -0.250000 5.000000 -vt 3.000000 5.000000 -vt 3.000000 4.500000 -vt 3.750000 4.500000 -vt 3.750000 5.000000 -vn -0.7071 0.0000 0.7071 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -usemtl retro-texture-pack-v9/CRATE_1L -s 1 -f 77/229/59 78/230/59 79/231/59 80/232/59 -usemtl retro-texture-pack-v9/GRID_1A -f 80/233/60 79/234/60 81/235/60 -usemtl __TB_empty -f 82/236/61 78/237/61 77/238/61 -f 81/239/62 79/240/62 78/241/62 82/242/62 -f 77/243/63 80/244/63 81/245/63 82/246/63 -o entity0_brush11 -v -8.000000 144.000015 -47.999977 -v -32.000000 144.000000 -23.999977 -v -32.000000 160.000000 -23.999973 -v -8.000000 160.000015 -47.999973 -v -8.000000 160.000000 -23.999973 -v -8.000000 144.000000 -23.999977 -vt 0.750000 2.250000 -vt 0.375000 2.250000 -vt 0.375000 2.500000 -vt 0.750000 2.500000 -vt -0.250000 5.000000 -vt -1.000000 5.000000 -vt -1.000000 4.500000 -vt -0.250000 4.500000 -vt -0.250000 1.500000 -vt -1.000000 0.750000 -vt -0.250000 0.750000 -vt 0.750000 4.500000 -vt 1.500000 4.500000 -vt 1.500000 5.000000 -vt 0.750000 5.000000 -vt -0.125000 0.375000 -vt -0.500000 0.375000 -vt -0.125000 0.750000 -vn -0.7071 0.0000 -0.7071 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -usemtl retro-texture-pack-v9/CRATE_1L -s 1 -f 83/247/64 84/248/64 85/249/64 86/250/64 -usemtl __TB_empty -f 87/251/65 85/252/65 84/253/65 88/254/65 -f 86/255/66 85/256/66 87/257/66 -f 88/258/67 83/259/67 86/260/67 87/261/67 -usemtl retro-texture-pack-v9/GRID_1A -f 88/262/68 84/263/68 83/264/68 -o entity0_brush12 -v -32.000000 64.000008 -23.999990 -v -32.000000 64.000000 0.000010 -v -32.000000 160.000000 0.000026 -v -32.000000 160.000000 -23.999973 -v 0.000000 160.000000 0.000026 -v 0.000000 64.000000 0.000010 -v 0.000000 64.000008 -23.999990 -v 0.000000 160.000000 -23.999973 -vt 0.375000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 2.500000 -vt 0.375000 2.500000 -vt 0.000000 2.500000 -vt -0.500000 2.500000 -vt -0.500000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 -0.000000 -vt -1.000000 -0.000000 -vt -1.000000 0.750000 -vt 0.000000 0.750000 -vt 0.000000 0.750000 -vt -1.000000 0.750000 -vt -1.000000 -0.000000 -vt 0.000000 -0.000000 -vt 0.750000 5.000000 -vt 0.000000 5.000000 -vt 0.000000 2.000000 -vt 0.750000 2.000000 -vt 0.000000 1.000000 -vt -0.500000 1.000000 -vt -0.500000 2.500000 -vt 0.000000 2.500000 -vn -1.0000 -0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -usemtl retro-texture-pack-v9/CRATE_1M -s 1 -f 89/265/69 90/266/69 91/267/69 92/268/69 -usemtl retro-texture-pack-v9/CRATE_1L -f 93/269/70 91/270/70 90/271/70 94/272/70 -usemtl __TB_empty -f 94/273/71 90/274/71 89/275/71 95/276/71 -f 96/277/72 92/278/72 91/279/72 93/280/72 -f 96/281/73 93/282/73 94/283/73 95/284/73 -usemtl retro-texture-pack-v9/GRID_1A -f 95/285/74 89/286/74 92/287/74 96/288/74 -o entity0_brush13 -v -32.000000 64.000023 -143.999985 -v -32.000000 64.000023 -119.999992 -v -32.000000 160.000015 -119.999977 -v -32.000000 160.000031 -143.999969 -v 0.000000 160.000015 -119.999977 -v 0.000000 64.000023 -119.999992 -v 0.000000 64.000023 -143.999985 -v 0.000000 160.000031 -143.999969 -vt 3.000000 1.000000 -vt 2.625000 1.000000 -vt 2.625000 2.500000 -vt 3.000000 2.500000 -vt 0.000000 2.500000 -vt -0.500000 2.500000 -vt -0.500000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 3.750000 -vt -1.000000 3.750000 -vt -1.000000 4.500000 -vt 0.000000 4.500000 -vt 0.000000 4.500000 -vt -1.000000 4.500000 -vt -1.000000 3.750000 -vt 0.000000 3.750000 -vt 4.500000 5.000000 -vt 3.750000 5.000000 -vt 3.750000 2.000000 -vt 4.500000 2.000000 -vt 0.000000 1.000000 -vt -0.500000 1.000000 -vt -0.500000 2.500000 -vt 0.000000 2.500000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -usemtl retro-texture-pack-v9/CRATE_1M -s 1 -f 97/289/75 98/290/75 99/291/75 100/292/75 -usemtl retro-texture-pack-v9/GRID_1A -f 101/293/76 99/294/76 98/295/76 102/296/76 -usemtl __TB_empty -f 102/297/77 98/298/77 97/299/77 103/300/77 -f 104/301/78 100/302/78 99/303/78 101/304/78 -f 104/305/79 101/306/79 102/307/79 103/308/79 -usemtl retro-texture-pack-v9/CRATE_1L -f 103/309/80 97/310/80 100/311/80 104/312/80 -o entity0_brush14 -v -8.000000 120.000015 -95.999977 -v -32.000000 120.000023 -119.999977 -v -32.000000 104.000023 -119.999985 -v -8.000000 104.000015 -95.999985 -v -8.000000 104.000023 -119.999985 -v -8.000000 120.000023 -119.999977 -vt 1.500000 1.875000 -vt 1.875000 1.875000 -vt 1.875000 1.625000 -vt 1.500000 1.625000 -vt -0.125000 1.500000 -vt -0.500000 1.875000 -vt -0.125000 1.875000 -vt -0.125000 1.875000 -vt -0.500000 1.875000 -vt -0.125000 1.500000 -vt -0.250000 3.250000 -vt -1.000000 3.250000 -vt -1.000000 3.750000 -vt -0.250000 3.750000 -vt 3.000000 3.750000 -vt 3.000000 3.250000 -vt 3.750000 3.250000 -vt 3.750000 3.750000 -vn -0.7071 -0.0000 0.7071 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -usemtl retro-texture-pack-v9/CRATE_1L -s 1 -f 105/313/81 106/314/81 107/315/81 108/316/81 -usemtl retro-texture-pack-v9/GRID_1A -f 108/317/82 107/318/82 109/319/82 -f 110/320/83 106/321/83 105/322/83 -usemtl __TB_empty -f 109/323/84 107/324/84 106/325/84 110/326/84 -f 105/327/85 108/328/85 109/329/85 110/330/85 -o entity0_brush15 -v -8.000000 104.000008 -47.999985 -v -32.000000 104.000008 -23.999983 -v -32.000000 120.000008 -23.999981 -v -8.000000 120.000008 -47.999981 -v -8.000000 120.000008 -23.999981 -v -8.000000 104.000008 -23.999983 -vt 0.750000 1.625000 -vt 0.375000 1.625000 -vt 0.375000 1.875000 -vt 0.750000 1.875000 -vt -0.250000 3.750000 -vt -1.000000 3.750000 -vt -1.000000 3.250000 -vt -0.250000 3.250000 -vt 0.750000 3.250000 -vt 1.500000 3.250000 -vt 1.500000 3.750000 -vt 0.750000 3.750000 -vt -0.125000 0.375000 -vt -0.500000 0.375000 -vt -0.125000 0.750000 -vt -0.125000 0.750000 -vt -0.500000 0.375000 -vt -0.125000 0.375000 -vn -0.7071 0.0000 -0.7071 -vn 0.0000 -0.0000 1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/CRATE_1L -s 1 -f 111/331/86 112/332/86 113/333/86 114/334/86 -usemtl __TB_empty -f 115/335/87 113/336/87 112/337/87 116/338/87 -f 116/339/88 111/340/88 114/341/88 115/342/88 -usemtl retro-texture-pack-v9/GRID_1A -f 116/343/89 112/344/89 111/345/89 -f 114/346/90 113/347/90 115/348/90 -o entity0_brush16 -v -8.000000 144.000015 -119.999977 -v -8.000000 144.000000 -23.999977 -v -8.000000 160.000000 -23.999973 -v -8.000000 160.000015 -119.999977 -v 0.000000 160.000000 -23.999973 -v 0.000000 144.000000 -23.999977 -v 0.000000 144.000015 -119.999977 -v 0.000000 160.000015 -119.999977 -vt 2.250000 2.359375 -vt 0.750000 2.359375 -vt 0.750000 2.609375 -vt 2.250000 2.609375 -vt 0.000000 5.000000 -vt -0.250000 5.000000 -vt -0.250000 4.500000 -vt 0.000000 4.500000 -vt 0.000000 3.750000 -vt -0.250000 3.750000 -vt -0.250000 0.750000 -vt 0.000000 0.750000 -vt 0.000000 4.500000 -vt -0.250000 4.500000 -vt -0.250000 5.000000 -vt 0.000000 5.000000 -vt 3.750000 5.000000 -vt 0.750000 5.000000 -vt 0.750000 4.500000 -vt 3.750000 4.500000 -vt 0.000000 0.375000 -vt -0.125000 0.375000 -vt -0.125000 1.875000 -vt 0.000000 1.875000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 -0.0000 -usemtl retro-texture-pack-v9/CRATE_1L -s 1 -f 117/349/91 118/350/91 119/351/91 120/352/91 -usemtl __TB_empty -f 121/353/92 119/354/92 118/355/92 122/356/92 -f 124/357/93 120/358/93 119/359/93 121/360/93 -f 123/361/94 117/362/94 120/363/94 124/364/94 -f 124/365/95 121/366/95 122/367/95 123/368/95 -usemtl retro-texture-pack-v9/GRID_1A -f 122/369/96 118/370/96 117/371/96 123/372/96 -o entity0_brush17 -v -8.000000 104.000023 -119.999985 -v -8.000000 104.000008 -23.999983 -v -8.000000 120.000008 -23.999981 -v -8.000000 120.000023 -119.999977 -v 0.000000 120.000008 -23.999981 -v 0.000000 104.000008 -23.999983 -v 0.000000 104.000023 -119.999985 -v 0.000000 120.000023 -119.999977 -vt 1.250000 1.531250 -vt -0.250000 1.531250 -vt -0.250000 1.781250 -vt 1.250000 1.781250 -vt 0.000000 3.750000 -vt -0.250000 3.750000 -vt -0.250000 3.250000 -vt 0.000000 3.250000 -vt 0.000000 3.250000 -vt -0.250000 3.250000 -vt -0.250000 3.750000 -vt 0.000000 3.750000 -vt 3.750000 3.750000 -vt 0.750000 3.750000 -vt 0.750000 3.250000 -vt 3.750000 3.250000 -vt 0.000000 0.375000 -vt -0.125000 0.375000 -vt -0.125000 1.875000 -vt 0.000000 1.875000 -vt 0.000000 1.875000 -vt -0.125000 1.875000 -vt -0.125000 0.375000 -vt 0.000000 0.375000 -vn -1.0000 -0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/CRATE_1L -s 1 -f 125/373/97 126/374/97 127/375/97 128/376/97 -usemtl __TB_empty -f 129/377/98 127/378/98 126/379/98 130/380/98 -f 131/381/99 125/382/99 128/383/99 132/384/99 -f 132/385/100 129/386/100 130/387/100 131/388/100 -usemtl retro-texture-pack-v9/GRID_1A -f 130/389/101 126/390/101 125/391/101 131/392/101 -f 132/393/102 128/394/102 127/395/102 129/396/102 -o entity0_brush18 -v -8.000000 64.000023 -119.999992 -v -8.000000 64.000008 -23.999990 -v -8.000000 80.000008 -23.999987 -v -8.000000 80.000023 -119.999985 -v 0.000000 80.000008 -23.999987 -v 0.000000 64.000008 -23.999990 -v 0.000000 64.000023 -119.999992 -v 0.000000 80.000023 -119.999985 -vt 2.250000 1.000000 -vt 0.750000 1.000000 -vt 0.750000 1.250000 -vt 2.250000 1.250000 -vt 0.000000 2.500000 -vt -0.250000 2.500000 -vt -0.250000 2.000000 -vt 0.000000 2.000000 -vt 0.000000 0.750000 -vt -0.250000 0.750000 -vt -0.250000 3.750000 -vt 0.000000 3.750000 -vt 0.000000 2.000000 -vt -0.250000 2.000000 -vt -0.250000 2.500000 -vt 0.000000 2.500000 -vt 3.750000 2.500000 -vt 0.750000 2.500000 -vt 0.750000 2.000000 -vt 3.750000 2.000000 -vt 0.000000 1.875000 -vt -0.125000 1.875000 -vt -0.125000 0.375000 -vt 0.000000 0.375000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl retro-texture-pack-v9/CRATE_1L -s 1 -f 133/397/103 134/398/103 135/399/103 136/400/103 -usemtl __TB_empty -f 137/401/104 135/402/104 134/403/104 138/404/104 -f 138/405/105 134/406/105 133/407/105 139/408/105 -f 139/409/106 133/410/106 136/411/106 140/412/106 -f 140/413/107 137/414/107 138/415/107 139/416/107 -usemtl retro-texture-pack-v9/GRID_1A -f 140/417/108 136/418/108 135/419/108 137/420/108 -o entity0_brush19 -v 0.000000 32.000023 -144.000000 -v 0.000000 32.000000 0.000005 -v 0.000000 144.000000 0.000023 -v 0.000000 144.000031 -143.999969 -v 16.000000 144.000000 0.000023 -v 16.000000 32.000000 0.000005 -v 16.000000 32.000023 -144.000000 -v 16.000000 144.000031 -143.999969 -vt 1.953125 0.750000 -vt -0.296875 0.750000 -vt -0.296875 2.500000 -vt 1.953125 2.500000 -vt 0.250000 2.250000 -vt 0.000000 2.250000 -vt 0.000000 0.500000 -vt 0.250000 0.500000 -vt 0.250000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 2.250000 -vt 0.250000 2.250000 -vt 0.500000 -0.000000 -vt 0.000000 -0.000000 -vt 0.000000 4.500000 -vt 0.500000 4.500000 -vt 0.500000 4.500000 -vt 0.000000 4.500000 -vt 0.000000 -0.000000 -vt 0.500000 -0.000000 -vt 4.500000 4.500000 -vt 0.000000 4.500000 -vt 0.000000 1.000000 -vt 4.500000 1.000000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -vn 1.0000 -0.0000 0.0000 -usemtl retro-texture-pack-v9/LIGHT_1A -s 1 -f 141/421/109 142/422/109 143/423/109 144/424/109 -usemtl retro-texture-pack-v9/CRATE_1L -f 145/425/110 143/426/110 142/427/110 146/428/110 -f 147/429/111 141/430/111 144/431/111 148/432/111 -usemtl __TB_empty -f 146/433/112 142/434/112 141/435/112 147/436/112 -f 148/437/113 144/438/113 143/439/113 145/440/113 -f 148/441/114 145/442/114 146/443/114 147/444/114 -o entity0_brush20 -v -48.000000 64.000015 -102.627411 -v -70.627419 64.000015 -79.999992 -v -70.627419 96.000015 -79.999985 -v -48.000000 96.000015 -102.627403 -v -48.000000 96.000008 -57.372566 -v -48.000000 64.000008 -57.372570 -v -25.372583 64.000015 -79.999992 -v -25.372583 96.000015 -79.999985 -vt 3.999999 2.000001 -vt 3.000000 2.000001 -vt 3.000000 3.000001 -vt 3.999999 3.000001 -vt -2.000000 3.000001 -vt -3.000000 3.000001 -vt -3.000000 2.000001 -vt -2.000000 2.000001 -vt -0.500000 0.750000 -vt -0.500000 0.250000 -vt -1.000000 0.250000 -vt -1.000000 0.750000 -vt -1.968750 -3.000000 -vt -0.984375 -3.000000 -vt -0.984375 -2.000000 -vt -1.968750 -2.000000 -vt -0.250000 1.500000 -vt -0.750000 1.500000 -vt -0.750000 1.000000 -vt -0.250000 1.000000 -vt 1.937500 2.000000 -vt 1.937500 3.000001 -vt 0.968750 3.000001 -vt 0.968750 2.000000 -vn -0.7071 0.0000 -0.7071 -vn -0.7071 -0.0000 0.7071 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.7071 -0.0000 0.7071 -vn 0.7071 0.0000 -0.7071 -usemtl retro-texture-pack-v9/CRATE_1H -s 1 -f 149/445/115 150/446/115 151/447/115 152/448/115 -f 153/449/116 151/450/116 150/451/116 154/452/116 -f 155/453/117 154/454/117 150/455/117 149/456/117 -f 152/457/118 151/458/118 153/459/118 156/460/118 -f 156/461/119 153/462/119 154/463/119 155/464/119 -f 149/465/120 152/466/120 156/467/120 155/468/120 -o entity0_brush21 -v 16.000000 32.000046 -272.000000 -v 16.000000 32.000034 -208.000000 -v 16.000000 80.000031 -207.999985 -v 16.000000 96.000038 -223.999985 -v 16.000000 96.000038 -255.999985 -v 16.000000 80.000046 -272.000000 -v 32.000000 80.000031 -207.999985 -v 32.000000 32.000034 -208.000000 -v 32.000000 96.000038 -223.999985 -v 32.000000 32.000046 -272.000000 -v 32.000000 96.000038 -255.999985 -v 32.000000 80.000046 -272.000000 -vt 4.000000 1.031250 -vt 3.000000 1.031250 -vt 3.000000 1.757812 -vt 3.250000 2.000000 -vt 3.750000 2.000000 -vt 4.000000 1.757812 -vt 0.500000 1.250000 -vt 0.250000 1.250000 -vt 0.250000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 3.500000 -vt 0.250000 3.500000 -vt 0.250000 3.250000 -vt 0.500000 3.250000 -vt 0.500000 3.250000 -vt 0.250000 3.250000 -vt 0.250000 4.250000 -vt 0.500000 4.250000 -vt 0.500000 4.000000 -vt 0.250000 4.000000 -vt 0.500000 4.250000 -vt 0.250000 4.250000 -vt 0.500000 0.500000 -vt 0.250000 0.500000 -vt 0.250000 1.250000 -vt 0.500000 1.250000 -vt 3.250000 1.250000 -vt 3.250000 0.500000 -vt 4.250000 0.500000 -vt 4.250000 1.250000 -vt 4.000000 1.500000 -vt 3.500000 1.500000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 0.7071 0.7071 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.7071 -0.7071 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -usemtl retro-texture-pack-v9/DOOR_2C -s 1 -f 157/469/121 158/470/121 159/471/121 160/472/121 161/473/121 162/474/121 -f 163/475/122 159/476/122 158/477/122 164/478/122 -f 165/479/123 160/480/123 159/481/123 163/482/123 -f 164/483/124 158/484/124 157/485/124 166/486/124 -f 167/487/125 161/488/125 160/480/125 165/479/125 -f 168/489/126 162/490/126 161/488/126 167/487/126 -f 166/491/127 157/492/127 162/493/127 168/494/127 -f 163/495/128 164/496/128 166/497/128 168/498/128 167/499/128 165/500/128 -o entity0_brush22 -v 0.000000 32.000057 -352.000000 -v 0.000000 32.000046 -272.000000 -v 0.000000 144.000046 -271.999969 -v 0.000000 144.000061 -351.999969 -v 16.000000 144.000046 -271.999969 -v 16.000000 32.000046 -272.000000 -v 16.000000 32.000057 -352.000000 -v 16.000000 144.000061 -351.999969 -vt 5.500000 0.500000 -vt 4.250000 0.500000 -vt 4.250000 2.250000 -vt 5.500000 2.250000 -vt 0.250000 2.250000 -vt 0.000000 2.250000 -vt 0.000000 0.500000 -vt 0.250000 0.500000 -vt 0.250000 4.250000 -vt 0.000000 4.250000 -vt 0.000000 5.500000 -vt 0.250000 5.500000 -vt 0.500000 11.000000 -vt 0.000000 11.000000 -vt 0.000000 8.500000 -vt 0.500000 8.500000 -vt 0.500000 1.000000 -vt 0.000000 1.000000 -vt 0.000000 4.500000 -vt 0.500000 4.500000 -vt 5.500000 2.250000 -vt 4.250000 2.250000 -vt 4.250000 0.500000 -vt 5.500000 0.500000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -usemtl retro-texture-pack-v9/CONCRETE_2C -s 1 -f 169/501/129 170/502/129 171/503/129 172/504/129 -f 173/505/130 171/506/130 170/507/130 174/508/130 -f 174/509/131 170/510/131 169/511/131 175/512/131 -f 176/513/132 172/514/132 171/515/132 173/516/132 -f 175/517/133 169/518/133 172/519/133 176/520/133 -f 176/521/134 173/522/134 174/523/134 175/524/134 -o entity0_brush23 -v 0.000000 32.000034 -208.000000 -v 0.000000 32.000019 -127.999992 -v 0.000000 144.000015 -127.999977 -v 0.000000 144.000031 -207.999969 -v 16.000000 144.000015 -127.999977 -v 16.000000 32.000019 -127.999992 -v 16.000000 32.000034 -208.000000 -v 16.000000 144.000031 -207.999969 -vt 3.250000 0.500000 -vt 2.000000 0.500000 -vt 2.000000 2.250000 -vt 3.250000 2.250000 -vt 0.500000 4.500000 -vt 0.000000 4.500000 -vt 0.000000 1.000000 -vt 0.500000 1.000000 -vt 0.250000 2.000000 -vt 0.000000 2.000000 -vt 0.000000 3.250000 -vt 0.250000 3.250000 -vt 0.500000 6.500000 -vt 0.000000 6.500000 -vt 0.000000 4.000000 -vt 0.500000 4.000000 -vt 0.250000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 2.250000 -vt 0.250000 2.250000 -vt 3.250000 2.250000 -vt 2.000000 2.250000 -vt 2.000000 0.500000 -vt 3.250000 0.500000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -usemtl retro-texture-pack-v9/CONCRETE_2C -s 1 -f 177/525/135 178/526/135 179/527/135 180/528/135 -f 181/529/136 179/530/136 178/531/136 182/532/136 -f 182/533/137 178/534/137 177/535/137 183/536/137 -f 184/537/138 180/538/138 179/539/138 181/540/138 -f 183/541/139 177/542/139 180/543/139 184/544/139 -f 184/545/140 181/546/140 182/547/140 183/548/140 -o entity0_brush24 -v 0.000000 80.000046 -272.000000 -v 0.000000 144.000031 -207.999969 -v 0.000000 144.000046 -271.999969 -v 16.000000 144.000031 -207.999969 -v 16.000000 80.000046 -272.000000 -v 16.000000 144.000046 -271.999969 -vt 4.250000 1.250000 -vt 3.250000 2.250000 -vt 4.250000 2.250000 -vt 0.250000 3.250000 -vt 0.000000 3.250000 -vt 0.000000 4.250000 -vt 0.250000 4.250000 -vt 0.500000 8.500000 -vt 0.000000 8.500000 -vt 0.000000 6.500000 -vt 0.500000 6.500000 -vt 0.250000 1.250000 -vt 0.000000 1.250000 -vt 0.000000 2.250000 -vt 0.250000 2.250000 -vt 3.250000 2.250000 -vt 4.250000 1.250000 -vt 4.250000 2.250000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.7071 0.7071 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 1.0000 0.0000 0.0000 -usemtl retro-texture-pack-v9/CONCRETE_2C -s 1 -f 185/549/141 186/550/141 187/551/141 -f 188/552/142 186/553/142 185/554/142 189/555/142 -f 190/556/143 187/557/143 186/558/143 188/559/143 -f 189/560/144 185/561/144 187/562/144 190/563/144 -f 188/564/145 189/565/145 190/566/145 -o entity0_brush25 -v 0.000000 112.000038 -239.999985 -v 0.000000 80.000031 -207.999985 -v 0.000000 144.000031 -207.999969 -v 16.000000 144.000031 -207.999969 -v 16.000000 80.000031 -207.999985 -v 16.000000 112.000038 -239.999985 -vt 3.750000 1.750000 -vt 3.250000 1.250000 -vt 3.250000 2.250000 -vt 0.250000 2.250000 -vt 0.000000 2.250000 -vt 0.000000 1.250000 -vt 0.250000 1.250000 -vt 0.250000 3.250000 -vt 0.000000 3.250000 -vt 0.000000 3.750000 -vt 0.250000 3.750000 -vt 0.000000 3.250000 -vt 0.250000 3.250000 -vt 3.250000 1.250000 -vt 3.750000 1.750000 -vt 3.250000 2.250000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.0000 -0.7071 -0.7071 -vn 0.0000 0.7071 -0.7071 -vn 1.0000 0.0000 0.0000 -usemtl retro-texture-pack-v9/CONCRETE_2C -s 1 -f 191/567/146 192/568/146 193/569/146 -f 194/570/147 193/571/147 192/572/147 195/573/147 -f 195/574/148 192/575/148 191/576/148 196/577/148 -f 196/577/149 191/576/149 193/578/149 194/579/149 -f 195/580/150 196/581/150 194/582/150 -o entity0_brush26 -v 0.000000 96.000038 -255.999985 -v 0.000000 96.000038 -223.999985 -v 0.000000 112.000038 -239.999985 -v 16.000000 112.000038 -239.999985 -v 16.000000 96.000038 -223.999985 -v 16.000000 96.000038 -255.999985 -vt 4.000000 1.500000 -vt 3.500000 1.500000 -vt 3.750000 1.750000 -vt 0.250000 3.750000 -vt 0.000000 3.750000 -vt 0.000000 3.500000 -vt 0.250000 3.500000 -vt 0.000000 4.000000 -vt 0.250000 4.000000 -vt 3.500000 1.500000 -vt 4.000000 1.500000 -vt 3.750000 1.750000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 0.7071 0.7071 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 0.7071 -0.7071 -vn 1.0000 0.0000 0.0000 -usemtl retro-texture-pack-v9/CONCRETE_2C -s 1 -f 197/583/151 198/584/151 199/585/151 -f 200/586/152 199/587/152 198/588/152 201/589/152 -f 201/589/153 198/588/153 197/590/153 202/591/153 -f 202/591/154 197/590/154 199/587/154 200/586/154 -f 201/592/155 202/593/155 200/594/155 diff --git a/examples/test_game/main.js b/examples/test_game/main.js deleted file mode 100644 index 71c05c1..0000000 --- a/examples/test_game/main.js +++ /dev/null @@ -1,126 +0,0 @@ -function log(v) { traceLog(LOG_INFO, v) } - -setConfigFlags(FLAG_MSAA_4X_HINT | FLAG_WINDOW_HIGHDPI | FLAG_VSYNC_HINT); - -initWindow(1024,768,"Test"); - -const scene = {} - -let m = scene.raylib_model = loadModel("levels/test.obj"); - - -//let m = loadModel("levels/test.obj"); -// if(m.meshCount > 1){ -// traceLog(LOG_INFO, "Starting merge of "+ m.meshCount + " meshes") -// let currentMesh = getModelMesh(m, 0); -// for (let i = 1; i < m.meshCount; i++) { -// const mesh = getModelMesh(m, i) -// const merged = meshMerge(mesh, currentMesh); -// if(i > 1) unloadMesh(currentMesh) -// currentMesh = merged -// } -// unloadModel(m) -// uploadMesh(currentMesh) -// traceLog(LOG_INFO, "Mesh successfully merged") -// m = loadModelFromMesh(currentMesh) -// } - -const bbox = getModelBoundingBox(scene.raylib_model) - -scene.w = 256; -scene.h = 256; - -const img = new Image(); -const data = new Uint8ClampedArray([255,255,255]) -img.data = data.buffer -img.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8 -img.width = 1 -img.height = 1 -img.mipmaps = 1 - -const position = new Vector3( 0, bbox.min.y + ((bbox.max.y - bbox.min.y) / 2), bbox.max.z - bbox.min.z ); // Camera position -const target = new Vector3( 0.0, bbox.min.y + ((bbox.max.y - bbox.min.y) / 2), 0.0); // Camera looking at point -const up = new Vector3(0.0, 1.0, 0.0); // Camera up vector (rotation towards target) -const fovy = 45.0; // Camera field-of-view Y -const projection = CAMERA_PERSPECTIVE; // Camera mode type -scene.camera = new Camera3D(position, target, up, fovy, projection); - -// const config = getDefaultLightmapperConfig(); -// //config.backgroundColor = new Color(10,10,10); -// //config.hemisphereSize = 512; -// const mesh = getModelMesh(scene.raylib_model, 0); -// const lm = loadLightmapper(scene.w, scene.h, mesh, config); -// const lmMat = loadMaterialLightmapper(BLACK, 0); -// const light = genMeshCube(0.2,0.2,0.2); -// const lightMaterial = loadMaterialLightmapper(ORANGE, .1); - -const rt = loadRenderTexture(256,265) - - -while (!windowShouldClose()) -{ - const wm = getMouseWheelMove() - if(wm !== 0){ - const camPos = scene.camera.position; - const fac = 1 + (wm * -0.1) - scene.camera.position = vector3Multiply(camPos, new Vector3(fac, fac, fac)); - } - - if(isMouseButtonDown(MOUSE_BUTTON_LEFT)) - updateCamera(scene.camera, CAMERA_THIRD_PERSON); - - // if(lm.progress < 1.0){ - // let startTime = getTime(); - // beginLightmap(); - // while(beginLightmapFragment(lm)){ - // drawMesh(mesh, lmMat, matrixIdentity()); - // // drawMesh(light, lightMaterial, matrixTranslate(0.0,0.3,0.5)); - // // drawMesh(light, lightMaterial, matrixTranslate(0.0,0.3,-0.5)); - // //drawMesh(light, lightMaterial, matrixMultiply(matrixScale(60,60,60), matrixTranslate(0.0,150,0))); - // // drawMesh(light, lightMaterial, matrixTranslate(0.5,0.3,0)); - // // drawMesh(light, lightMaterial, matrixTranslate(-0.5,0.3,0)); - // endLightmapFragment(lm); - // // display progress every second (printf is expensive) - // let time = getTime(); - // if (getTime() - startTime > 0.03) break; - // } - // endLightmap(); - // if(lm.progress == 1.0){ - // const img = loadImageFromLightmapper(lm); - // //exportImage(img, "my_result.png"); - // const old = scene.raylib_texture; - // scene.raylib_texture = loadTextureFromImage(img); - // setTextureFilter(scene.raylib_texture, TEXTURE_FILTER_TRILINEAR); - // unloadTexture(old); - // let mat = loadMaterialDefault(); - // setMaterialTexture(mat, MATERIAL_MAP_DIFFUSE, scene.raylib_texture); - // setModelMaterial(scene.raylib_model, 0, mat); - // unloadLightmapper(lm); - // } - // } - - // beginTextureMode(rt) - // clearBackground(RED); - // drawTexture(getModelMaterial(m,1)) - // endTextureMode() - - beginDrawing(); - clearBackground(BLUE); - - beginMode3D(scene.camera); - drawModel(scene.raylib_model, new Vector3(0,0,0), 1, WHITE); - - endMode3D(); - - // if(lm.progress < 1.0){ - // drawRectangle(0,0,getScreenWidth(),20, fade(GREEN,0.5)); - // drawRectangle(0,0,getScreenWidth()*lm.progress,20, GREEN); - // } - - - endDrawing(); -} - -unloadModel(scene.raylib_model); -//unloadTexture(scene.raylib_texture); -closeWindow(); \ No newline at end of file diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_1A.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_1A.png deleted file mode 100644 index c319a01..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_1B.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_1B.png deleted file mode 100644 index e654171..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_2A.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_2A.png deleted file mode 100644 index 33ced86..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_2B.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_2B.png deleted file mode 100644 index 0082fff..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_3A.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_3A.png deleted file mode 100644 index 7fb176a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_3A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_3B.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_3B.png deleted file mode 100644 index 75551b4..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_3B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_3C.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_3C.png deleted file mode 100644 index f195269..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_3C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_3D.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_3D.png deleted file mode 100644 index dbaf6d3..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_3D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_3E.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_3E.png deleted file mode 100644 index 149f4e2..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_3E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_4A.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_4A.png deleted file mode 100644 index 020accc..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_4A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_4B.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_4B.png deleted file mode 100644 index 0a35775..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_4B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_4C.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_4C.png deleted file mode 100644 index 2946485..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_4C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_4D.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_4D.png deleted file mode 100644 index 19050ba..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_4D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/BRICK_4E.png b/examples/test_game/textures/retro-texture-pack-v9/BRICK_4E.png deleted file mode 100644 index 893e211..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/BRICK_4E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_1A.png b/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_1A.png deleted file mode 100644 index 837bed7..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_1B.png b/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_1B.png deleted file mode 100644 index ed3ec86..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_2A.png b/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_2A.png deleted file mode 100644 index 58e7508..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_2B.png b/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_2B.png deleted file mode 100644 index c2b91b7..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_2C.png b/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_2C.png deleted file mode 100644 index 9dcaeef..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_2C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_3A.png b/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_3A.png deleted file mode 100644 index 06d0794..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_3A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_3B.png b/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_3B.png deleted file mode 100644 index 68c0987..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_3B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_3C.png b/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_3C.png deleted file mode 100644 index 6b3f136..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONCRETE_3C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1A.png b/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1A.png deleted file mode 100644 index 3e55e74..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1B.png b/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1B.png deleted file mode 100644 index 4234218..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1C.png b/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1C.png deleted file mode 100644 index f555396..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1D.png b/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1D.png deleted file mode 100644 index c6d3f1e..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CONSOLE_1D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1A.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1A.png deleted file mode 100644 index 99886e8..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1B.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1B.png deleted file mode 100644 index 544d5eb..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1C.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1C.png deleted file mode 100644 index 60285f3..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1D.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1D.png deleted file mode 100644 index 839bd62..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1E.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1E.png deleted file mode 100644 index 2047f33..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1F.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1F.png deleted file mode 100644 index 4299164..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1G.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1G.png deleted file mode 100644 index 85ce9d6..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1G.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1H.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1H.png deleted file mode 100644 index beba5f6..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1H.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1I.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1I.png deleted file mode 100644 index 01c8310..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1I.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1J.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1J.png deleted file mode 100644 index 597d774..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1J.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1K.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1K.png deleted file mode 100644 index 1f9b848..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1K.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1L.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1L.png deleted file mode 100644 index 4b10f10..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1L.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1M.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1M.png deleted file mode 100644 index 8277279..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1M.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1N.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_1N.png deleted file mode 100644 index c083bb0..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_1N.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2A.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2A.png deleted file mode 100644 index eed72a4..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2B.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2B.png deleted file mode 100644 index ccd75a9..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2C.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2C.png deleted file mode 100644 index 9161395..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2D.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2D.png deleted file mode 100644 index 3f8366a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2E.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2E.png deleted file mode 100644 index dada890..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2F.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2F.png deleted file mode 100644 index 3e89644..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2G.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2G.png deleted file mode 100644 index 5a42094..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2G.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2H.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2H.png deleted file mode 100644 index b5ed21a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2H.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2I.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2I.png deleted file mode 100644 index 531ccac..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2I.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2J.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2J.png deleted file mode 100644 index c5b5159..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2J.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2K.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2K.png deleted file mode 100644 index e375863..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2K.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2L.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2L.png deleted file mode 100644 index 48d2f17..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2L.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2M.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2M.png deleted file mode 100644 index fd3cd99..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2M.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2N.png b/examples/test_game/textures/retro-texture-pack-v9/CRATE_2N.png deleted file mode 100644 index 3de5cb0..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/CRATE_2N.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DIRT_1A.png b/examples/test_game/textures/retro-texture-pack-v9/DIRT_1A.png deleted file mode 100644 index 7f093a2..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DIRT_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DIRT_1B.png b/examples/test_game/textures/retro-texture-pack-v9/DIRT_1B.png deleted file mode 100644 index e9fa4ec..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DIRT_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DIRT_1C.png b/examples/test_game/textures/retro-texture-pack-v9/DIRT_1C.png deleted file mode 100644 index 2bb0e84..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DIRT_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOORTRIM_1A.png b/examples/test_game/textures/retro-texture-pack-v9/DOORTRIM_1A.png deleted file mode 100644 index 3db97a6..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOORTRIM_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOORTRIM_1B.png b/examples/test_game/textures/retro-texture-pack-v9/DOORTRIM_1B.png deleted file mode 100644 index 7eef12e..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOORTRIM_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOORTRIM_1C.png b/examples/test_game/textures/retro-texture-pack-v9/DOORTRIM_1C.png deleted file mode 100644 index d4ae9eb..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOORTRIM_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1A.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_1A.png deleted file mode 100644 index 07069e8..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1B.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_1B.png deleted file mode 100644 index da2d102..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1C.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_1C.png deleted file mode 100644 index c057df2..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1D.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_1D.png deleted file mode 100644 index 68df89c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1E.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_1E.png deleted file mode 100644 index 97bc3f5..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1F.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_1F.png deleted file mode 100644 index 78229c8..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_1F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2A.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_2A.png deleted file mode 100644 index 1a23ec7..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2B.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_2B.png deleted file mode 100644 index 16a88b7..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2C.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_2C.png deleted file mode 100644 index 29fbf1c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2D.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_2D.png deleted file mode 100644 index 1e76d75..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2E.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_2E.png deleted file mode 100644 index a0e134c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2F.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_2F.png deleted file mode 100644 index 538d3d7..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_2F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_3A.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_3A.png deleted file mode 100644 index d995eda..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_3A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_3B.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_3B.png deleted file mode 100644 index 4e75704..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_3B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_4A.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_4A.png deleted file mode 100644 index 9f93c3c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_4A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/DOOR_4B.png b/examples/test_game/textures/retro-texture-pack-v9/DOOR_4B.png deleted file mode 100644 index d1f3165..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/DOOR_4B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FENCE_1A.png b/examples/test_game/textures/retro-texture-pack-v9/FENCE_1A.png deleted file mode 100644 index c5426d9..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FENCE_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FENCE_1B.png b/examples/test_game/textures/retro-texture-pack-v9/FENCE_1B.png deleted file mode 100644 index db264da..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FENCE_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1A.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1A.png deleted file mode 100644 index d954cb2..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1B.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1B.png deleted file mode 100644 index 89f360a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1C.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1C.png deleted file mode 100644 index 704de7e..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1D.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1D.png deleted file mode 100644 index fd2bbfb..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_1D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2A.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2A.png deleted file mode 100644 index 095c3fc..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2B.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2B.png deleted file mode 100644 index 04e7ffa..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2C.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2C.png deleted file mode 100644 index 6ddc042..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2D.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2D.png deleted file mode 100644 index 98f72b1..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2E.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2E.png deleted file mode 100644 index f3ef68c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2F.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2F.png deleted file mode 100644 index d25a5ac..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2G.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2G.png deleted file mode 100644 index 96302fa..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_2G.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_3A.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_3A.png deleted file mode 100644 index b2048a1..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_3A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_3B.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_3B.png deleted file mode 100644 index 4c7a24f..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_3B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_3C.png b/examples/test_game/textures/retro-texture-pack-v9/FLOOR_3C.png deleted file mode 100644 index 9a2967a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/FLOOR_3C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/GRASS_1A.png b/examples/test_game/textures/retro-texture-pack-v9/GRASS_1A.png deleted file mode 100644 index ed4a36b..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/GRASS_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/GRID_1A.png b/examples/test_game/textures/retro-texture-pack-v9/GRID_1A.png deleted file mode 100644 index a5bb26f..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/GRID_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/GRID_1B.png b/examples/test_game/textures/retro-texture-pack-v9/GRID_1B.png deleted file mode 100644 index 7bef1eb..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/GRID_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/GRID_1C.png b/examples/test_game/textures/retro-texture-pack-v9/GRID_1C.png deleted file mode 100644 index 3e67b0d..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/GRID_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/GRID_2A.png b/examples/test_game/textures/retro-texture-pack-v9/GRID_2A.png deleted file mode 100644 index 8becda6..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/GRID_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/GRID_2B.png b/examples/test_game/textures/retro-texture-pack-v9/GRID_2B.png deleted file mode 100644 index 91b5ac1..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/GRID_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/GRID_2C.png b/examples/test_game/textures/retro-texture-pack-v9/GRID_2C.png deleted file mode 100644 index 666d048..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/GRID_2C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/HEDGE_1A.png b/examples/test_game/textures/retro-texture-pack-v9/HEDGE_1A.png deleted file mode 100644 index ae456a5..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/HEDGE_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/HEDGE_1B.png b/examples/test_game/textures/retro-texture-pack-v9/HEDGE_1B.png deleted file mode 100644 index e436ce9..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/HEDGE_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/HEDGE_1C.png b/examples/test_game/textures/retro-texture-pack-v9/HEDGE_1C.png deleted file mode 100644 index ed8637e..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/HEDGE_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/HEDGE_2A.png b/examples/test_game/textures/retro-texture-pack-v9/HEDGE_2A.png deleted file mode 100644 index 6fb42c0..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/HEDGE_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_1A.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_1A.png deleted file mode 100644 index c77b280..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_1B.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_1B.png deleted file mode 100644 index 589f949..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_1C.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_1C.png deleted file mode 100644 index 8454059..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_2A.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_2A.png deleted file mode 100644 index e841b5d..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_2B.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_2B.png deleted file mode 100644 index a7c24ba..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_2C.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_2C.png deleted file mode 100644 index f4345a7..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_2C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_3A.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_3A.png deleted file mode 100644 index 8d8745c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_3A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_3B.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_3B.png deleted file mode 100644 index d92d444..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_3B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_4A.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_4A.png deleted file mode 100644 index bb74660..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_4A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_4B.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_4B.png deleted file mode 100644 index a1fd2b8..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_4B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_5A.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_5A.png deleted file mode 100644 index d18c5ac..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_5A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LAB_5B.png b/examples/test_game/textures/retro-texture-pack-v9/LAB_5B.png deleted file mode 100644 index 7728953..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LAB_5B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LEDGE_1A.png b/examples/test_game/textures/retro-texture-pack-v9/LEDGE_1A.png deleted file mode 100644 index 9e7798b..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LEDGE_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LIGHT_1A.png b/examples/test_game/textures/retro-texture-pack-v9/LIGHT_1A.png deleted file mode 100644 index c109ac2..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LIGHT_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LIGHT_1B.png b/examples/test_game/textures/retro-texture-pack-v9/LIGHT_1B.png deleted file mode 100644 index b9da6de..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LIGHT_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LIGHT_1C.png b/examples/test_game/textures/retro-texture-pack-v9/LIGHT_1C.png deleted file mode 100644 index 3f90a4d..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LIGHT_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LIGHT_2A.png b/examples/test_game/textures/retro-texture-pack-v9/LIGHT_2A.png deleted file mode 100644 index eef1a71..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LIGHT_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/LIGHT_2B.png b/examples/test_game/textures/retro-texture-pack-v9/LIGHT_2B.png deleted file mode 100644 index 44abcbc..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/LIGHT_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/PIPES_1A.png b/examples/test_game/textures/retro-texture-pack-v9/PIPES_1A.png deleted file mode 100644 index d940618..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/PIPES_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/PIPES_1B.png b/examples/test_game/textures/retro-texture-pack-v9/PIPES_1B.png deleted file mode 100644 index 0f3f492..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/PIPES_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/PIPES_2A.png b/examples/test_game/textures/retro-texture-pack-v9/PIPES_2A.png deleted file mode 100644 index b3ffb25..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/PIPES_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/RIVET_1A.png b/examples/test_game/textures/retro-texture-pack-v9/RIVET_1A.png deleted file mode 100644 index a0199c3..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/RIVET_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/RIVET_1B.png b/examples/test_game/textures/retro-texture-pack-v9/RIVET_1B.png deleted file mode 100644 index d0f709f..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/RIVET_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/RIVET_1C.png b/examples/test_game/textures/retro-texture-pack-v9/RIVET_1C.png deleted file mode 100644 index f4e4d47..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/RIVET_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/RIVET_2A.png b/examples/test_game/textures/retro-texture-pack-v9/RIVET_2A.png deleted file mode 100644 index 239c9b7..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/RIVET_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/RIVET_2B.png b/examples/test_game/textures/retro-texture-pack-v9/RIVET_2B.png deleted file mode 100644 index 2b07e65..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/RIVET_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/RIVET_2C.png b/examples/test_game/textures/retro-texture-pack-v9/RIVET_2C.png deleted file mode 100644 index e992f31..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/RIVET_2C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/RIVET_3A.png b/examples/test_game/textures/retro-texture-pack-v9/RIVET_3A.png deleted file mode 100644 index 45b9334..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/RIVET_3A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/RIVET_3B.png b/examples/test_game/textures/retro-texture-pack-v9/RIVET_3B.png deleted file mode 100644 index 1134fe8..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/RIVET_3B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SAND_1A.png b/examples/test_game/textures/retro-texture-pack-v9/SAND_1A.png deleted file mode 100644 index 64d2dcf..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SAND_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SAND_1B.png b/examples/test_game/textures/retro-texture-pack-v9/SAND_1B.png deleted file mode 100644 index 98cb84a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SAND_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SAND_1C.png b/examples/test_game/textures/retro-texture-pack-v9/SAND_1C.png deleted file mode 100644 index d54c6de..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SAND_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SLIME_1A.png b/examples/test_game/textures/retro-texture-pack-v9/SLIME_1A.png deleted file mode 100644 index d7e3c3d..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SLIME_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SLIME_1B.png b/examples/test_game/textures/retro-texture-pack-v9/SLIME_1B.png deleted file mode 100644 index 03b5f9c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SLIME_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STEEL_1A.png b/examples/test_game/textures/retro-texture-pack-v9/STEEL_1A.png deleted file mode 100644 index 7027749..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STEEL_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STEEL_1B.png b/examples/test_game/textures/retro-texture-pack-v9/STEEL_1B.png deleted file mode 100644 index 947ed79..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STEEL_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STEEL_2A.png b/examples/test_game/textures/retro-texture-pack-v9/STEEL_2A.png deleted file mode 100644 index db6bc57..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STEEL_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STEEL_2B.png b/examples/test_game/textures/retro-texture-pack-v9/STEEL_2B.png deleted file mode 100644 index 01c9226..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STEEL_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STEEL_3A.png b/examples/test_game/textures/retro-texture-pack-v9/STEEL_3A.png deleted file mode 100644 index b65a486..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STEEL_3A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STEP_1A.png b/examples/test_game/textures/retro-texture-pack-v9/STEP_1A.png deleted file mode 100644 index 06051fd..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STEP_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STEP_2A.png b/examples/test_game/textures/retro-texture-pack-v9/STEP_2A.png deleted file mode 100644 index 86f4cdf..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STEP_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1A.png b/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1A.png deleted file mode 100644 index 2a9b285..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1B.png b/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1B.png deleted file mode 100644 index de6097a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1C.png b/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1C.png deleted file mode 100644 index 2171f32..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1D.png b/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1D.png deleted file mode 100644 index c2dd6cd..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_1D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_2A.png b/examples/test_game/textures/retro-texture-pack-v9/STUCCO_2A.png deleted file mode 100644 index d55d245..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_2B.png b/examples/test_game/textures/retro-texture-pack-v9/STUCCO_2B.png deleted file mode 100644 index 4496865..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/STUCCO_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1A.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1A.png deleted file mode 100644 index 5a2eedd..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1B.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1B.png deleted file mode 100644 index d60ab7f..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1C.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1C.png deleted file mode 100644 index 78df59c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1D.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1D.png deleted file mode 100644 index 3431425..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_1D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2A.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2A.png deleted file mode 100644 index 734f841..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2B.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2B.png deleted file mode 100644 index 70fd50c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2C.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2C.png deleted file mode 100644 index fc17144..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2D.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2D.png deleted file mode 100644 index 17dfb6a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_2D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3A.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3A.png deleted file mode 100644 index febbca2..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3B.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3B.png deleted file mode 100644 index 487790a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3C.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3C.png deleted file mode 100644 index 0013b13..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3D.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3D.png deleted file mode 100644 index eee63e8..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_3D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4A.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4A.png deleted file mode 100644 index 091859f..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4B.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4B.png deleted file mode 100644 index 8f0f1a5..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4C.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4C.png deleted file mode 100644 index b0a0177..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4D.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4D.png deleted file mode 100644 index 5ebcb9a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_4D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5A.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5A.png deleted file mode 100644 index ac619f1..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5B.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5B.png deleted file mode 100644 index 02aeba3..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5C.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5C.png deleted file mode 100644 index 454100e..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5D.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5D.png deleted file mode 100644 index da0a85c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_5D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6A.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6A.png deleted file mode 100644 index 9d883e9..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6B.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6B.png deleted file mode 100644 index 57a9da9..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6C.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6C.png deleted file mode 100644 index a261ebe..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6D.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6D.png deleted file mode 100644 index 769fc02..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_6D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7A.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7A.png deleted file mode 100644 index 2f65552..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7B.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7B.png deleted file mode 100644 index 1d6d19c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7C.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7C.png deleted file mode 100644 index 5cb1faa..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7D.png b/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7D.png deleted file mode 100644 index 5b6acc8..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/SUPPORT_7D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_0A.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_0A.png deleted file mode 100644 index 3dbc39c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_0A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_0B.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_0B.png deleted file mode 100644 index 43a31bf..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_0B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_0C.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_0C.png deleted file mode 100644 index ef797a1..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_0C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_0D.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_0D.png deleted file mode 100644 index e5fb88f..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_0D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_0E.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_0E.png deleted file mode 100644 index 104ed2f..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_0E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_0F.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_0F.png deleted file mode 100644 index 3b04081..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_0F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_0G.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_0G.png deleted file mode 100644 index 382ea47..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_0G.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_1A.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_1A.png deleted file mode 100644 index 3cf146c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_1B.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_1B.png deleted file mode 100644 index 424175b..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_1C.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_1C.png deleted file mode 100644 index 03964c3..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_1D.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_1D.png deleted file mode 100644 index ea69e7e..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_1D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_1E.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_1E.png deleted file mode 100644 index 97c7aa7..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_1E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_1F.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_1F.png deleted file mode 100644 index cc88a67..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_1F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_2A.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_2A.png deleted file mode 100644 index 9b4ffef..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_2B.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_2B.png deleted file mode 100644 index a7f466a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_3A.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_3A.png deleted file mode 100644 index 922a548..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_3A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_3B.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_3B.png deleted file mode 100644 index 555aaa6..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_3B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_3C.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_3C.png deleted file mode 100644 index 6458fde..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_3C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_3D.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_3D.png deleted file mode 100644 index 86518c1..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_3D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_3E.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_3E.png deleted file mode 100644 index b5c944e..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_3E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_3F.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_3F.png deleted file mode 100644 index 8b1a1c0..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_3F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_3G.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_3G.png deleted file mode 100644 index d6700ad..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_3G.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_3H.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_3H.png deleted file mode 100644 index 98f6578..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_3H.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_3I.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_3I.png deleted file mode 100644 index 63e41a9..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_3I.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_3J.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_3J.png deleted file mode 100644 index 501ec77..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_3J.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_3K.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_3K.png deleted file mode 100644 index de32c55..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_3K.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_4A.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_4A.png deleted file mode 100644 index 4de1c5a..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_4A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_4B.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_4B.png deleted file mode 100644 index b9c4094..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_4B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_4C.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_4C.png deleted file mode 100644 index 66ee237..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_4C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_4D.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_4D.png deleted file mode 100644 index 4449050..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_4D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_4E.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_4E.png deleted file mode 100644 index 73af8d3..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_4E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_4F.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_4F.png deleted file mode 100644 index c67f737..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_4F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_5A.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_5A.png deleted file mode 100644 index c3d7b29..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_5A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TECH_5B.png b/examples/test_game/textures/retro-texture-pack-v9/TECH_5B.png deleted file mode 100644 index a2c433b..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TECH_5B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_1A.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_1A.png deleted file mode 100644 index 9859303..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_1B.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_1B.png deleted file mode 100644 index f68da99..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_1C.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_1C.png deleted file mode 100644 index d40ed1c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_1C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_1D.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_1D.png deleted file mode 100644 index dc7c305..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_1D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_1E.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_1E.png deleted file mode 100644 index 56790fc..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_1E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_1F.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_1F.png deleted file mode 100644 index 159b3c3..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_1F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_1G.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_1G.png deleted file mode 100644 index 3e1468d..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_1G.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_2A.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_2A.png deleted file mode 100644 index b723bc9..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_2A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_2B.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_2B.png deleted file mode 100644 index 9da4296..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_2B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_2C.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_2C.png deleted file mode 100644 index a731fb5..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_2C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_2D.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_2D.png deleted file mode 100644 index 3fe2c39..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_2D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_2E.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_2E.png deleted file mode 100644 index 37d5c37..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_2E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_2F.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_2F.png deleted file mode 100644 index 2078459..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_2F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_3A.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_3A.png deleted file mode 100644 index eceed7c..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_3A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_3B.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_3B.png deleted file mode 100644 index 2f8bffb..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_3B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_3C.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_3C.png deleted file mode 100644 index 8da2a04..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_3C.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_3D.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_3D.png deleted file mode 100644 index a44193b..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_3D.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_3E.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_3E.png deleted file mode 100644 index 24cc3eb..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_3E.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/TILE_3F.png b/examples/test_game/textures/retro-texture-pack-v9/TILE_3F.png deleted file mode 100644 index 7ce18d3..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/TILE_3F.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/VENT_1A.png b/examples/test_game/textures/retro-texture-pack-v9/VENT_1A.png deleted file mode 100644 index 9cea12d..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/VENT_1A.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/VENT_1B.png b/examples/test_game/textures/retro-texture-pack-v9/VENT_1B.png deleted file mode 100644 index 54e1f29..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/VENT_1B.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/WARN_1.png b/examples/test_game/textures/retro-texture-pack-v9/WARN_1.png deleted file mode 100644 index fd82484..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/WARN_1.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/WARN_2.png b/examples/test_game/textures/retro-texture-pack-v9/WARN_2.png deleted file mode 100644 index 32efd3f..0000000 Binary files a/examples/test_game/textures/retro-texture-pack-v9/WARN_2.png and /dev/null differ diff --git a/examples/test_game/textures/retro-texture-pack-v9/changelog.txt b/examples/test_game/textures/retro-texture-pack-v9/changelog.txt deleted file mode 100644 index f4d05dd..0000000 --- a/examples/test_game/textures/retro-texture-pack-v9/changelog.txt +++ /dev/null @@ -1,69 +0,0 @@ -# Changelog - -## v9 (5th October, 2022) - -- Added a small version of the limestone bricks, to match the red brick version. -- Added more small brick textures (red and limestone) with vines and grass. -- Added an archway cut-out version of the hedge texture. -- Added 3 dirt textures: one bare, one with stones, and one with a puddle. -- Added 3 sand textures: small pebbles, larger stones, and footsteps! -- Adjusted the colors of the grass texture. - -## v8 (31st August, 2022) - -- Updated the brick textures, increasing the spread of the bullet holes. -- Added 2 large sandstone brick textures. -- Added 2 steps textures to match the sandstone and red bricks. -- Renamed the existing step texture to ledge. -- Added 2 chain-link fence textures. -- Added 6 stucco textures, 3 of which have exposed red bricks. -- Added 3 hedge textures: sparse and dense variants, and a flowering variant. -- Added a grass texture. -- Adjusted the color of the BSOD terminal. - -## v7 (26th August, 2022) - -- Added 4 new brick textures, in 2 variants: large bricks and small bricks. - -## v6 (8th July, 2022) - -- Added 6 grid textures, with transparent versions. -- Added a brown slime textures. -- Added 6 new concrete textures, in two color variants. -- Added 2 new floor variants for both the tech lab and toxic lab themes. -- Added 2 new tech lab wall textures with air vents. -- The various support pillar textures have been split up into separate textures, rather then four compressed into each 64x64 texture. -- All of the textures have been lightened slightly. - -## v5 (5th July, 2022) - -- Added 30 new textures in a toxic waste lab theme: floors, ceiling lights, wall panels, support pillars and lights, doors, pipes, and slime. -- Added 6 new tech lab door textures for vertically opening doors. -- Added 6 new door trim textures. - -## v4 (25th June, 2022) - -- Added 4 computer panel textures, including one with a bullet hole, and one with the iconic BSOD!!! -- Added 6 door textures, in three trim variants: metal, yellow and red; with and without damage. -- Added versions of crates without pickup truck holes. -- Recolored the dark crate versions and gave them a unique design. -- Added crate tops for 64x64, 32x32, and 16x16. -- Added simplified pipes texture. -- Added 7 new tech walls, with no panel edges, ideal for making long corridors feel less repetitive. - -## v3 (23rd June, 2022) - -- Added 19 new stone tile ground textures, in three different variants: stone, mossy, and sandstone. For each variant there are two different layout patterns (square block and parquet), with various amounts of damage. The mossy version also has grass tuffs and water pools. -- Added 4 new crate textures, in smaller sizes: 32x16 and 16x16. -- Added 2 new rivets textures, for vertical strips of riveted metal, such as around doorways. -- Updated some of the crate textures to add in more details. -- Tweaked the lighting of most of the tech wall textures to soften them slightly. -- Improved the overview file, with labels to make it easier to find textures. - -## v2 (21st June, 2022) - -- Added 10 new textures, consisting of 5 different crates, in two color variants, in three different sizes: 64x64, 64x32, and 32x32. - -## v1 (28th October, 2021) - -- An initial collection of 58 textures, mostly tech facility themed. diff --git a/examples/test_game/textures/retro-texture-pack-v9/license.txt b/examples/test_game/textures/retro-texture-pack-v9/license.txt deleted file mode 100644 index bbe18ed..0000000 --- a/examples/test_game/textures/retro-texture-pack-v9/license.txt +++ /dev/null @@ -1,20 +0,0 @@ -Retro Texture Pack - - Created/distributed by Craig Smith (little-martian.dev) - Creation date: 05-10-2022 - - ------------------------------ - - License: (Creative Commons Zero, CC0) - http://creativecommons.org/publicdomain/zero/1.0/ - - This content is free to use in personal, educational and commercial projects. - - Support us by crediting Little Martian or little-martian.dev (this is not mandatory) - - ------------------------------ - - Donate: https://little-martian.itch.io/ - - Follow on Twitter for updates: - https://twitter.com/MartiansGame \ No newline at end of file diff --git a/examples/test_game/textures/retro-texture-pack-v9/readme.txt b/examples/test_game/textures/retro-texture-pack-v9/readme.txt deleted file mode 100644 index 2707dc8..0000000 --- a/examples/test_game/textures/retro-texture-pack-v9/readme.txt +++ /dev/null @@ -1,29 +0,0 @@ -# Retro Texture Pack - -Hey, thanks so much for trying out my retro-style texture pack. I started -creating these to make a retro styled FPS, inspired by games like DOOM and Quake, -but it was taking too much time away from my main project, so I decided to -release them as a free texture pack instead. - -## Contents - -There is currently a total of *235* unique textures, though there are a lot of -variants, so some of the textures are similar. - -## License - -See the LICENSE.txt file included in this asset pack for full details, but in -short you're welcome to use the texture in any non-commercial and commercial -works. You may not, however, distribute the texture pack in any format. - -## Contact - -If you encounter any problems, have any questions or have some feedback, -you can reach me here: - -- Twitter: https://twitter.com/MartiansGame -- Discord: https://discord.gg/bmwsKU6dqP -- Website: https://little-martian.dev -- Mail: craig@craigsmith.info - -Thank you! \ No newline at end of file diff --git a/examples/gen.js b/examples/texture_generator.js similarity index 94% rename from examples/gen.js rename to examples/texture_generator.js index 33ca981..1220297 100644 --- a/examples/gen.js +++ b/examples/texture_generator.js @@ -1,3 +1,6 @@ +// This is a texture generator that creates placeholder textures +// An example how to use rayjs for quick tool-scripts + initWindow(100,100,"Gen") const input = [["orange",ORANGE],["green", LIME], ["purple", PURPLE],["red", MAROON], ["lightgrey", LIGHTGRAY], ["grey", GRAY], ["blue", BLUE]] diff --git a/examples/bunnymark.js b/examples/textures/bunnymark.js similarity index 98% rename from examples/bunnymark.js rename to examples/textures/bunnymark.js index 2ffcb06..3c8a503 100644 --- a/examples/bunnymark.js +++ b/examples/textures/bunnymark.js @@ -8,7 +8,7 @@ const MAX_BATCH_ELEMENTS = 8192 initWindow(screenWidth, screenHeight, "raylib [textures] example - bunnymark"); // Load bunny texture -const texBunny = loadTexture("../assets/wabbit_alpha.png"); +const texBunny = loadTexture("resources/wabbit_alpha.png"); const bunnies = new Array(MAX_BUNNIES) diff --git a/examples/textures/resources/KAISG.ttf b/examples/textures/resources/KAISG.ttf deleted file mode 100644 index 04478b2..0000000 Binary files a/examples/textures/resources/KAISG.ttf and /dev/null differ diff --git a/examples/textures/resources/boom.wav b/examples/textures/resources/boom.wav deleted file mode 100644 index fd18137..0000000 Binary files a/examples/textures/resources/boom.wav and /dev/null differ diff --git a/examples/textures/resources/button.png b/examples/textures/resources/button.png deleted file mode 100644 index 99a383b..0000000 Binary files a/examples/textures/resources/button.png and /dev/null differ diff --git a/examples/textures/resources/buttonfx.wav b/examples/textures/resources/buttonfx.wav deleted file mode 100644 index b93b0ca..0000000 Binary files a/examples/textures/resources/buttonfx.wav and /dev/null differ diff --git a/examples/textures/resources/cat.png b/examples/textures/resources/cat.png deleted file mode 100644 index db56b9e..0000000 Binary files a/examples/textures/resources/cat.png and /dev/null differ diff --git a/examples/textures/resources/custom_jupiter_crash.png b/examples/textures/resources/custom_jupiter_crash.png deleted file mode 100644 index c89572e..0000000 Binary files a/examples/textures/resources/custom_jupiter_crash.png and /dev/null differ diff --git a/examples/textures/resources/cyberpunk_street_background.png b/examples/textures/resources/cyberpunk_street_background.png deleted file mode 100644 index 838d08a..0000000 Binary files a/examples/textures/resources/cyberpunk_street_background.png and /dev/null differ diff --git a/examples/textures/resources/cyberpunk_street_foreground.png b/examples/textures/resources/cyberpunk_street_foreground.png deleted file mode 100644 index 528b4ae..0000000 Binary files a/examples/textures/resources/cyberpunk_street_foreground.png and /dev/null differ diff --git a/examples/textures/resources/cyberpunk_street_midground.png b/examples/textures/resources/cyberpunk_street_midground.png deleted file mode 100644 index 73f24fe..0000000 Binary files a/examples/textures/resources/cyberpunk_street_midground.png and /dev/null differ diff --git a/examples/textures/resources/explosion.png b/examples/textures/resources/explosion.png deleted file mode 100644 index 6df1cf3..0000000 Binary files a/examples/textures/resources/explosion.png and /dev/null differ diff --git a/examples/textures/resources/fudesumi.png b/examples/textures/resources/fudesumi.png deleted file mode 100644 index c77c287..0000000 Binary files a/examples/textures/resources/fudesumi.png and /dev/null differ diff --git a/examples/textures/resources/fudesumi.raw b/examples/textures/resources/fudesumi.raw deleted file mode 100644 index dad6ff0..0000000 Binary files a/examples/textures/resources/fudesumi.raw and /dev/null differ diff --git a/examples/textures/resources/ninepatch_button.png b/examples/textures/resources/ninepatch_button.png deleted file mode 100644 index f10037a..0000000 Binary files a/examples/textures/resources/ninepatch_button.png and /dev/null differ diff --git a/examples/textures/resources/parrots.png b/examples/textures/resources/parrots.png deleted file mode 100644 index 9a0e7f8..0000000 Binary files a/examples/textures/resources/parrots.png and /dev/null differ diff --git a/examples/textures/resources/patterns.png b/examples/textures/resources/patterns.png deleted file mode 100644 index 58b3c37..0000000 Binary files a/examples/textures/resources/patterns.png and /dev/null differ diff --git a/examples/textures/resources/raylib_logo.png b/examples/textures/resources/raylib_logo.png deleted file mode 100644 index 15bbaa2..0000000 Binary files a/examples/textures/resources/raylib_logo.png and /dev/null differ diff --git a/examples/textures/resources/road.png b/examples/textures/resources/road.png deleted file mode 100644 index 082f4cd..0000000 Binary files a/examples/textures/resources/road.png and /dev/null differ diff --git a/examples/textures/resources/scarfy.png b/examples/textures/resources/scarfy.png deleted file mode 100644 index be3b83d..0000000 Binary files a/examples/textures/resources/scarfy.png and /dev/null differ diff --git a/examples/textures/resources/scarfy_run.gif b/examples/textures/resources/scarfy_run.gif deleted file mode 100644 index f0f712c..0000000 Binary files a/examples/textures/resources/scarfy_run.gif and /dev/null differ diff --git a/examples/textures/resources/spark_flame.png b/examples/textures/resources/spark_flame.png deleted file mode 100644 index 72cea2e..0000000 Binary files a/examples/textures/resources/spark_flame.png and /dev/null differ diff --git a/examples/textures/textures_background_scrolling.c b/examples/textures/textures_background_scrolling.c deleted file mode 100644 index 55fa211..0000000 --- a/examples/textures/textures_background_scrolling.c +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Background scrolling -* -* Example originally created with raylib 2.0, last time updated with raylib 2.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - background scrolling"); - - // NOTE: Be careful, background width must be equal or bigger than screen width - // if not, texture should be draw more than two times for scrolling effect - Texture2D background = LoadTexture("resources/cyberpunk_street_background.png"); - Texture2D midground = LoadTexture("resources/cyberpunk_street_midground.png"); - Texture2D foreground = LoadTexture("resources/cyberpunk_street_foreground.png"); - - float scrollingBack = 0.0f; - float scrollingMid = 0.0f; - float scrollingFore = 0.0f; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - scrollingBack -= 0.1f; - scrollingMid -= 0.5f; - scrollingFore -= 1.0f; - - // NOTE: Texture is scaled twice its size, so it sould be considered on scrolling - if (scrollingBack <= -background.width*2) scrollingBack = 0; - if (scrollingMid <= -midground.width*2) scrollingMid = 0; - if (scrollingFore <= -foreground.width*2) scrollingFore = 0; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(GetColor(0x052c46ff)); - - // Draw background image twice - // NOTE: Texture is scaled twice its size - DrawTextureEx(background, (Vector2){ scrollingBack, 20 }, 0.0f, 2.0f, WHITE); - DrawTextureEx(background, (Vector2){ background.width*2 + scrollingBack, 20 }, 0.0f, 2.0f, WHITE); - - // Draw midground image twice - DrawTextureEx(midground, (Vector2){ scrollingMid, 20 }, 0.0f, 2.0f, WHITE); - DrawTextureEx(midground, (Vector2){ midground.width*2 + scrollingMid, 20 }, 0.0f, 2.0f, WHITE); - - // Draw foreground image twice - DrawTextureEx(foreground, (Vector2){ scrollingFore, 70 }, 0.0f, 2.0f, WHITE); - DrawTextureEx(foreground, (Vector2){ foreground.width*2 + scrollingFore, 70 }, 0.0f, 2.0f, WHITE); - - DrawText("BACKGROUND SCROLLING & PARALLAX", 10, 10, 20, RED); - DrawText("(c) Cyberpunk Street Environment by Luis Zuno (@ansimuz)", screenWidth - 330, screenHeight - 20, 10, RAYWHITE); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(background); // Unload background texture - UnloadTexture(midground); // Unload midground texture - UnloadTexture(foreground); // Unload foreground texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_blend_modes.c b/examples/textures/textures_blend_modes.c deleted file mode 100644 index 246a98e..0000000 --- a/examples/textures/textures_blend_modes.c +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - blend modes -* -* NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM) -* -* Example originally created with raylib 3.5, last time updated with raylib 3.5 -* -* Example contributed by Karlo Licudine (@accidentalrebel) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2020-2023 Karlo Licudine (@accidentalrebel) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - blend modes"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - Image bgImage = LoadImage("resources/cyberpunk_street_background.png"); // Loaded in CPU memory (RAM) - Texture2D bgTexture = LoadTextureFromImage(bgImage); // Image converted to texture, GPU memory (VRAM) - - Image fgImage = LoadImage("resources/cyberpunk_street_foreground.png"); // Loaded in CPU memory (RAM) - Texture2D fgTexture = LoadTextureFromImage(fgImage); // Image converted to texture, GPU memory (VRAM) - - // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM - UnloadImage(bgImage); - UnloadImage(fgImage); - - const int blendCountMax = 4; - BlendMode blendMode = 0; - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - if (IsKeyPressed(KEY_SPACE)) - { - if (blendMode >= (blendCountMax - 1)) blendMode = 0; - else blendMode++; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTexture(bgTexture, screenWidth/2 - bgTexture.width/2, screenHeight/2 - bgTexture.height/2, WHITE); - - // Apply the blend mode and then draw the foreground texture - BeginBlendMode(blendMode); - DrawTexture(fgTexture, screenWidth/2 - fgTexture.width/2, screenHeight/2 - fgTexture.height/2, WHITE); - EndBlendMode(); - - // Draw the texts - DrawText("Press SPACE to change blend modes.", 310, 350, 10, GRAY); - - switch (blendMode) - { - case BLEND_ALPHA: DrawText("Current: BLEND_ALPHA", (screenWidth / 2) - 60, 370, 10, GRAY); break; - case BLEND_ADDITIVE: DrawText("Current: BLEND_ADDITIVE", (screenWidth / 2) - 60, 370, 10, GRAY); break; - case BLEND_MULTIPLIED: DrawText("Current: BLEND_MULTIPLIED", (screenWidth / 2) - 60, 370, 10, GRAY); break; - case BLEND_ADD_COLORS: DrawText("Current: BLEND_ADD_COLORS", (screenWidth / 2) - 60, 370, 10, GRAY); break; - default: break; - } - - DrawText("(c) Cyberpunk Street Environment by Luis Zuno (@ansimuz)", screenWidth - 330, screenHeight - 20, 10, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(fgTexture); // Unload foreground texture - UnloadTexture(bgTexture); // Unload background texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/textures/textures_bunnymark.c b/examples/textures/textures_bunnymark.c deleted file mode 100644 index ede3036..0000000 --- a/examples/textures/textures_bunnymark.c +++ /dev/null @@ -1,125 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Bunnymark -* -* Example originally created with raylib 1.6, last time updated with raylib 2.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include // Required for: malloc(), free() - -#define MAX_BUNNIES 50000 // 50K bunnies limit - -// This is the maximum amount of elements (quads) per batch -// NOTE: This value is defined in [rlgl] module and can be changed there -#define MAX_BATCH_ELEMENTS 8192 - -typedef struct Bunny { - Vector2 position; - Vector2 speed; - Color color; -} Bunny; - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - bunnymark"); - - // Load bunny texture - Texture2D texBunny = LoadTexture("resources/wabbit_alpha.png"); - - Bunny *bunnies = (Bunny *)malloc(MAX_BUNNIES*sizeof(Bunny)); // Bunnies array - - int bunniesCount = 0; // Bunnies counter - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) - { - // Create more bunnies - for (int i = 0; i < 100; i++) - { - if (bunniesCount < MAX_BUNNIES) - { - bunnies[bunniesCount].position = GetMousePosition(); - bunnies[bunniesCount].speed.x = (float)GetRandomValue(-250, 250)/60.0f; - bunnies[bunniesCount].speed.y = (float)GetRandomValue(-250, 250)/60.0f; - bunnies[bunniesCount].color = (Color){ GetRandomValue(50, 240), - GetRandomValue(80, 240), - GetRandomValue(100, 240), 255 }; - bunniesCount++; - } - } - } - - // Update bunnies - for (int i = 0; i < bunniesCount; i++) - { - bunnies[i].position.x += bunnies[i].speed.x; - bunnies[i].position.y += bunnies[i].speed.y; - - if (((bunnies[i].position.x + texBunny.width/2) > GetScreenWidth()) || - ((bunnies[i].position.x + texBunny.width/2) < 0)) bunnies[i].speed.x *= -1; - if (((bunnies[i].position.y + texBunny.height/2) > GetScreenHeight()) || - ((bunnies[i].position.y + texBunny.height/2 - 40) < 0)) bunnies[i].speed.y *= -1; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - for (int i = 0; i < bunniesCount; i++) - { - // NOTE: When internal batch buffer limit is reached (MAX_BATCH_ELEMENTS), - // a draw call is launched and buffer starts being filled again; - // before issuing a draw call, updated vertex data from internal CPU buffer is send to GPU... - // Process of sending data is costly and it could happen that GPU data has not been completely - // processed for drawing while new data is tried to be sent (updating current in-use buffers) - // it could generates a stall and consequently a frame drop, limiting the number of drawn bunnies - DrawTexture(texBunny, (int)bunnies[i].position.x, (int)bunnies[i].position.y, bunnies[i].color); - } - - DrawRectangle(0, 0, screenWidth, 40, BLACK); - DrawText(TextFormat("bunnies: %i", bunniesCount), 120, 10, 20, GREEN); - DrawText(TextFormat("batched draw calls: %i", 1 + bunniesCount/MAX_BATCH_ELEMENTS), 320, 10, 20, MAROON); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - free(bunnies); // Unload bunnies data array - - UnloadTexture(texBunny); // Unload bunny texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/textures/textures_draw_tiled.c b/examples/textures/textures_draw_tiled.c deleted file mode 100644 index 34fe82c..0000000 --- a/examples/textures/textures_draw_tiled.c +++ /dev/null @@ -1,256 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Draw part of the texture tiled -* -* Example originally created with raylib 3.0, last time updated with raylib 4.2 -* -* Example contributed by Vlad Adrian (@demizdor) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2020-2023 Vlad Adrian (@demizdor) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define SIZEOF(A) (sizeof(A)/sizeof(A[0])) -#define OPT_WIDTH 220 // Max width for the options container -#define MARGIN_SIZE 8 // Size for the margins -#define COLOR_SIZE 16 // Size of the color select buttons - -// Draw part of a texture (defined by a rectangle) with rotation and scale tiled into dest. -void DrawTextureTiled(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, float scale, Color tint); - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - SetConfigFlags(FLAG_WINDOW_RESIZABLE); // Make the window resizable - InitWindow(screenWidth, screenHeight, "raylib [textures] example - Draw part of a texture tiled"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - Texture texPattern = LoadTexture("resources/patterns.png"); - SetTextureFilter(texPattern, TEXTURE_FILTER_TRILINEAR); // Makes the texture smoother when upscaled - - // Coordinates for all patterns inside the texture - const Rectangle recPattern[] = { - (Rectangle){ 3, 3, 66, 66 }, - (Rectangle){ 75, 3, 100, 100 }, - (Rectangle){ 3, 75, 66, 66 }, - (Rectangle){ 7, 156, 50, 50 }, - (Rectangle){ 85, 106, 90, 45 }, - (Rectangle){ 75, 154, 100, 60} - }; - - // Setup colors - const Color colors[] = { BLACK, MAROON, ORANGE, BLUE, PURPLE, BEIGE, LIME, RED, DARKGRAY, SKYBLUE }; - enum { MAX_COLORS = SIZEOF(colors) }; - Rectangle colorRec[MAX_COLORS] = { 0 }; - - // Calculate rectangle for each color - for (int i = 0, x = 0, y = 0; i < MAX_COLORS; i++) - { - colorRec[i].x = 2.0f + MARGIN_SIZE + x; - colorRec[i].y = 22.0f + 256.0f + MARGIN_SIZE + y; - colorRec[i].width = COLOR_SIZE*2.0f; - colorRec[i].height = (float)COLOR_SIZE; - - if (i == (MAX_COLORS/2 - 1)) - { - x = 0; - y += COLOR_SIZE + MARGIN_SIZE; - } - else x += (COLOR_SIZE*2 + MARGIN_SIZE); - } - - int activePattern = 0, activeCol = 0; - float scale = 1.0f, rotation = 0.0f; - - SetTargetFPS(60); - //--------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // Handle mouse - if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) - { - const Vector2 mouse = GetMousePosition(); - - // Check which pattern was clicked and set it as the active pattern - for (int i = 0; i < SIZEOF(recPattern); i++) - { - if (CheckCollisionPointRec(mouse, (Rectangle){ 2 + MARGIN_SIZE + recPattern[i].x, 40 + MARGIN_SIZE + recPattern[i].y, recPattern[i].width, recPattern[i].height })) - { - activePattern = i; - break; - } - } - - // Check to see which color was clicked and set it as the active color - for (int i = 0; i < MAX_COLORS; ++i) - { - if (CheckCollisionPointRec(mouse, colorRec[i])) - { - activeCol = i; - break; - } - } - } - - // Handle keys - - // Change scale - if (IsKeyPressed(KEY_UP)) scale += 0.25f; - if (IsKeyPressed(KEY_DOWN)) scale -= 0.25f; - if (scale > 10.0f) scale = 10.0f; - else if ( scale <= 0.0f) scale = 0.25f; - - // Change rotation - if (IsKeyPressed(KEY_LEFT)) rotation -= 25.0f; - if (IsKeyPressed(KEY_RIGHT)) rotation += 25.0f; - - // Reset - if (IsKeyPressed(KEY_SPACE)) { rotation = 0.0f; scale = 1.0f; } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - ClearBackground(RAYWHITE); - - // Draw the tiled area - DrawTextureTiled(texPattern, recPattern[activePattern], (Rectangle){(float)OPT_WIDTH+MARGIN_SIZE, (float)MARGIN_SIZE, GetScreenWidth() - OPT_WIDTH - 2.0f*MARGIN_SIZE, GetScreenHeight() - 2.0f*MARGIN_SIZE}, - (Vector2){0.0f, 0.0f}, rotation, scale, colors[activeCol]); - - // Draw options - DrawRectangle(MARGIN_SIZE, MARGIN_SIZE, OPT_WIDTH - MARGIN_SIZE, GetScreenHeight() - 2*MARGIN_SIZE, ColorAlpha(LIGHTGRAY, 0.5f)); - - DrawText("Select Pattern", 2 + MARGIN_SIZE, 30 + MARGIN_SIZE, 10, BLACK); - DrawTexture(texPattern, 2 + MARGIN_SIZE, 40 + MARGIN_SIZE, BLACK); - DrawRectangle(2 + MARGIN_SIZE + (int)recPattern[activePattern].x, 40 + MARGIN_SIZE + (int)recPattern[activePattern].y, (int)recPattern[activePattern].width, (int)recPattern[activePattern].height, ColorAlpha(DARKBLUE, 0.3f)); - - DrawText("Select Color", 2+MARGIN_SIZE, 10+256+MARGIN_SIZE, 10, BLACK); - for (int i = 0; i < MAX_COLORS; i++) - { - DrawRectangleRec(colorRec[i], colors[i]); - if (activeCol == i) DrawRectangleLinesEx(colorRec[i], 3, ColorAlpha(WHITE, 0.5f)); - } - - DrawText("Scale (UP/DOWN to change)", 2 + MARGIN_SIZE, 80 + 256 + MARGIN_SIZE, 10, BLACK); - DrawText(TextFormat("%.2fx", scale), 2 + MARGIN_SIZE, 92 + 256 + MARGIN_SIZE, 20, BLACK); - - DrawText("Rotation (LEFT/RIGHT to change)", 2 + MARGIN_SIZE, 122 + 256 + MARGIN_SIZE, 10, BLACK); - DrawText(TextFormat("%.0f degrees", rotation), 2 + MARGIN_SIZE, 134 + 256 + MARGIN_SIZE, 20, BLACK); - - DrawText("Press [SPACE] to reset", 2 + MARGIN_SIZE, 164 + 256 + MARGIN_SIZE, 10, DARKBLUE); - - // Draw FPS - DrawText(TextFormat("%i FPS", GetFPS()), 2 + MARGIN_SIZE, 2 + MARGIN_SIZE, 20, BLACK); - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texPattern); // Unload texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -// Draw part of a texture (defined by a rectangle) with rotation and scale tiled into dest. -void DrawTextureTiled(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, float scale, Color tint) -{ - if ((texture.id <= 0) || (scale <= 0.0f)) return; // Wanna see a infinite loop?!...just delete this line! - if ((source.width == 0) || (source.height == 0)) return; - - int tileWidth = (int)(source.width*scale), tileHeight = (int)(source.height*scale); - if ((dest.width < tileWidth) && (dest.height < tileHeight)) - { - // Can fit only one tile - DrawTexturePro(texture, (Rectangle){source.x, source.y, ((float)dest.width/tileWidth)*source.width, ((float)dest.height/tileHeight)*source.height}, - (Rectangle){dest.x, dest.y, dest.width, dest.height}, origin, rotation, tint); - } - else if (dest.width <= tileWidth) - { - // Tiled vertically (one column) - int dy = 0; - for (;dy+tileHeight < dest.height; dy += tileHeight) - { - DrawTexturePro(texture, (Rectangle){source.x, source.y, ((float)dest.width/tileWidth)*source.width, source.height}, (Rectangle){dest.x, dest.y + dy, dest.width, (float)tileHeight}, origin, rotation, tint); - } - - // Fit last tile - if (dy < dest.height) - { - DrawTexturePro(texture, (Rectangle){source.x, source.y, ((float)dest.width/tileWidth)*source.width, ((float)(dest.height - dy)/tileHeight)*source.height}, - (Rectangle){dest.x, dest.y + dy, dest.width, dest.height - dy}, origin, rotation, tint); - } - } - else if (dest.height <= tileHeight) - { - // Tiled horizontally (one row) - int dx = 0; - for (;dx+tileWidth < dest.width; dx += tileWidth) - { - DrawTexturePro(texture, (Rectangle){source.x, source.y, source.width, ((float)dest.height/tileHeight)*source.height}, (Rectangle){dest.x + dx, dest.y, (float)tileWidth, dest.height}, origin, rotation, tint); - } - - // Fit last tile - if (dx < dest.width) - { - DrawTexturePro(texture, (Rectangle){source.x, source.y, ((float)(dest.width - dx)/tileWidth)*source.width, ((float)dest.height/tileHeight)*source.height}, - (Rectangle){dest.x + dx, dest.y, dest.width - dx, dest.height}, origin, rotation, tint); - } - } - else - { - // Tiled both horizontally and vertically (rows and columns) - int dx = 0; - for (;dx+tileWidth < dest.width; dx += tileWidth) - { - int dy = 0; - for (;dy+tileHeight < dest.height; dy += tileHeight) - { - DrawTexturePro(texture, source, (Rectangle){dest.x + dx, dest.y + dy, (float)tileWidth, (float)tileHeight}, origin, rotation, tint); - } - - if (dy < dest.height) - { - DrawTexturePro(texture, (Rectangle){source.x, source.y, source.width, ((float)(dest.height - dy)/tileHeight)*source.height}, - (Rectangle){dest.x + dx, dest.y + dy, (float)tileWidth, dest.height - dy}, origin, rotation, tint); - } - } - - // Fit last column of tiles - if (dx < dest.width) - { - int dy = 0; - for (;dy+tileHeight < dest.height; dy += tileHeight) - { - DrawTexturePro(texture, (Rectangle){source.x, source.y, ((float)(dest.width - dx)/tileWidth)*source.width, source.height}, - (Rectangle){dest.x + dx, dest.y + dy, dest.width - dx, (float)tileHeight}, origin, rotation, tint); - } - - // Draw final tile in the bottom right corner - if (dy < dest.height) - { - DrawTexturePro(texture, (Rectangle){source.x, source.y, ((float)(dest.width - dx)/tileWidth)*source.width, ((float)(dest.height - dy)/tileHeight)*source.height}, - (Rectangle){dest.x + dx, dest.y + dy, dest.width - dx, dest.height - dy}, origin, rotation, tint); - } - } - } -} diff --git a/examples/textures/textures_fog_of_war.c b/examples/textures/textures_fog_of_war.c deleted file mode 100644 index 433f364..0000000 --- a/examples/textures/textures_fog_of_war.c +++ /dev/null @@ -1,154 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Fog of war -* -* Example originally created with raylib 4.2, last time updated with raylib 4.2 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2018-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include // Required for: calloc(), free() - -#define MAP_TILE_SIZE 32 // Tiles size 32x32 pixels -#define PLAYER_SIZE 16 // Player size -#define PLAYER_TILE_VISIBILITY 2 // Player can see 2 tiles around its position - -// Map data type -typedef struct Map { - unsigned int tilesX; // Number of tiles in X axis - unsigned int tilesY; // Number of tiles in Y axis - unsigned char *tileIds; // Tile ids (tilesX*tilesY), defines type of tile to draw - unsigned char *tileFog; // Tile fog state (tilesX*tilesY), defines if a tile has fog or half-fog -} Map; - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - fog of war"); - - Map map = { 0 }; - map.tilesX = 25; - map.tilesY = 15; - - // NOTE: We can have up to 256 values for tile ids and for tile fog state, - // probably we don't need that many values for fog state, it can be optimized - // to use only 2 bits per fog state (reducing size by 4) but logic will be a bit more complex - map.tileIds = (unsigned char *)calloc(map.tilesX*map.tilesY, sizeof(unsigned char)); - map.tileFog = (unsigned char *)calloc(map.tilesX*map.tilesY, sizeof(unsigned char)); - - // Load map tiles (generating 2 random tile ids for testing) - // NOTE: Map tile ids should be probably loaded from an external map file - for (unsigned int i = 0; i < map.tilesY*map.tilesX; i++) map.tileIds[i] = GetRandomValue(0, 1); - - // Player position on the screen (pixel coordinates, not tile coordinates) - Vector2 playerPosition = { 180, 130 }; - int playerTileX = 0; - int playerTileY = 0; - - // Render texture to render fog of war - // NOTE: To get an automatic smooth-fog effect we use a render texture to render fog - // at a smaller size (one pixel per tile) and scale it on drawing with bilinear filtering - RenderTexture2D fogOfWar = LoadRenderTexture(map.tilesX, map.tilesY); - SetTextureFilter(fogOfWar.texture, TEXTURE_FILTER_BILINEAR); - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // Move player around - if (IsKeyDown(KEY_RIGHT)) playerPosition.x += 5; - if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 5; - if (IsKeyDown(KEY_DOWN)) playerPosition.y += 5; - if (IsKeyDown(KEY_UP)) playerPosition.y -= 5; - - // Check player position to avoid moving outside tilemap limits - if (playerPosition.x < 0) playerPosition.x = 0; - else if ((playerPosition.x + PLAYER_SIZE) > (map.tilesX*MAP_TILE_SIZE)) playerPosition.x = (float)map.tilesX*MAP_TILE_SIZE - PLAYER_SIZE; - if (playerPosition.y < 0) playerPosition.y = 0; - else if ((playerPosition.y + PLAYER_SIZE) > (map.tilesY*MAP_TILE_SIZE)) playerPosition.y = (float)map.tilesY*MAP_TILE_SIZE - PLAYER_SIZE; - - // Previous visited tiles are set to partial fog - for (unsigned int i = 0; i < map.tilesX*map.tilesY; i++) if (map.tileFog[i] == 1) map.tileFog[i] = 2; - - // Get current tile position from player pixel position - playerTileX = (int)((playerPosition.x + MAP_TILE_SIZE/2)/MAP_TILE_SIZE); - playerTileY = (int)((playerPosition.y + MAP_TILE_SIZE/2)/MAP_TILE_SIZE); - - // Check visibility and update fog - // NOTE: We check tilemap limits to avoid processing tiles out-of-array-bounds (it could crash program) - for (int y = (playerTileY - PLAYER_TILE_VISIBILITY); y < (playerTileY + PLAYER_TILE_VISIBILITY); y++) - for (int x = (playerTileX - PLAYER_TILE_VISIBILITY); x < (playerTileX + PLAYER_TILE_VISIBILITY); x++) - if ((x >= 0) && (x < (int)map.tilesX) && (y >= 0) && (y < (int)map.tilesY)) map.tileFog[y*map.tilesX + x] = 1; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - // Draw fog of war to a small render texture for automatic smoothing on scaling - BeginTextureMode(fogOfWar); - ClearBackground(BLANK); - for (unsigned int y = 0; y < map.tilesY; y++) - for (unsigned int x = 0; x < map.tilesX; x++) - if (map.tileFog[y*map.tilesX + x] == 0) DrawRectangle(x, y, 1, 1, BLACK); - else if (map.tileFog[y*map.tilesX + x] == 2) DrawRectangle(x, y, 1, 1, Fade(BLACK, 0.8f)); - EndTextureMode(); - - BeginDrawing(); - - ClearBackground(RAYWHITE); - - for (unsigned int y = 0; y < map.tilesY; y++) - { - for (unsigned int x = 0; x < map.tilesX; x++) - { - // Draw tiles from id (and tile borders) - DrawRectangle(x*MAP_TILE_SIZE, y*MAP_TILE_SIZE, MAP_TILE_SIZE, MAP_TILE_SIZE, - (map.tileIds[y*map.tilesX + x] == 0)? BLUE : Fade(BLUE, 0.9f)); - DrawRectangleLines(x*MAP_TILE_SIZE, y*MAP_TILE_SIZE, MAP_TILE_SIZE, MAP_TILE_SIZE, Fade(DARKBLUE, 0.5f)); - } - } - - // Draw player - DrawRectangleV(playerPosition, (Vector2){ PLAYER_SIZE, PLAYER_SIZE }, RED); - - - // Draw fog of war (scaled to full map, bilinear filtering) - DrawTexturePro(fogOfWar.texture, (Rectangle){ 0, 0, (float)fogOfWar.texture.width, (float)-fogOfWar.texture.height }, - (Rectangle){ 0, 0, (float)map.tilesX*MAP_TILE_SIZE, (float)map.tilesY*MAP_TILE_SIZE }, - (Vector2){ 0, 0 }, 0.0f, WHITE); - - // Draw player current tile - DrawText(TextFormat("Current tile: [%i,%i]", playerTileX, playerTileY), 10, 10, 20, LIME); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - free(map.tileIds); // Free allocated map tile ids - free(map.tileFog); // Free allocated map tile fog state - - UnloadRenderTexture(fogOfWar); // Unload render texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/textures/textures_gif_player.c b/examples/textures/textures_gif_player.c deleted file mode 100644 index 1085228..0000000 --- a/examples/textures/textures_gif_player.c +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - gif playing -* -* Example originally created with raylib 4.2, last time updated with raylib 4.2 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2021-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define MAX_FRAME_DELAY 20 -#define MIN_FRAME_DELAY 1 - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - gif playing"); - - int animFrames = 0; - - // Load all GIF animation frames into a single Image - // NOTE: GIF data is always loaded as RGBA (32bit) by default - // NOTE: Frames are just appended one after another in image.data memory - Image imScarfyAnim = LoadImageAnim("resources/scarfy_run.gif", &animFrames); - - // Load texture from image - // NOTE: We will update this texture when required with next frame data - // WARNING: It's not recommended to use this technique for sprites animation, - // use spritesheets instead, like illustrated in textures_sprite_anim example - Texture2D texScarfyAnim = LoadTextureFromImage(imScarfyAnim); - - unsigned int nextFrameDataOffset = 0; // Current byte offset to next frame in image.data - - int currentAnimFrame = 0; // Current animation frame to load and draw - int frameDelay = 8; // Frame delay to switch between animation frames - int frameCounter = 0; // General frames counter - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - frameCounter++; - if (frameCounter >= frameDelay) - { - // Move to next frame - // NOTE: If final frame is reached we return to first frame - currentAnimFrame++; - if (currentAnimFrame >= animFrames) currentAnimFrame = 0; - - // Get memory offset position for next frame data in image.data - nextFrameDataOffset = imScarfyAnim.width*imScarfyAnim.height*4*currentAnimFrame; - - // Update GPU texture data with next frame image data - // WARNING: Data size (frame size) and pixel format must match already created texture - UpdateTexture(texScarfyAnim, ((unsigned char *)imScarfyAnim.data) + nextFrameDataOffset); - - frameCounter = 0; - } - - // Control frames delay - if (IsKeyPressed(KEY_RIGHT)) frameDelay++; - else if (IsKeyPressed(KEY_LEFT)) frameDelay--; - - if (frameDelay > MAX_FRAME_DELAY) frameDelay = MAX_FRAME_DELAY; - else if (frameDelay < MIN_FRAME_DELAY) frameDelay = MIN_FRAME_DELAY; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText(TextFormat("TOTAL GIF FRAMES: %02i", animFrames), 50, 30, 20, LIGHTGRAY); - DrawText(TextFormat("CURRENT FRAME: %02i", currentAnimFrame), 50, 60, 20, GRAY); - DrawText(TextFormat("CURRENT FRAME IMAGE.DATA OFFSET: %02i", nextFrameDataOffset), 50, 90, 20, GRAY); - - DrawText("FRAMES DELAY: ", 100, 305, 10, DARKGRAY); - DrawText(TextFormat("%02i frames", frameDelay), 620, 305, 10, DARKGRAY); - DrawText("PRESS RIGHT/LEFT KEYS to CHANGE SPEED!", 290, 350, 10, DARKGRAY); - - for (int i = 0; i < MAX_FRAME_DELAY; i++) - { - if (i < frameDelay) DrawRectangle(190 + 21*i, 300, 20, 20, RED); - DrawRectangleLines(190 + 21*i, 300, 20, 20, MAROON); - } - - DrawTexture(texScarfyAnim, GetScreenWidth()/2 - texScarfyAnim.width/2, 140, WHITE); - - DrawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texScarfyAnim); // Unload texture - UnloadImage(imScarfyAnim); // Unload image (contains all frames) - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_image_drawing.c b/examples/textures/textures_image_drawing.c deleted file mode 100644 index 967cb52..0000000 --- a/examples/textures/textures_image_drawing.c +++ /dev/null @@ -1,96 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Image loading and drawing on it -* -* NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM) -* -* Example originally created with raylib 1.4, last time updated with raylib 1.4 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2016-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - image drawing"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - - Image cat = LoadImage("resources/cat.png"); // Load image in CPU memory (RAM) - ImageCrop(&cat, (Rectangle){ 100, 10, 280, 380 }); // Crop an image piece - ImageFlipHorizontal(&cat); // Flip cropped image horizontally - ImageResize(&cat, 150, 200); // Resize flipped-cropped image - - Image parrots = LoadImage("resources/parrots.png"); // Load image in CPU memory (RAM) - - // Draw one image over the other with a scaling of 1.5f - ImageDraw(&parrots, cat, (Rectangle){ 0, 0, (float)cat.width, (float)cat.height }, (Rectangle){ 30, 40, cat.width*1.5f, cat.height*1.5f }, WHITE); - ImageCrop(&parrots, (Rectangle){ 0, 50, (float)parrots.width, (float)parrots.height - 100 }); // Crop resulting image - - // Draw on the image with a few image draw methods - ImageDrawPixel(&parrots, 10, 10, RAYWHITE); - ImageDrawCircleLines(&parrots, 10, 10, 5, RAYWHITE); - ImageDrawRectangle(&parrots, 5, 20, 10, 10, RAYWHITE); - - UnloadImage(cat); // Unload image from RAM - - // Load custom font for frawing on image - Font font = LoadFont("resources/custom_jupiter_crash.png"); - - // Draw over image using custom font - ImageDrawTextEx(&parrots, font, "PARROTS & CAT", (Vector2){ 300, 230 }, (float)font.baseSize, -2, WHITE); - - UnloadFont(font); // Unload custom font (already drawn used on image) - - Texture2D texture = LoadTextureFromImage(parrots); // Image converted to texture, uploaded to GPU memory (VRAM) - UnloadImage(parrots); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM - - SetTargetFPS(60); - //--------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // TODO: Update your variables here - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTexture(texture, screenWidth/2 - texture.width/2, screenHeight/2 - texture.height/2 - 40, WHITE); - DrawRectangleLines(screenWidth/2 - texture.width/2, screenHeight/2 - texture.height/2 - 40, texture.width, texture.height, DARKGRAY); - - DrawText("We are drawing only one texture from various images composed!", 240, 350, 10, DARKGRAY); - DrawText("Source images have been cropped, scaled, flipped and copied one over the other.", 190, 370, 10, DARKGRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Texture unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_image_generation.c b/examples/textures/textures_image_generation.c deleted file mode 100644 index 1ab08ae..0000000 --- a/examples/textures/textures_image_generation.c +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Procedural images generation -* -* Example originally created with raylib 1.8, last time updated with raylib 1.8 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2O17-2023 Wilhem Barbier (@nounoursheureux) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define NUM_TEXTURES 6 // Currently we have 7 generation algorithms - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - procedural images generation"); - - Image verticalGradient = GenImageGradientV(screenWidth, screenHeight, RED, BLUE); - Image horizontalGradient = GenImageGradientH(screenWidth, screenHeight, RED, BLUE); - Image radialGradient = GenImageGradientRadial(screenWidth, screenHeight, 0.0f, WHITE, BLACK); - Image checked = GenImageChecked(screenWidth, screenHeight, 32, 32, RED, BLUE); - Image whiteNoise = GenImageWhiteNoise(screenWidth, screenHeight, 0.5f); - Image cellular = GenImageCellular(screenWidth, screenHeight, 32); - - Texture2D textures[NUM_TEXTURES] = { 0 }; - - textures[0] = LoadTextureFromImage(verticalGradient); - textures[1] = LoadTextureFromImage(horizontalGradient); - textures[2] = LoadTextureFromImage(radialGradient); - textures[3] = LoadTextureFromImage(checked); - textures[4] = LoadTextureFromImage(whiteNoise); - textures[5] = LoadTextureFromImage(cellular); - - // Unload image data (CPU RAM) - UnloadImage(verticalGradient); - UnloadImage(horizontalGradient); - UnloadImage(radialGradient); - UnloadImage(checked); - UnloadImage(whiteNoise); - UnloadImage(cellular); - - int currentTexture = 0; - - SetTargetFPS(60); - //--------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) - { - // Update - //---------------------------------------------------------------------------------- - if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) || IsKeyPressed(KEY_RIGHT)) - { - currentTexture = (currentTexture + 1)%NUM_TEXTURES; // Cycle between the textures - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTexture(textures[currentTexture], 0, 0, WHITE); - - DrawRectangle(30, 400, 325, 30, Fade(SKYBLUE, 0.5f)); - DrawRectangleLines(30, 400, 325, 30, Fade(WHITE, 0.5f)); - DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL TEXTURES", 40, 410, 10, WHITE); - - switch(currentTexture) - { - case 0: DrawText("VERTICAL GRADIENT", 560, 10, 20, RAYWHITE); break; - case 1: DrawText("HORIZONTAL GRADIENT", 540, 10, 20, RAYWHITE); break; - case 2: DrawText("RADIAL GRADIENT", 580, 10, 20, LIGHTGRAY); break; - case 3: DrawText("CHECKED", 680, 10, 20, RAYWHITE); break; - case 4: DrawText("WHITE NOISE", 640, 10, 20, RED); break; - case 5: DrawText("CELLULAR", 670, 10, 20, RAYWHITE); break; - default: break; - } - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - - // Unload textures data (GPU VRAM) - for (int i = 0; i < NUM_TEXTURES; i++) UnloadTexture(textures[i]); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/textures/textures_image_loading.c b/examples/textures/textures_image_loading.c deleted file mode 100644 index b1bfe09..0000000 --- a/examples/textures/textures_image_loading.c +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Image loading and texture creation -* -* NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM) -* -* Example originally created with raylib 1.3, last time updated with raylib 1.3 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2015-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - image loading"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - - Image image = LoadImage("resources/raylib_logo.png"); // Loaded in CPU memory (RAM) - Texture2D texture = LoadTextureFromImage(image); // Image converted to texture, GPU memory (VRAM) - UnloadImage(image); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //--------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // TODO: Update your variables here - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTexture(texture, screenWidth/2 - texture.width/2, screenHeight/2 - texture.height/2, WHITE); - - DrawText("this IS a texture loaded from an image!", 300, 370, 10, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Texture unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/textures/textures_image_processing.c b/examples/textures/textures_image_processing.c deleted file mode 100644 index 6e6c854..0000000 --- a/examples/textures/textures_image_processing.c +++ /dev/null @@ -1,177 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Image processing -* -* NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM) -* -* Example originally created with raylib 1.4, last time updated with raylib 3.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2016-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include // Required for: free() - -#define NUM_PROCESSES 9 - -typedef enum { - NONE = 0, - COLOR_GRAYSCALE, - COLOR_TINT, - COLOR_INVERT, - COLOR_CONTRAST, - COLOR_BRIGHTNESS, - GAUSSIAN_BLUR, - FLIP_VERTICAL, - FLIP_HORIZONTAL -} ImageProcess; - -static const char *processText[] = { - "NO PROCESSING", - "COLOR GRAYSCALE", - "COLOR TINT", - "COLOR INVERT", - "COLOR CONTRAST", - "COLOR BRIGHTNESS", - "GAUSSIAN BLUR", - "FLIP VERTICAL", - "FLIP HORIZONTAL" -}; - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - image processing"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - - Image imOrigin = LoadImage("resources/parrots.png"); // Loaded in CPU memory (RAM) - ImageFormat(&imOrigin, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8); // Format image to RGBA 32bit (required for texture update) <-- ISSUE - Texture2D texture = LoadTextureFromImage(imOrigin); // Image converted to texture, GPU memory (VRAM) - - Image imCopy = ImageCopy(imOrigin); - - int currentProcess = NONE; - bool textureReload = false; - - Rectangle toggleRecs[NUM_PROCESSES] = { 0 }; - int mouseHoverRec = -1; - - for (int i = 0; i < NUM_PROCESSES; i++) toggleRecs[i] = (Rectangle){ 40.0f, (float)(50 + 32*i), 150.0f, 30.0f }; - - SetTargetFPS(60); - //--------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - - // Mouse toggle group logic - for (int i = 0; i < NUM_PROCESSES; i++) - { - if (CheckCollisionPointRec(GetMousePosition(), toggleRecs[i])) - { - mouseHoverRec = i; - - if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) - { - currentProcess = i; - textureReload = true; - } - break; - } - else mouseHoverRec = -1; - } - - // Keyboard toggle group logic - if (IsKeyPressed(KEY_DOWN)) - { - currentProcess++; - if (currentProcess > (NUM_PROCESSES - 1)) currentProcess = 0; - textureReload = true; - } - else if (IsKeyPressed(KEY_UP)) - { - currentProcess--; - if (currentProcess < 0) currentProcess = 7; - textureReload = true; - } - - // Reload texture when required - if (textureReload) - { - UnloadImage(imCopy); // Unload image-copy data - imCopy = ImageCopy(imOrigin); // Restore image-copy from image-origin - - // NOTE: Image processing is a costly CPU process to be done every frame, - // If image processing is required in a frame-basis, it should be done - // with a texture and by shaders - switch (currentProcess) - { - case COLOR_GRAYSCALE: ImageColorGrayscale(&imCopy); break; - case COLOR_TINT: ImageColorTint(&imCopy, GREEN); break; - case COLOR_INVERT: ImageColorInvert(&imCopy); break; - case COLOR_CONTRAST: ImageColorContrast(&imCopy, -40); break; - case COLOR_BRIGHTNESS: ImageColorBrightness(&imCopy, -80); break; - case GAUSSIAN_BLUR: ImageBlurGaussian(&imCopy, 10); break; - case FLIP_VERTICAL: ImageFlipVertical(&imCopy); break; - case FLIP_HORIZONTAL: ImageFlipHorizontal(&imCopy); break; - default: break; - } - - Color *pixels = LoadImageColors(imCopy); // Load pixel data from image (RGBA 32bit) - UpdateTexture(texture, pixels); // Update texture with new image data - UnloadImageColors(pixels); // Unload pixels data from RAM - - textureReload = false; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText("IMAGE PROCESSING:", 40, 30, 10, DARKGRAY); - - // Draw rectangles - for (int i = 0; i < NUM_PROCESSES; i++) - { - DrawRectangleRec(toggleRecs[i], ((i == currentProcess) || (i == mouseHoverRec)) ? SKYBLUE : LIGHTGRAY); - DrawRectangleLines((int)toggleRecs[i].x, (int) toggleRecs[i].y, (int) toggleRecs[i].width, (int) toggleRecs[i].height, ((i == currentProcess) || (i == mouseHoverRec)) ? BLUE : GRAY); - DrawText( processText[i], (int)( toggleRecs[i].x + toggleRecs[i].width/2 - MeasureText(processText[i], 10)/2), (int) toggleRecs[i].y + 11, 10, ((i == currentProcess) || (i == mouseHoverRec)) ? DARKBLUE : DARKGRAY); - } - - DrawTexture(texture, screenWidth - texture.width - 60, screenHeight/2 - texture.height/2, WHITE); - DrawRectangleLines(screenWidth - texture.width - 60, screenHeight/2 - texture.height/2, texture.width, texture.height, BLACK); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Unload texture from VRAM - UnloadImage(imOrigin); // Unload image-origin from RAM - UnloadImage(imCopy); // Unload image-copy from RAM - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_image_text.c b/examples/textures/textures_image_text.c deleted file mode 100644 index 50db688..0000000 --- a/examples/textures/textures_image_text.c +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************************* -* -* raylib [texture] example - Image text drawing using TTF generated font -* -* Example originally created with raylib 1.8, last time updated with raylib 4.0 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2017-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [texture] example - image text drawing"); - - Image parrots = LoadImage("resources/parrots.png"); // Load image in CPU memory (RAM) - - // TTF Font loading with custom generation parameters - Font font = LoadFontEx("resources/KAISG.ttf", 64, 0, 0); - - // Draw over image using custom font - ImageDrawTextEx(&parrots, font, "[Parrots font drawing]", (Vector2){ 20.0f, 20.0f }, (float)font.baseSize, 0.0f, RED); - - Texture2D texture = LoadTextureFromImage(parrots); // Image converted to texture, uploaded to GPU memory (VRAM) - UnloadImage(parrots); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM - - Vector2 position = { (float)(screenWidth/2 - texture.width/2), (float)(screenHeight/2 - texture.height/2 - 20) }; - - bool showFont = false; - - SetTargetFPS(60); - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - if (IsKeyDown(KEY_SPACE)) showFont = true; - else showFont = false; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - if (!showFont) - { - // Draw texture with text already drawn inside - DrawTextureV(texture, position, WHITE); - - // Draw text directly using sprite font - DrawTextEx(font, "[Parrots font drawing]", (Vector2){ position.x + 20, - position.y + 20 + 280 }, (float)font.baseSize, 0.0f, WHITE); - } - else DrawTexture(font.texture, screenWidth/2 - font.texture.width/2, 50, BLACK); - - DrawText("PRESS SPACE to SHOW FONT ATLAS USED", 290, 420, 10, DARKGRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Texture unloading - - UnloadFont(font); // Unload custom font - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_logo_raylib.c b/examples/textures/textures_logo_raylib.c deleted file mode 100644 index 8bd8658..0000000 --- a/examples/textures/textures_logo_raylib.c +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Texture loading and drawing -* -* Example originally created with raylib 1.0, last time updated with raylib 1.0 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture loading and drawing"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - Texture2D texture = LoadTexture("resources/raylib_logo.png"); // Texture loading - //--------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // TODO: Update your variables here - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTexture(texture, screenWidth/2 - texture.width/2, screenHeight/2 - texture.height/2, WHITE); - - DrawText("this IS a texture!", 360, 370, 10, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Texture unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_mouse_painting.c b/examples/textures/textures_mouse_painting.c deleted file mode 100644 index e985cee..0000000 --- a/examples/textures/textures_mouse_painting.c +++ /dev/null @@ -1,226 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Mouse painting -* -* Example originally created with raylib 3.0, last time updated with raylib 3.0 -* -* Example contributed by Chris Dill (@MysteriousSpace) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 Chris Dill (@MysteriousSpace) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define MAX_COLORS_COUNT 23 // Number of colors available - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - mouse painting"); - - // Colors to choose from - Color colors[MAX_COLORS_COUNT] = { - RAYWHITE, YELLOW, GOLD, ORANGE, PINK, RED, MAROON, GREEN, LIME, DARKGREEN, - SKYBLUE, BLUE, DARKBLUE, PURPLE, VIOLET, DARKPURPLE, BEIGE, BROWN, DARKBROWN, - LIGHTGRAY, GRAY, DARKGRAY, BLACK }; - - // Define colorsRecs data (for every rectangle) - Rectangle colorsRecs[MAX_COLORS_COUNT] = { 0 }; - - for (int i = 0; i < MAX_COLORS_COUNT; i++) - { - colorsRecs[i].x = 10 + 30.0f*i + 2*i; - colorsRecs[i].y = 10; - colorsRecs[i].width = 30; - colorsRecs[i].height = 30; - } - - int colorSelected = 0; - int colorSelectedPrev = colorSelected; - int colorMouseHover = 0; - float brushSize = 20.0f; - bool mouseWasPressed = false; - - Rectangle btnSaveRec = { 750, 10, 40, 30 }; - bool btnSaveMouseHover = false; - bool showSaveMessage = false; - int saveMessageCounter = 0; - - // Create a RenderTexture2D to use as a canvas - RenderTexture2D target = LoadRenderTexture(screenWidth, screenHeight); - - // Clear render texture before entering the game loop - BeginTextureMode(target); - ClearBackground(colors[0]); - EndTextureMode(); - - SetTargetFPS(120); // Set our game to run at 120 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - Vector2 mousePos = GetMousePosition(); - - // Move between colors with keys - if (IsKeyPressed(KEY_RIGHT)) colorSelected++; - else if (IsKeyPressed(KEY_LEFT)) colorSelected--; - - if (colorSelected >= MAX_COLORS_COUNT) colorSelected = MAX_COLORS_COUNT - 1; - else if (colorSelected < 0) colorSelected = 0; - - // Choose color with mouse - for (int i = 0; i < MAX_COLORS_COUNT; i++) - { - if (CheckCollisionPointRec(mousePos, colorsRecs[i])) - { - colorMouseHover = i; - break; - } - else colorMouseHover = -1; - } - - if ((colorMouseHover >= 0) && IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) - { - colorSelected = colorMouseHover; - colorSelectedPrev = colorSelected; - } - - // Change brush size - brushSize += GetMouseWheelMove()*5; - if (brushSize < 2) brushSize = 2; - if (brushSize > 50) brushSize = 50; - - if (IsKeyPressed(KEY_C)) - { - // Clear render texture to clear color - BeginTextureMode(target); - ClearBackground(colors[0]); - EndTextureMode(); - } - - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT) || (GetGestureDetected() == GESTURE_DRAG)) - { - // Paint circle into render texture - // NOTE: To avoid discontinuous circles, we could store - // previous-next mouse points and just draw a line using brush size - BeginTextureMode(target); - if (mousePos.y > 50) DrawCircle((int)mousePos.x, (int)mousePos.y, brushSize, colors[colorSelected]); - EndTextureMode(); - } - - if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) - { - if (!mouseWasPressed) - { - colorSelectedPrev = colorSelected; - colorSelected = 0; - } - - mouseWasPressed = true; - - // Erase circle from render texture - BeginTextureMode(target); - if (mousePos.y > 50) DrawCircle((int)mousePos.x, (int)mousePos.y, brushSize, colors[0]); - EndTextureMode(); - } - else if (IsMouseButtonReleased(MOUSE_BUTTON_RIGHT) && mouseWasPressed) - { - colorSelected = colorSelectedPrev; - mouseWasPressed = false; - } - - // Check mouse hover save button - if (CheckCollisionPointRec(mousePos, btnSaveRec)) btnSaveMouseHover = true; - else btnSaveMouseHover = false; - - // Image saving logic - // NOTE: Saving painted texture to a default named image - if ((btnSaveMouseHover && IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) || IsKeyPressed(KEY_S)) - { - Image image = LoadImageFromTexture(target.texture); - ImageFlipVertical(&image); - ExportImage(image, "my_amazing_texture_painting.png"); - UnloadImage(image); - showSaveMessage = true; - } - - if (showSaveMessage) - { - // On saving, show a full screen message for 2 seconds - saveMessageCounter++; - if (saveMessageCounter > 240) - { - showSaveMessage = false; - saveMessageCounter = 0; - } - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) - DrawTextureRec(target.texture, (Rectangle) { 0, 0, (float)target.texture.width, (float)-target.texture.height }, (Vector2) { 0, 0 }, WHITE); - - // Draw drawing circle for reference - if (mousePos.y > 50) - { - if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) DrawCircleLines((int)mousePos.x, (int)mousePos.y, brushSize, GRAY); - else DrawCircle(GetMouseX(), GetMouseY(), brushSize, colors[colorSelected]); - } - - // Draw top panel - DrawRectangle(0, 0, GetScreenWidth(), 50, RAYWHITE); - DrawLine(0, 50, GetScreenWidth(), 50, LIGHTGRAY); - - // Draw color selection rectangles - for (int i = 0; i < MAX_COLORS_COUNT; i++) DrawRectangleRec(colorsRecs[i], colors[i]); - DrawRectangleLines(10, 10, 30, 30, LIGHTGRAY); - - if (colorMouseHover >= 0) DrawRectangleRec(colorsRecs[colorMouseHover], Fade(WHITE, 0.6f)); - - DrawRectangleLinesEx((Rectangle){ colorsRecs[colorSelected].x - 2, colorsRecs[colorSelected].y - 2, - colorsRecs[colorSelected].width + 4, colorsRecs[colorSelected].height + 4 }, 2, BLACK); - - // Draw save image button - DrawRectangleLinesEx(btnSaveRec, 2, btnSaveMouseHover ? RED : BLACK); - DrawText("SAVE!", 755, 20, 10, btnSaveMouseHover ? RED : BLACK); - - // Draw save image message - if (showSaveMessage) - { - DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, 0.8f)); - DrawRectangle(0, 150, GetScreenWidth(), 80, BLACK); - DrawText("IMAGE SAVED: my_amazing_texture_painting.png", 150, 180, 20, RAYWHITE); - } - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadRenderTexture(target); // Unload render texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/textures/textures_npatch_drawing.c b/examples/textures/textures_npatch_drawing.c deleted file mode 100644 index f85aaa1..0000000 --- a/examples/textures/textures_npatch_drawing.c +++ /dev/null @@ -1,114 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - N-patch drawing -* -* NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM) -* -* Example originally created with raylib 2.0, last time updated with raylib 2.5 -* -* Example contributed by Jorge A. Gomes (@overdev) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2018-2023 Jorge A. Gomes (@overdev) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - N-patch drawing"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - Texture2D nPatchTexture = LoadTexture("resources/ninepatch_button.png"); - - Vector2 mousePosition = { 0 }; - Vector2 origin = { 0.0f, 0.0f }; - - // Position and size of the n-patches - Rectangle dstRec1 = { 480.0f, 160.0f, 32.0f, 32.0f }; - Rectangle dstRec2 = { 160.0f, 160.0f, 32.0f, 32.0f }; - Rectangle dstRecH = { 160.0f, 93.0f, 32.0f, 32.0f }; - Rectangle dstRecV = { 92.0f, 160.0f, 32.0f, 32.0f }; - - // A 9-patch (NPATCH_NINE_PATCH) changes its sizes in both axis - NPatchInfo ninePatchInfo1 = { (Rectangle){ 0.0f, 0.0f, 64.0f, 64.0f }, 12, 40, 12, 12, NPATCH_NINE_PATCH }; - NPatchInfo ninePatchInfo2 = { (Rectangle){ 0.0f, 128.0f, 64.0f, 64.0f }, 16, 16, 16, 16, NPATCH_NINE_PATCH }; - - // A horizontal 3-patch (NPATCH_THREE_PATCH_HORIZONTAL) changes its sizes along the x axis only - NPatchInfo h3PatchInfo = { (Rectangle){ 0.0f, 64.0f, 64.0f, 64.0f }, 8, 8, 8, 8, NPATCH_THREE_PATCH_HORIZONTAL }; - - // A vertical 3-patch (NPATCH_THREE_PATCH_VERTICAL) changes its sizes along the y axis only - NPatchInfo v3PatchInfo = { (Rectangle){ 0.0f, 192.0f, 64.0f, 64.0f }, 6, 6, 6, 6, NPATCH_THREE_PATCH_VERTICAL }; - - SetTargetFPS(60); - //--------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - mousePosition = GetMousePosition(); - - // Resize the n-patches based on mouse position - dstRec1.width = mousePosition.x - dstRec1.x; - dstRec1.height = mousePosition.y - dstRec1.y; - dstRec2.width = mousePosition.x - dstRec2.x; - dstRec2.height = mousePosition.y - dstRec2.y; - dstRecH.width = mousePosition.x - dstRecH.x; - dstRecV.height = mousePosition.y - dstRecV.y; - - // Set a minimum width and/or height - if (dstRec1.width < 1.0f) dstRec1.width = 1.0f; - if (dstRec1.width > 300.0f) dstRec1.width = 300.0f; - if (dstRec1.height < 1.0f) dstRec1.height = 1.0f; - if (dstRec2.width < 1.0f) dstRec2.width = 1.0f; - if (dstRec2.width > 300.0f) dstRec2.width = 300.0f; - if (dstRec2.height < 1.0f) dstRec2.height = 1.0f; - if (dstRecH.width < 1.0f) dstRecH.width = 1.0f; - if (dstRecV.height < 1.0f) dstRecV.height = 1.0f; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - // Draw the n-patches - DrawTextureNPatch(nPatchTexture, ninePatchInfo2, dstRec2, origin, 0.0f, WHITE); - DrawTextureNPatch(nPatchTexture, ninePatchInfo1, dstRec1, origin, 0.0f, WHITE); - DrawTextureNPatch(nPatchTexture, h3PatchInfo, dstRecH, origin, 0.0f, WHITE); - DrawTextureNPatch(nPatchTexture, v3PatchInfo, dstRecV, origin, 0.0f, WHITE); - - // Draw the source texture - DrawRectangleLines(5, 88, 74, 266, BLUE); - DrawTexture(nPatchTexture, 10, 93, WHITE); - DrawText("TEXTURE", 15, 360, 10, DARKGRAY); - - DrawText("Move the mouse to stretch or shrink the n-patches", 10, 20, 20, DARKGRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(nPatchTexture); // Texture unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/textures/textures_particles_blending.c b/examples/textures/textures_particles_blending.c deleted file mode 100644 index ec144ff..0000000 --- a/examples/textures/textures_particles_blending.c +++ /dev/null @@ -1,140 +0,0 @@ -/******************************************************************************************* -* -* raylib example - particles blending -* -* Example originally created with raylib 1.7, last time updated with raylib 3.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2017-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define MAX_PARTICLES 200 - -// Particle structure with basic data -typedef struct { - Vector2 position; - Color color; - float alpha; - float size; - float rotation; - bool active; // NOTE: Use it to activate/deactive particle -} Particle; - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - particles blending"); - - // Particles pool, reuse them! - Particle mouseTail[MAX_PARTICLES] = { 0 }; - - // Initialize particles - for (int i = 0; i < MAX_PARTICLES; i++) - { - mouseTail[i].position = (Vector2){ 0, 0 }; - mouseTail[i].color = (Color){ GetRandomValue(0, 255), GetRandomValue(0, 255), GetRandomValue(0, 255), 255 }; - mouseTail[i].alpha = 1.0f; - mouseTail[i].size = (float)GetRandomValue(1, 30)/20.0f; - mouseTail[i].rotation = (float)GetRandomValue(0, 360); - mouseTail[i].active = false; - } - - float gravity = 3.0f; - - Texture2D smoke = LoadTexture("resources/spark_flame.png"); - - int blending = BLEND_ALPHA; - - SetTargetFPS(60); - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - - // Activate one particle every frame and Update active particles - // NOTE: Particles initial position should be mouse position when activated - // NOTE: Particles fall down with gravity and rotation... and disappear after 2 seconds (alpha = 0) - // NOTE: When a particle disappears, active = false and it can be reused. - for (int i = 0; i < MAX_PARTICLES; i++) - { - if (!mouseTail[i].active) - { - mouseTail[i].active = true; - mouseTail[i].alpha = 1.0f; - mouseTail[i].position = GetMousePosition(); - i = MAX_PARTICLES; - } - } - - for (int i = 0; i < MAX_PARTICLES; i++) - { - if (mouseTail[i].active) - { - mouseTail[i].position.y += gravity/2; - mouseTail[i].alpha -= 0.005f; - - if (mouseTail[i].alpha <= 0.0f) mouseTail[i].active = false; - - mouseTail[i].rotation += 2.0f; - } - } - - if (IsKeyPressed(KEY_SPACE)) - { - if (blending == BLEND_ALPHA) blending = BLEND_ADDITIVE; - else blending = BLEND_ALPHA; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(DARKGRAY); - - BeginBlendMode(blending); - - // Draw active particles - for (int i = 0; i < MAX_PARTICLES; i++) - { - if (mouseTail[i].active) DrawTexturePro(smoke, (Rectangle){ 0.0f, 0.0f, (float)smoke.width, (float)smoke.height }, - (Rectangle){ mouseTail[i].position.x, mouseTail[i].position.y, smoke.width*mouseTail[i].size, smoke.height*mouseTail[i].size }, - (Vector2){ (float)(smoke.width*mouseTail[i].size/2.0f), (float)(smoke.height*mouseTail[i].size/2.0f) }, mouseTail[i].rotation, - Fade(mouseTail[i].color, mouseTail[i].alpha)); - } - - EndBlendMode(); - - DrawText("PRESS SPACE to CHANGE BLENDING MODE", 180, 20, 20, BLACK); - - if (blending == BLEND_ALPHA) DrawText("ALPHA BLENDING", 290, screenHeight - 40, 20, BLACK); - else DrawText("ADDITIVE BLENDING", 280, screenHeight - 40, 20, RAYWHITE); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(smoke); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_polygon.c b/examples/textures/textures_polygon.c deleted file mode 100644 index cf59af9..0000000 --- a/examples/textures/textures_polygon.c +++ /dev/null @@ -1,140 +0,0 @@ -/******************************************************************************************* -* -* raylib [shapes] example - Draw Textured Polygon -* -* Example originally created with raylib 3.7, last time updated with raylib 3.7 -* -* Example contributed by Chris Camacho (@codifies) and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2021-2023 Chris Camacho (@codifies) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include "rlgl.h" // Required for: Vertex definition -#include "raymath.h" - -#define MAX_POINTS 11 // 10 points and back to the start - -// Draw textured polygon, defined by vertex and texture coordinates -void DrawTexturePoly(Texture2D texture, Vector2 center, Vector2 *points, Vector2 *texcoords, int pointCount, Color tint); - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - textured polygon"); - - // Define texture coordinates to map our texture to poly - Vector2 texcoords[MAX_POINTS] = { - (Vector2){ 0.75f, 0.0f }, - (Vector2){ 0.25f, 0.0f }, - (Vector2){ 0.0f, 0.5f }, - (Vector2){ 0.0f, 0.75f }, - (Vector2){ 0.25f, 1.0f}, - (Vector2){ 0.375f, 0.875f}, - (Vector2){ 0.625f, 0.875f}, - (Vector2){ 0.75f, 1.0f}, - (Vector2){ 1.0f, 0.75f}, - (Vector2){ 1.0f, 0.5f}, - (Vector2){ 0.75f, 0.0f} // Close the poly - }; - - // Define the base poly vertices from the UV's - // NOTE: They can be specified in any other way - Vector2 points[MAX_POINTS] = { 0 }; - for (int i = 0; i < MAX_POINTS; i++) - { - points[i].x = (texcoords[i].x - 0.5f)*256.0f; - points[i].y = (texcoords[i].y - 0.5f)*256.0f; - } - - // Define the vertices drawing position - // NOTE: Initially same as points but updated every frame - Vector2 positions[MAX_POINTS] = { 0 }; - for (int i = 0; i < MAX_POINTS; i++) positions[i] = points[i]; - - // Load texture to be mapped to poly - Texture texture = LoadTexture("resources/cat.png"); - - float angle = 0.0f; // Rotation angle (in degrees) - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // Update points rotation with an angle transform - // NOTE: Base points position are not modified - angle++; - for (int i = 0; i < MAX_POINTS; i++) positions[i] = Vector2Rotate(points[i], angle*DEG2RAD); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText("textured polygon", 20, 20, 20, DARKGRAY); - - DrawTexturePoly(texture, (Vector2){ GetScreenWidth()/2.0f, GetScreenHeight()/2.0f }, - positions, texcoords, MAX_POINTS, WHITE); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Unload texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -// Draw textured polygon, defined by vertex and texture coordinates -// NOTE: Polygon center must have straight line path to all points -// without crossing perimeter, points must be in anticlockwise order -void DrawTexturePoly(Texture2D texture, Vector2 center, Vector2 *points, Vector2 *texcoords, int pointCount, Color tint) -{ - rlSetTexture(texture.id); - - // Texturing is only supported on RL_QUADS - rlBegin(RL_QUADS); - - rlColor4ub(tint.r, tint.g, tint.b, tint.a); - - for (int i = 0; i < pointCount - 1; i++) - { - rlTexCoord2f(0.5f, 0.5f); - rlVertex2f(center.x, center.y); - - rlTexCoord2f(texcoords[i].x, texcoords[i].y); - rlVertex2f(points[i].x + center.x, points[i].y + center.y); - - rlTexCoord2f(texcoords[i + 1].x, texcoords[i + 1].y); - rlVertex2f(points[i + 1].x + center.x, points[i + 1].y + center.y); - - rlTexCoord2f(texcoords[i + 1].x, texcoords[i + 1].y); - rlVertex2f(points[i + 1].x + center.x, points[i + 1].y + center.y); - } - rlEnd(); - - rlSetTexture(0); -} diff --git a/examples/textures/textures_raw_data.c b/examples/textures/textures_raw_data.c deleted file mode 100644 index 22d7cc0..0000000 --- a/examples/textures/textures_raw_data.c +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Load textures from raw data -* -* NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM) -* -* Example originally created with raylib 1.3, last time updated with raylib 3.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2015-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include // Required for: malloc() and free() - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture from raw data"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - - // Load RAW image data (512x512, 32bit RGBA, no file header) - Image fudesumiRaw = LoadImageRaw("resources/fudesumi.raw", 384, 512, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, 0); - Texture2D fudesumi = LoadTextureFromImage(fudesumiRaw); // Upload CPU (RAM) image to GPU (VRAM) - UnloadImage(fudesumiRaw); // Unload CPU (RAM) image data - - // Generate a checked texture by code - int width = 960; - int height = 480; - - // Dynamic memory allocation to store pixels data (Color type) - Color *pixels = (Color *)malloc(width*height*sizeof(Color)); - - for (int y = 0; y < height; y++) - { - for (int x = 0; x < width; x++) - { - if (((x/32+y/32)/1)%2 == 0) pixels[y*width + x] = ORANGE; - else pixels[y*width + x] = GOLD; - } - } - - // Load pixels data into an image structure and create texture - Image checkedIm = { - .data = pixels, // We can assign pixels directly to data - .width = width, - .height = height, - .format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, - .mipmaps = 1 - }; - - Texture2D checked = LoadTextureFromImage(checkedIm); - UnloadImage(checkedIm); // Unload CPU (RAM) image data (pixels) - //--------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // TODO: Update your variables here - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTexture(checked, screenWidth/2 - checked.width/2, screenHeight/2 - checked.height/2, Fade(WHITE, 0.5f)); - DrawTexture(fudesumi, 430, -30, WHITE); - - DrawText("CHECKED TEXTURE ", 84, 85, 30, BROWN); - DrawText("GENERATED by CODE", 72, 148, 30, BROWN); - DrawText("and RAW IMAGE LOADING", 46, 210, 30, BROWN); - - DrawText("(c) Fudesumi sprite by Eiden Marsal", 310, screenHeight - 20, 10, BROWN); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(fudesumi); // Texture unloading - UnloadTexture(checked); // Texture unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_sprite_anim.c b/examples/textures/textures_sprite_anim.c deleted file mode 100644 index 99efe2e..0000000 --- a/examples/textures/textures_sprite_anim.c +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Sprite animation -* -* Example originally created with raylib 1.3, last time updated with raylib 1.3 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2014-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define MAX_FRAME_SPEED 15 -#define MIN_FRAME_SPEED 1 - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [texture] example - sprite anim"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - Texture2D scarfy = LoadTexture("resources/scarfy.png"); // Texture loading - - Vector2 position = { 350.0f, 280.0f }; - Rectangle frameRec = { 0.0f, 0.0f, (float)scarfy.width/6, (float)scarfy.height }; - int currentFrame = 0; - - int framesCounter = 0; - int framesSpeed = 8; // Number of spritesheet frames shown by second - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - framesCounter++; - - if (framesCounter >= (60/framesSpeed)) - { - framesCounter = 0; - currentFrame++; - - if (currentFrame > 5) currentFrame = 0; - - frameRec.x = (float)currentFrame*(float)scarfy.width/6; - } - - // Control frames speed - if (IsKeyPressed(KEY_RIGHT)) framesSpeed++; - else if (IsKeyPressed(KEY_LEFT)) framesSpeed--; - - if (framesSpeed > MAX_FRAME_SPEED) framesSpeed = MAX_FRAME_SPEED; - else if (framesSpeed < MIN_FRAME_SPEED) framesSpeed = MIN_FRAME_SPEED; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTexture(scarfy, 15, 40, WHITE); - DrawRectangleLines(15, 40, scarfy.width, scarfy.height, LIME); - DrawRectangleLines(15 + (int)frameRec.x, 40 + (int)frameRec.y, (int)frameRec.width, (int)frameRec.height, RED); - - DrawText("FRAME SPEED: ", 165, 210, 10, DARKGRAY); - DrawText(TextFormat("%02i FPS", framesSpeed), 575, 210, 10, DARKGRAY); - DrawText("PRESS RIGHT/LEFT KEYS to CHANGE SPEED!", 290, 240, 10, DARKGRAY); - - for (int i = 0; i < MAX_FRAME_SPEED; i++) - { - if (i < framesSpeed) DrawRectangle(250 + 21*i, 205, 20, 20, RED); - DrawRectangleLines(250 + 21*i, 205, 20, 20, MAROON); - } - - DrawTextureRec(scarfy, frameRec, position, WHITE); // Draw part of the texture - - DrawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(scarfy); // Texture unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_sprite_button.c b/examples/textures/textures_sprite_button.c deleted file mode 100644 index bd98918..0000000 --- a/examples/textures/textures_sprite_button.c +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - sprite button -* -* Example originally created with raylib 2.5, last time updated with raylib 2.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define NUM_FRAMES 3 // Number of frames (rectangles) for the button sprite texture - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - sprite button"); - - InitAudioDevice(); // Initialize audio device - - Sound fxButton = LoadSound("resources/buttonfx.wav"); // Load button sound - Texture2D button = LoadTexture("resources/button.png"); // Load button texture - - // Define frame rectangle for drawing - float frameHeight = (float)button.height/NUM_FRAMES; - Rectangle sourceRec = { 0, 0, (float)button.width, frameHeight }; - - // Define button bounds on screen - Rectangle btnBounds = { screenWidth/2.0f - button.width/2.0f, screenHeight/2.0f - button.height/NUM_FRAMES/2.0f, (float)button.width, frameHeight }; - - int btnState = 0; // Button state: 0-NORMAL, 1-MOUSE_HOVER, 2-PRESSED - bool btnAction = false; // Button action should be activated - - Vector2 mousePoint = { 0.0f, 0.0f }; - - SetTargetFPS(60); - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - mousePoint = GetMousePosition(); - btnAction = false; - - // Check button state - if (CheckCollisionPointRec(mousePoint, btnBounds)) - { - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) btnState = 2; - else btnState = 1; - - if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) btnAction = true; - } - else btnState = 0; - - if (btnAction) - { - PlaySound(fxButton); - - // TODO: Any desired action - } - - // Calculate button frame rectangle to draw depending on button state - sourceRec.y = btnState*frameHeight; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTextureRec(button, sourceRec, (Vector2){ btnBounds.x, btnBounds.y }, WHITE); // Draw button frame - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(button); // Unload button texture - UnloadSound(fxButton); // Unload sound - - CloseAudioDevice(); // Close audio device - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_sprite_explosion.c b/examples/textures/textures_sprite_explosion.c deleted file mode 100644 index a6cbd3e..0000000 --- a/examples/textures/textures_sprite_explosion.c +++ /dev/null @@ -1,125 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - sprite explosion -* -* Example originally created with raylib 2.5, last time updated with raylib 3.5 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2019-2023 Anata and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define NUM_FRAMES_PER_LINE 5 -#define NUM_LINES 5 - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - sprite explosion"); - - InitAudioDevice(); - - // Load explosion sound - Sound fxBoom = LoadSound("resources/boom.wav"); - - // Load explosion texture - Texture2D explosion = LoadTexture("resources/explosion.png"); - - // Init variables for animation - float frameWidth = (float)(explosion.width/NUM_FRAMES_PER_LINE); // Sprite one frame rectangle width - float frameHeight = (float)(explosion.height/NUM_LINES); // Sprite one frame rectangle height - int currentFrame = 0; - int currentLine = 0; - - Rectangle frameRec = { 0, 0, frameWidth, frameHeight }; - Vector2 position = { 0.0f, 0.0f }; - - bool active = false; - int framesCounter = 0; - - SetTargetFPS(120); - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - - // Check for mouse button pressed and activate explosion (if not active) - if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && !active) - { - position = GetMousePosition(); - active = true; - - position.x -= frameWidth/2.0f; - position.y -= frameHeight/2.0f; - - PlaySound(fxBoom); - } - - // Compute explosion animation frames - if (active) - { - framesCounter++; - - if (framesCounter > 2) - { - currentFrame++; - - if (currentFrame >= NUM_FRAMES_PER_LINE) - { - currentFrame = 0; - currentLine++; - - if (currentLine >= NUM_LINES) - { - currentLine = 0; - active = false; - } - } - - framesCounter = 0; - } - } - - frameRec.x = frameWidth*currentFrame; - frameRec.y = frameHeight*currentLine; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - // Draw explosion required frame rectangle - if (active) DrawTextureRec(explosion, frameRec, position, WHITE); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(explosion); // Unload texture - UnloadSound(fxBoom); // Unload sound - - CloseAudioDevice(); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_srcrec_dstrec.c b/examples/textures/textures_srcrec_dstrec.c deleted file mode 100644 index caf8f64..0000000 --- a/examples/textures/textures_srcrec_dstrec.c +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Texture source and destination rectangles -* -* Example originally created with raylib 1.3, last time updated with raylib 1.3 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2015-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] examples - texture source and destination rectangles"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - - Texture2D scarfy = LoadTexture("resources/scarfy.png"); // Texture loading - - int frameWidth = scarfy.width/6; - int frameHeight = scarfy.height; - - // Source rectangle (part of the texture to use for drawing) - Rectangle sourceRec = { 0.0f, 0.0f, (float)frameWidth, (float)frameHeight }; - - // Destination rectangle (screen rectangle where drawing part of texture) - Rectangle destRec = { screenWidth/2.0f, screenHeight/2.0f, frameWidth*2.0f, frameHeight*2.0f }; - - // Origin of the texture (rotation/scale point), it's relative to destination rectangle size - Vector2 origin = { (float)frameWidth, (float)frameHeight }; - - int rotation = 0; - - SetTargetFPS(60); - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - rotation++; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - // NOTE: Using DrawTexturePro() we can easily rotate and scale the part of the texture we draw - // sourceRec defines the part of the texture we use for drawing - // destRec defines the rectangle where our texture part will fit (scaling it to fit) - // origin defines the point of the texture used as reference for rotation and scaling - // rotation defines the texture rotation (using origin as rotation point) - DrawTexturePro(scarfy, sourceRec, destRec, origin, (float)rotation, WHITE); - - DrawLine((int)destRec.x, 0, (int)destRec.x, screenHeight, GRAY); - DrawLine(0, (int)destRec.y, screenWidth, (int)destRec.y, GRAY); - - DrawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(scarfy); // Texture unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures/textures_textured_curve.c b/examples/textures/textures_textured_curve.c deleted file mode 100644 index 3c2f060..0000000 --- a/examples/textures/textures_textured_curve.c +++ /dev/null @@ -1,259 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Draw a texture along a segmented curve -* -* Example originally created with raylib 4.5, last time updated with raylib 4.5 -* -* Example contributed by Jeffery Myers and reviewed by Ramon Santamaria (@raysan5) -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2022-2023 Jeffery Myers and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - - -#include "raylib.h" - -#include "raymath.h" -#include "rlgl.h" - -#include // Required for: powf() -#include // Required for: NULL - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -static Texture texRoad = { 0 }; - -static bool showCurve = false; - -static float curveWidth = 50; -static int curveSegments = 24; - -static Vector2 curveStartPosition = { 0 }; -static Vector2 curveStartPositionTangent = { 0 }; - -static Vector2 curveEndPosition = { 0 }; -static Vector2 curveEndPositionTangent = { 0 }; - -static Vector2 *curveSelectedPoint = NULL; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -static void UpdateOptions(void); -static void UpdateCurve(void); -static void DrawCurve(void); -static void DrawTexturedCurve(void); - - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main() -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - SetConfigFlags(FLAG_VSYNC_HINT | FLAG_MSAA_4X_HINT); - InitWindow(screenWidth, screenHeight, "raylib [textures] examples - textured curve"); - - // Load the road texture - texRoad = LoadTexture("resources/road.png"); - SetTextureFilter(texRoad, TEXTURE_FILTER_BILINEAR); - - // Setup the curve - curveStartPosition = (Vector2){ 80, 100 }; - curveStartPositionTangent = (Vector2){ 100, 300 }; - - curveEndPosition = (Vector2){ 700, 350 }; - curveEndPositionTangent = (Vector2){ 600, 100 }; - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - UpdateCurve(); - UpdateOptions(); - - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTexturedCurve(); - DrawCurve(); - - DrawText("Drag points to move curve, press SPACE to show/hide base curve", 10, 10, 10, DARKGRAY); - DrawText(TextFormat("Curve width: %2.0f (Use + and - to adjust)", curveWidth), 10, 30, 10, DARKGRAY); - DrawText(TextFormat("Curve segments: %d (Use LEFT and RIGHT to adjust)", curveSegments), 10, 50, 10, DARKGRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texRoad); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -static void DrawCurve(void) -{ - if (showCurve) DrawLineBezierCubic(curveStartPosition, curveEndPosition, curveStartPositionTangent, curveEndPositionTangent, 2, BLUE); - - // Draw the various control points and highlight where the mouse is - DrawLineV(curveStartPosition, curveStartPositionTangent, SKYBLUE); - DrawLineV(curveEndPosition, curveEndPositionTangent, PURPLE); - Vector2 mouse = GetMousePosition(); - - if (CheckCollisionPointCircle(mouse, curveStartPosition, 6)) DrawCircleV(curveStartPosition, 7, YELLOW); - DrawCircleV(curveStartPosition, 5, RED); - - if (CheckCollisionPointCircle(mouse, curveStartPositionTangent, 6)) DrawCircleV(curveStartPositionTangent, 7, YELLOW); - DrawCircleV(curveStartPositionTangent, 5, MAROON); - - if (CheckCollisionPointCircle(mouse, curveEndPosition, 6)) DrawCircleV(curveEndPosition, 7, YELLOW); - DrawCircleV(curveEndPosition, 5, GREEN); - - if (CheckCollisionPointCircle(mouse, curveEndPositionTangent, 6)) DrawCircleV(curveEndPositionTangent, 7, YELLOW); - DrawCircleV(curveEndPositionTangent, 5, DARKGREEN); -} - -static void UpdateCurve(void) -{ - // If the mouse is not down, we are not editing the curve so clear the selection - if (!IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - curveSelectedPoint = NULL; - return; - } - - // If a point was selected, move it - if (curveSelectedPoint) - { - *curveSelectedPoint = Vector2Add(*curveSelectedPoint, GetMouseDelta()); - return; - } - - // The mouse is down, and nothing was selected, so see if anything was picked - Vector2 mouse = GetMousePosition(); - - if (CheckCollisionPointCircle(mouse, curveStartPosition, 6)) curveSelectedPoint = &curveStartPosition; - else if (CheckCollisionPointCircle(mouse, curveStartPositionTangent, 6)) curveSelectedPoint = &curveStartPositionTangent; - else if (CheckCollisionPointCircle(mouse, curveEndPosition, 6)) curveSelectedPoint = &curveEndPosition; - else if (CheckCollisionPointCircle(mouse, curveEndPositionTangent, 6)) curveSelectedPoint = &curveEndPositionTangent; -} - -static void DrawTexturedCurve(void) -{ - const float step = 1.0f/curveSegments; - - Vector2 previous = curveStartPosition; - Vector2 previousTangent = { 0 }; - float previousV = 0; - - // We can't compute a tangent for the first point, so we need to reuse the tangent from the first segment - bool tangentSet = false; - - Vector2 current = { 0 }; - float t = 0.0f; - - for (int i = 1; i <= curveSegments; i++) - { - // Segment the curve - t = step*i; - float a = powf(1 - t, 3); - float b = 3*powf(1 - t, 2)*t; - float c = 3*(1 - t)*powf(t, 2); - float d = powf(t, 3); - - // Compute the endpoint for this segment - current.y = a*curveStartPosition.y + b*curveStartPositionTangent.y + c*curveEndPositionTangent.y + d*curveEndPosition.y; - current.x = a*curveStartPosition.x + b*curveStartPositionTangent.x + c*curveEndPositionTangent.x + d*curveEndPosition.x; - - // Vector from previous to current - Vector2 delta = { current.x - previous.x, current.y - previous.y }; - - // The right hand normal to the delta vector - Vector2 normal = Vector2Normalize((Vector2){ -delta.y, delta.x }); - - // The v texture coordinate of the segment (add up the length of all the segments so far) - float v = previousV + Vector2Length(delta); - - // Make sure the start point has a normal - if (!tangentSet) - { - previousTangent = normal; - tangentSet = true; - } - - // Extend out the normals from the previous and current points to get the quad for this segment - Vector2 prevPosNormal = Vector2Add(previous, Vector2Scale(previousTangent, curveWidth)); - Vector2 prevNegNormal = Vector2Add(previous, Vector2Scale(previousTangent, -curveWidth)); - - Vector2 currentPosNormal = Vector2Add(current, Vector2Scale(normal, curveWidth)); - Vector2 currentNegNormal = Vector2Add(current, Vector2Scale(normal, -curveWidth)); - - // Draw the segment as a quad - rlSetTexture(texRoad.id); - rlBegin(RL_QUADS); - - rlColor4ub(255,255,255,255); - rlNormal3f(0.0f, 0.0f, 1.0f); - - rlTexCoord2f(0, previousV); - rlVertex2f(prevNegNormal.x, prevNegNormal.y); - - rlTexCoord2f(1, previousV); - rlVertex2f(prevPosNormal.x, prevPosNormal.y); - - rlTexCoord2f(1, v); - rlVertex2f(currentPosNormal.x, currentPosNormal.y); - - rlTexCoord2f(0, v); - rlVertex2f(currentNegNormal.x, currentNegNormal.y); - - rlEnd(); - - // The current step is the start of the next step - previous = current; - previousTangent = normal; - previousV = v; - } -} - -static void UpdateOptions(void) -{ - if (IsKeyPressed(KEY_SPACE)) showCurve = !showCurve; - - // Update with - if (IsKeyPressed(KEY_EQUAL)) curveWidth += 2; - if (IsKeyPressed(KEY_MINUS)) curveWidth -= 2; - - if (curveWidth < 2) curveWidth = 2; - - // Update segments - if (IsKeyPressed(KEY_LEFT)) curveSegments -= 2; - if (IsKeyPressed(KEY_RIGHT)) curveSegments += 2; - - if (curveSegments < 2) curveSegments = 2; -} diff --git a/examples/textures/textures_to_image.c b/examples/textures/textures_to_image.c deleted file mode 100644 index fd3c848..0000000 --- a/examples/textures/textures_to_image.c +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Retrieve image data from texture: LoadImageFromTexture() -* -* NOTE: Images are loaded in CPU memory (RAM); textures are loaded in GPU memory (VRAM) -* -* Example originally created with raylib 1.3, last time updated with raylib 4.0 -* -* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software -* -* Copyright (c) 2015-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture to image"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - - Image image = LoadImage("resources/raylib_logo.png"); // Load image data into CPU memory (RAM) - Texture2D texture = LoadTextureFromImage(image); // Image converted to texture, GPU memory (RAM -> VRAM) - UnloadImage(image); // Unload image data from CPU memory (RAM) - - image = LoadImageFromTexture(texture); // Load image from GPU texture (VRAM -> RAM) - UnloadTexture(texture); // Unload texture from GPU memory (VRAM) - - texture = LoadTextureFromImage(image); // Recreate texture from retrieved image data (RAM -> VRAM) - UnloadImage(image); // Unload retrieved image data from CPU memory (RAM) - //--------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // TODO: Update your variables here - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTexture(texture, screenWidth/2 - texture.width/2, screenHeight/2 - texture.height/2, WHITE); - - DrawText("this IS a texture loaded from an image!", 300, 370, 10, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Texture unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/src/bindings/js_raylib_core.h b/src/bindings/js_raylib_core.h index a125549..026c006 100644 --- a/src/bindings/js_raylib_core.h +++ b/src/bindings/js_raylib_core.h @@ -8778,15 +8778,15 @@ static JSValue js_matrixFrustum(JSContext * ctx, JSValueConst this_val, int argc } static JSValue js_matrixPerspective(JSContext * ctx, JSValueConst this_val, int argc, JSValueConst * argv) { - double fovy; - JS_ToFloat64(ctx, &fovy, argv[0]); + double fovY; + JS_ToFloat64(ctx, &fovY, argv[0]); double aspect; JS_ToFloat64(ctx, &aspect, argv[1]); - double near; - JS_ToFloat64(ctx, &near, argv[2]); - double far; - JS_ToFloat64(ctx, &far, argv[3]); - Matrix returnVal = MatrixPerspective(fovy, aspect, near, far); + double nearPlane; + JS_ToFloat64(ctx, &nearPlane, argv[2]); + double farPlane; + JS_ToFloat64(ctx, &farPlane, argv[3]); + Matrix returnVal = MatrixPerspective(fovY, aspect, nearPlane, farPlane); Matrix* ret_ptr = (Matrix*)js_malloc(ctx, sizeof(Matrix)); *ret_ptr = returnVal; JSValue ret = JS_NewObjectClass(ctx, js_Matrix_class_id); @@ -8803,11 +8803,11 @@ static JSValue js_matrixOrtho(JSContext * ctx, JSValueConst this_val, int argc, JS_ToFloat64(ctx, &bottom, argv[2]); double top; JS_ToFloat64(ctx, &top, argv[3]); - double near; - JS_ToFloat64(ctx, &near, argv[4]); - double far; - JS_ToFloat64(ctx, &far, argv[5]); - Matrix returnVal = MatrixOrtho(left, right, bottom, top, near, far); + double nearPlane; + JS_ToFloat64(ctx, &nearPlane, argv[4]); + double farPlane; + JS_ToFloat64(ctx, &farPlane, argv[5]); + Matrix returnVal = MatrixOrtho(left, right, bottom, top, nearPlane, farPlane); Matrix* ret_ptr = (Matrix*)js_malloc(ctx, sizeof(Matrix)); *ret_ptr = returnVal; JSValue ret = JS_NewObjectClass(ctx, js_Matrix_class_id); diff --git a/thirdparty/raylib b/thirdparty/raylib index e190b7e..a9ff13a 160000 --- a/thirdparty/raylib +++ b/thirdparty/raylib @@ -1 +1 @@ -Subproject commit e190b7eee9199b681a8c50fb69f2fce07e92c7af +Subproject commit a9ff13a367b7bd166436b12b741b8c8199f1c85f