From 2f60d6364c39b24e5aa002e28e3db4659952fb71 Mon Sep 17 00:00:00 2001 From: Alexander Klingenbeck Date: Thu, 20 Jul 2023 13:15:01 +0200 Subject: [PATCH] Update readme. Delete un-ported examples --- 2023-07-20-13-08-52.png | Bin 0 -> 422880 bytes examples/core/core_3d_picking.c | 118 --- examples/core/core_custom_logging.c | 88 -- examples/core/core_input_gestures.c | 119 --- examples/core/core_input_multitouch.c | 79 -- examples/core/core_random_values.c | 72 -- examples/core/core_scissor_test.c | 76 -- examples/core/core_smooth_pixelperfect.c | 122 --- examples/core/core_split_screen.c | 151 ---- examples/core/core_window_flags.c | 196 ----- examples/core/core_window_letterbox.c | 107 --- examples/core/core_window_should_close.c | 77 -- examples/core/core_world_screen.c | 85 -- ...ng2.js => js_shaders_gradient_lighting.js} | 0 examples/text/text_codepoints_loading.c | 155 ---- examples/text/text_draw_3d.c | 750 ------------------ examples/text/text_font_filters.c | 137 ---- examples/text/text_font_loading.c | 96 --- examples/text/text_font_loading.js | 86 ++ examples/text/text_font_sdf.c | 146 ---- examples/text/text_font_spritefont.c | 91 --- examples/text/text_format_text.c | 67 -- examples/text/text_input_box.c | 132 --- examples/text/text_raylib_fonts.c | 110 --- examples/text/text_rectangle_bounds.c | 268 ------- examples/text/text_unicode.c | 468 ----------- examples/text/text_writing_anim.c | 67 -- readme.md | 76 +- 28 files changed, 159 insertions(+), 3780 deletions(-) create mode 100644 2023-07-20-13-08-52.png delete mode 100644 examples/core/core_3d_picking.c delete mode 100644 examples/core/core_custom_logging.c delete mode 100644 examples/core/core_input_gestures.c delete mode 100644 examples/core/core_input_multitouch.c delete mode 100644 examples/core/core_random_values.c delete mode 100644 examples/core/core_scissor_test.c delete mode 100644 examples/core/core_smooth_pixelperfect.c delete mode 100644 examples/core/core_split_screen.c delete mode 100644 examples/core/core_window_flags.c delete mode 100644 examples/core/core_window_letterbox.c delete mode 100644 examples/core/core_window_should_close.c delete mode 100644 examples/core/core_world_screen.c rename examples/shaders/{shaders_basic_lighting2.js => js_shaders_gradient_lighting.js} (100%) delete mode 100644 examples/text/text_codepoints_loading.c delete mode 100644 examples/text/text_draw_3d.c delete mode 100644 examples/text/text_font_filters.c delete mode 100644 examples/text/text_font_loading.c create mode 100644 examples/text/text_font_loading.js delete mode 100644 examples/text/text_font_sdf.c delete mode 100644 examples/text/text_font_spritefont.c delete mode 100644 examples/text/text_format_text.c delete mode 100644 examples/text/text_input_box.c delete mode 100644 examples/text/text_raylib_fonts.c delete mode 100644 examples/text/text_rectangle_bounds.c delete mode 100644 examples/text/text_unicode.c delete mode 100644 examples/text/text_writing_anim.c diff --git a/2023-07-20-13-08-52.png b/2023-07-20-13-08-52.png new file mode 100644 index 0000000000000000000000000000000000000000..ee21efdf78889f42f380da23bd18279a067f12b5 GIT binary patch literal 422880 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
eNJc>iDo&Ks%%zCcW|f1DSsjN`Kn~ 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

nh1imLX|)l$&I6=fm_A7$%o6$Fio487f4`wsp9 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%0AY>C}z}x$YZwwM`+|^AC+NO+Q5cA6H); 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 %v2qQ!-<}uI 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 // Required for: fopen(), fclose(), fputc(), fwrite(), printf(), fprintf(), funopen() -#include // Required for: time_t, tm, time(), localtime(), strftime() - -// Custom logging function -void CustomLog(int msgType, const char *text, va_list args) -{ - char timeStr[64] = { 0 }; - time_t now = time(NULL); - struct tm *tm_info = localtime(&now); - - strftime(timeStr, sizeof(timeStr), "%Y-%m-%d %H:%M:%S", tm_info); - printf("[%s] ", timeStr); - - switch (msgType) - { - case LOG_INFO: printf("[INFO] : "); break; - case LOG_ERROR: printf("[ERROR]: "); break; - case LOG_WARNING: printf("[WARN] : "); break; - case LOG_DEBUG: printf("[DEBUG]: "); break; - default: break; - } - - vprintf(text, args); - printf("\n"); -} - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - // Set custom logger - SetTraceLogCallback(CustomLog); - - InitWindow(screenWidth, screenHeight, "raylib [core] example - custom logging"); - - 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); - - DrawText("Check out the console output to see the custom logger in action!", 60, 200, 20, LIGHTGRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/core/core_input_gestures.c b/examples/core/core_input_gestures.c deleted file mode 100644 index 312e78f..0000000 --- a/examples/core/core_input_gestures.c +++ /dev/null @@ -1,119 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - Input Gestures Detection -* -* Example originally created with raylib 1.4, 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) 2016-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define MAX_GESTURE_STRINGS 20 - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [core] example - input gestures"); - - Vector2 touchPosition = { 0, 0 }; - Rectangle touchArea = { 220, 10, screenWidth - 230.0f, screenHeight - 20.0f }; - - int gesturesCount = 0; - char gestureStrings[MAX_GESTURE_STRINGS][32]; - - int currentGesture = GESTURE_NONE; - int lastGesture = GESTURE_NONE; - - //SetGesturesEnabled(0b0000000000001001); // Enable only some gestures to be detected - - 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 - //---------------------------------------------------------------------------------- - lastGesture = currentGesture; - currentGesture = GetGestureDetected(); - touchPosition = GetTouchPosition(0); - - if (CheckCollisionPointRec(touchPosition, touchArea) && (currentGesture != GESTURE_NONE)) - { - if (currentGesture != lastGesture) - { - // Store gesture string - switch (currentGesture) - { - case GESTURE_TAP: TextCopy(gestureStrings[gesturesCount], "GESTURE TAP"); break; - case GESTURE_DOUBLETAP: TextCopy(gestureStrings[gesturesCount], "GESTURE DOUBLETAP"); break; - case GESTURE_HOLD: TextCopy(gestureStrings[gesturesCount], "GESTURE HOLD"); break; - case GESTURE_DRAG: TextCopy(gestureStrings[gesturesCount], "GESTURE DRAG"); break; - case GESTURE_SWIPE_RIGHT: TextCopy(gestureStrings[gesturesCount], "GESTURE SWIPE RIGHT"); break; - case GESTURE_SWIPE_LEFT: TextCopy(gestureStrings[gesturesCount], "GESTURE SWIPE LEFT"); break; - case GESTURE_SWIPE_UP: TextCopy(gestureStrings[gesturesCount], "GESTURE SWIPE UP"); break; - case GESTURE_SWIPE_DOWN: TextCopy(gestureStrings[gesturesCount], "GESTURE SWIPE DOWN"); break; - case GESTURE_PINCH_IN: TextCopy(gestureStrings[gesturesCount], "GESTURE PINCH IN"); break; - case GESTURE_PINCH_OUT: TextCopy(gestureStrings[gesturesCount], "GESTURE PINCH OUT"); break; - default: break; - } - - gesturesCount++; - - // Reset gestures strings - if (gesturesCount >= MAX_GESTURE_STRINGS) - { - for (int i = 0; i < MAX_GESTURE_STRINGS; i++) TextCopy(gestureStrings[i], "\0"); - - gesturesCount = 0; - } - } - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawRectangleRec(touchArea, GRAY); - DrawRectangle(225, 15, screenWidth - 240, screenHeight - 30, RAYWHITE); - - DrawText("GESTURES TEST AREA", screenWidth - 270, screenHeight - 40, 20, Fade(GRAY, 0.5f)); - - for (int i = 0; i < gesturesCount; i++) - { - if (i%2 == 0) DrawRectangle(10, 30 + 20*i, 200, 20, Fade(LIGHTGRAY, 0.5f)); - else DrawRectangle(10, 30 + 20*i, 200, 20, Fade(LIGHTGRAY, 0.3f)); - - if (i < gesturesCount - 1) DrawText(gestureStrings[i], 35, 36 + 20*i, 10, DARKGRAY); - else DrawText(gestureStrings[i], 35, 36 + 20*i, 10, MAROON); - } - - DrawRectangleLines(10, 29, 200, screenHeight - 50, GRAY); - DrawText("DETECTED GESTURES", 50, 15, 10, GRAY); - - if (currentGesture != GESTURE_NONE) DrawCircleV(touchPosition, 30, MAROON); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- -} \ No newline at end of file diff --git a/examples/core/core_input_multitouch.c b/examples/core/core_input_multitouch.c deleted file mode 100644 index 37817e5..0000000 --- a/examples/core/core_input_multitouch.c +++ /dev/null @@ -1,79 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - Input multitouch -* -* Example originally created with raylib 2.1, last time updated with raylib 2.5 -* -* Example contributed by Berni (@Berni8k) 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 Berni (@Berni8k) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define MAX_TOUCH_POINTS 10 - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [core] example - input multitouch"); - - Vector2 touchPositions[MAX_TOUCH_POINTS] = { 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 - //---------------------------------------------------------------------------------- - // Get the touch point count ( how many fingers are touching the screen ) - int tCount = GetTouchPointCount(); - // Clamp touch points available ( set the maximum touch points allowed ) - if(tCount > MAX_TOUCH_POINTS) tCount = MAX_TOUCH_POINTS; - // Get touch points positions - for (int i = 0; i < tCount; ++i) touchPositions[i] = GetTouchPosition(i); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - for (int i = 0; i < tCount; ++i) - { - // Make sure point is not (0, 0) as this means there is no touch for it - if ((touchPositions[i].x > 0) && (touchPositions[i].y > 0)) - { - // Draw circle and touch index number - DrawCircleV(touchPositions[i], 34, ORANGE); - DrawText(TextFormat("%d", i), (int)touchPositions[i].x - 10, (int)touchPositions[i].y - 70, 40, BLACK); - } - } - - DrawText("touch the screen at multiple locations to get multiple balls", 10, 10, 20, DARKGRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/core/core_random_values.c b/examples/core/core_random_values.c deleted file mode 100644 index c2225bc..0000000 --- a/examples/core/core_random_values.c +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - Generate random values -* -* Example originally created with raylib 1.1, last time updated with raylib 1.1 -* -* 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 [core] example - generate random values"); - - // SetRandomSeed(0xaabbccff); // Set a custom random seed if desired, by default: "time(NULL)" - - int randValue = GetRandomValue(-8, 5); // Get a random integer number between -8 and 5 (both included) - - int framesCounter = 0; // Variable used to count frames - - 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++; - - // Every two seconds (120 frames) a new random value is generated - if (((framesCounter/120)%2) == 1) - { - randValue = GetRandomValue(-8, 5); - framesCounter = 0; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText("Every 2 seconds a new random value is generated:", 130, 100, 20, MAROON); - - DrawText(TextFormat("%i", randValue), 360, 180, 80, LIGHTGRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/core/core_scissor_test.c b/examples/core/core_scissor_test.c deleted file mode 100644 index c2b853c..0000000 --- a/examples/core/core_scissor_test.c +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - Scissor test -* -* Example originally created with raylib 2.5, 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) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [core] example - scissor test"); - - Rectangle scissorArea = { 0, 0, 300, 300 }; - bool scissorMode = true; - - 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_S)) scissorMode = !scissorMode; - - // Centre the scissor area around the mouse position - scissorArea.x = GetMouseX() - scissorArea.width/2; - scissorArea.y = GetMouseY() - scissorArea.height/2; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - if (scissorMode) BeginScissorMode((int)scissorArea.x, (int)scissorArea.y, (int)scissorArea.width, (int)scissorArea.height); - - // Draw full screen rectangle and some text - // NOTE: Only part defined by scissor area will be rendered - DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), RED); - DrawText("Move the mouse around to reveal this text!", 190, 200, 20, LIGHTGRAY); - - if (scissorMode) EndScissorMode(); - - DrawRectangleLinesEx(scissorArea, 1, BLACK); - DrawText("Press S to toggle scissor test", 10, 10, 20, BLACK); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/core/core_smooth_pixelperfect.c b/examples/core/core_smooth_pixelperfect.c deleted file mode 100644 index 776706c..0000000 --- a/examples/core/core_smooth_pixelperfect.c +++ /dev/null @@ -1,122 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - smooth pixel-perfect camera -* -* Example originally created with raylib 3.7, last time updated with raylib 4.0 -* -* Example contributed by Giancamillo Alessandroni (@NotManyIdeasDev) 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 Giancamillo Alessandroni (@NotManyIdeasDev) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include // Required for: sinf(), cosf() - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - const int virtualScreenWidth = 160; - const int virtualScreenHeight = 90; - - const float virtualRatio = (float)screenWidth/(float)virtualScreenWidth; - - InitWindow(screenWidth, screenHeight, "raylib [core] example - smooth pixel-perfect camera"); - - Camera2D worldSpaceCamera = { 0 }; // Game world camera - worldSpaceCamera.zoom = 1.0f; - - Camera2D screenSpaceCamera = { 0 }; // Smoothing camera - screenSpaceCamera.zoom = 1.0f; - - RenderTexture2D target = LoadRenderTexture(virtualScreenWidth, virtualScreenHeight); // This is where we'll draw all our objects. - - Rectangle rec01 = { 70.0f, 35.0f, 20.0f, 20.0f }; - Rectangle rec02 = { 90.0f, 55.0f, 30.0f, 10.0f }; - Rectangle rec03 = { 80.0f, 65.0f, 15.0f, 25.0f }; - - // The target's height is flipped (in the source Rectangle), due to OpenGL reasons - Rectangle sourceRec = { 0.0f, 0.0f, (float)target.texture.width, -(float)target.texture.height }; - Rectangle destRec = { -virtualRatio, -virtualRatio, screenWidth + (virtualRatio*2), screenHeight + (virtualRatio*2) }; - - Vector2 origin = { 0.0f, 0.0f }; - - float rotation = 0.0f; - - float cameraX = 0.0f; - float cameraY = 0.0f; - - SetTargetFPS(60); - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - rotation += 60.0f*GetFrameTime(); // Rotate the rectangles, 60 degrees per second - - // Make the camera move to demonstrate the effect - cameraX = (sinf(GetTime())*50.0f) - 10.0f; - cameraY = cosf(GetTime())*30.0f; - - // Set the camera's target to the values computed above - screenSpaceCamera.target = (Vector2){ cameraX, cameraY }; - - // Round worldSpace coordinates, keep decimals into screenSpace coordinates - worldSpaceCamera.target.x = (int)screenSpaceCamera.target.x; - screenSpaceCamera.target.x -= worldSpaceCamera.target.x; - screenSpaceCamera.target.x *= virtualRatio; - - worldSpaceCamera.target.y = (int)screenSpaceCamera.target.y; - screenSpaceCamera.target.y -= worldSpaceCamera.target.y; - screenSpaceCamera.target.y *= virtualRatio; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginTextureMode(target); - ClearBackground(RAYWHITE); - - BeginMode2D(worldSpaceCamera); - DrawRectanglePro(rec01, origin, rotation, BLACK); - DrawRectanglePro(rec02, origin, -rotation, RED); - DrawRectanglePro(rec03, origin, rotation + 45.0f, BLUE); - EndMode2D(); - EndTextureMode(); - - BeginDrawing(); - ClearBackground(RED); - - BeginMode2D(screenSpaceCamera); - DrawTexturePro(target.texture, sourceRec, destRec, origin, 0.0f, WHITE); - EndMode2D(); - - DrawText(TextFormat("Screen resolution: %ix%i", screenWidth, screenHeight), 10, 10, 20, DARKBLUE); - DrawText(TextFormat("World resolution: %ix%i", virtualScreenWidth, virtualScreenHeight), 10, 40, 20, DARKGREEN); - DrawFPS(GetScreenWidth() - 95, 10); - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadRenderTexture(target); // Unload render texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/core/core_split_screen.c b/examples/core/core_split_screen.c deleted file mode 100644 index 50cfcf7..0000000 --- a/examples/core/core_split_screen.c +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - split screen -* -* Example originally created with raylib 3.7, last time updated with raylib 4.0 -* -* Example contributed by Jeffery Myers (@JeffM2501) 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 Jeffery Myers (@JeffM2501) -* -********************************************************************************************/ - -#include "raylib.h" - -Camera cameraPlayer1 = { 0 }; -Camera cameraPlayer2 = { 0 }; - -// Scene drawing -void DrawScene(void) -{ - int count = 5; - float spacing = 4; - - // Grid of cube trees on a plane to make a "world" - DrawPlane((Vector3){ 0, 0, 0 }, (Vector2){ 50, 50 }, BEIGE); // Simple world plane - - for (float x = -count*spacing; x <= count*spacing; x += spacing) - { - for (float z = -count*spacing; z <= count*spacing; z += spacing) - { - DrawCube((Vector3) { x, 1.5f, z }, 1, 1, 1, LIME); - DrawCube((Vector3) { x, 0.5f, z }, 0.25f, 1, 0.25f, BROWN); - } - } - - // Draw a cube at each player's position - DrawCube(cameraPlayer1.position, 1, 1, 1, RED); - DrawCube(cameraPlayer2.position, 1, 1, 1, BLUE); -} - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [core] example - split screen"); - - // Setup player 1 camera and screen - cameraPlayer1.fovy = 45.0f; - cameraPlayer1.up.y = 1.0f; - cameraPlayer1.target.y = 1.0f; - cameraPlayer1.position.z = -3.0f; - cameraPlayer1.position.y = 1.0f; - - RenderTexture screenPlayer1 = LoadRenderTexture(screenWidth/2, screenHeight); - - // Setup player two camera and screen - cameraPlayer2.fovy = 45.0f; - cameraPlayer2.up.y = 1.0f; - cameraPlayer2.target.y = 3.0f; - cameraPlayer2.position.x = -3.0f; - cameraPlayer2.position.y = 3.0f; - - RenderTexture screenPlayer2 = LoadRenderTexture(screenWidth / 2, screenHeight); - - // Build a flipped rectangle the size of the split view to use for drawing later - Rectangle splitScreenRect = { 0.0f, 0.0f, (float)screenPlayer1.texture.width, (float)-screenPlayer1.texture.height }; - - 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 anyone moves this frame, how far will they move based on the time since the last frame - // this moves thigns at 10 world units per second, regardless of the actual FPS - float offsetThisFrame = 10.0f*GetFrameTime(); - - // Move Player1 forward and backwards (no turning) - if (IsKeyDown(KEY_W)) - { - cameraPlayer1.position.z += offsetThisFrame; - cameraPlayer1.target.z += offsetThisFrame; - } - else if (IsKeyDown(KEY_S)) - { - cameraPlayer1.position.z -= offsetThisFrame; - cameraPlayer1.target.z -= offsetThisFrame; - } - - // Move Player2 forward and backwards (no turning) - if (IsKeyDown(KEY_UP)) - { - cameraPlayer2.position.x += offsetThisFrame; - cameraPlayer2.target.x += offsetThisFrame; - } - else if (IsKeyDown(KEY_DOWN)) - { - cameraPlayer2.position.x -= offsetThisFrame; - cameraPlayer2.target.x -= offsetThisFrame; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - // Draw Player1 view to the render texture - BeginTextureMode(screenPlayer1); - ClearBackground(SKYBLUE); - BeginMode3D(cameraPlayer1); - DrawScene(); - EndMode3D(); - DrawText("PLAYER1 W/S to move", 10, 10, 20, RED); - EndTextureMode(); - - // Draw Player2 view to the render texture - BeginTextureMode(screenPlayer2); - ClearBackground(SKYBLUE); - BeginMode3D(cameraPlayer2); - DrawScene(); - EndMode3D(); - DrawText("PLAYER2 UP/DOWN to move", 10, 10, 20, BLUE); - EndTextureMode(); - - // Draw both views render textures to the screen side by side - BeginDrawing(); - ClearBackground(BLACK); - DrawTextureRec(screenPlayer1.texture, splitScreenRect, (Vector2){ 0, 0 }, WHITE); - DrawTextureRec(screenPlayer2.texture, splitScreenRect, (Vector2){ screenWidth/2.0f, 0 }, WHITE); - EndDrawing(); - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadRenderTexture(screenPlayer1); // Unload render texture - UnloadRenderTexture(screenPlayer2); // Unload render texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/core/core_window_flags.c b/examples/core/core_window_flags.c deleted file mode 100644 index b1cbb1b..0000000 --- a/examples/core/core_window_flags.c +++ /dev/null @@ -1,196 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - window flags -* -* 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" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //--------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - // Possible window flags - /* - FLAG_VSYNC_HINT - FLAG_FULLSCREEN_MODE -> not working properly -> wrong scaling! - FLAG_WINDOW_RESIZABLE - FLAG_WINDOW_UNDECORATED - FLAG_WINDOW_TRANSPARENT - FLAG_WINDOW_HIDDEN - FLAG_WINDOW_MINIMIZED -> Not supported on window creation - FLAG_WINDOW_MAXIMIZED -> Not supported on window creation - FLAG_WINDOW_UNFOCUSED - FLAG_WINDOW_TOPMOST - FLAG_WINDOW_HIGHDPI -> errors after minimize-resize, fb size is recalculated - FLAG_WINDOW_ALWAYS_RUN - FLAG_MSAA_4X_HINT - */ - - // Set configuration flags for window creation - //SetConfigFlags(FLAG_VSYNC_HINT | FLAG_MSAA_4X_HINT | FLAG_WINDOW_HIGHDPI); - InitWindow(screenWidth, screenHeight, "raylib [core] example - window flags"); - - Vector2 ballPosition = { GetScreenWidth() / 2.0f, GetScreenHeight() / 2.0f }; - Vector2 ballSpeed = { 5.0f, 4.0f }; - float ballRadius = 20; - - 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_F)) ToggleFullscreen(); // modifies window size when scaling! - - if (IsKeyPressed(KEY_R)) - { - if (IsWindowState(FLAG_WINDOW_RESIZABLE)) ClearWindowState(FLAG_WINDOW_RESIZABLE); - else SetWindowState(FLAG_WINDOW_RESIZABLE); - } - - if (IsKeyPressed(KEY_D)) - { - if (IsWindowState(FLAG_WINDOW_UNDECORATED)) ClearWindowState(FLAG_WINDOW_UNDECORATED); - else SetWindowState(FLAG_WINDOW_UNDECORATED); - } - - if (IsKeyPressed(KEY_H)) - { - if (!IsWindowState(FLAG_WINDOW_HIDDEN)) SetWindowState(FLAG_WINDOW_HIDDEN); - - framesCounter = 0; - } - - if (IsWindowState(FLAG_WINDOW_HIDDEN)) - { - framesCounter++; - if (framesCounter >= 240) ClearWindowState(FLAG_WINDOW_HIDDEN); // Show window after 3 seconds - } - - if (IsKeyPressed(KEY_N)) - { - if (!IsWindowState(FLAG_WINDOW_MINIMIZED)) MinimizeWindow(); - - framesCounter = 0; - } - - if (IsWindowState(FLAG_WINDOW_MINIMIZED)) - { - framesCounter++; - if (framesCounter >= 240) RestoreWindow(); // Restore window after 3 seconds - } - - if (IsKeyPressed(KEY_M)) - { - // NOTE: Requires FLAG_WINDOW_RESIZABLE enabled! - if (IsWindowState(FLAG_WINDOW_MAXIMIZED)) RestoreWindow(); - else MaximizeWindow(); - } - - if (IsKeyPressed(KEY_U)) - { - if (IsWindowState(FLAG_WINDOW_UNFOCUSED)) ClearWindowState(FLAG_WINDOW_UNFOCUSED); - else SetWindowState(FLAG_WINDOW_UNFOCUSED); - } - - if (IsKeyPressed(KEY_T)) - { - if (IsWindowState(FLAG_WINDOW_TOPMOST)) ClearWindowState(FLAG_WINDOW_TOPMOST); - else SetWindowState(FLAG_WINDOW_TOPMOST); - } - - if (IsKeyPressed(KEY_A)) - { - if (IsWindowState(FLAG_WINDOW_ALWAYS_RUN)) ClearWindowState(FLAG_WINDOW_ALWAYS_RUN); - else SetWindowState(FLAG_WINDOW_ALWAYS_RUN); - } - - if (IsKeyPressed(KEY_V)) - { - if (IsWindowState(FLAG_VSYNC_HINT)) ClearWindowState(FLAG_VSYNC_HINT); - else SetWindowState(FLAG_VSYNC_HINT); - } - - // Bouncing ball logic - ballPosition.x += ballSpeed.x; - ballPosition.y += ballSpeed.y; - if ((ballPosition.x >= (GetScreenWidth() - ballRadius)) || (ballPosition.x <= ballRadius)) ballSpeed.x *= -1.0f; - if ((ballPosition.y >= (GetScreenHeight() - ballRadius)) || (ballPosition.y <= ballRadius)) ballSpeed.y *= -1.0f; - //----------------------------------------------------- - - // Draw - //----------------------------------------------------- - BeginDrawing(); - - if (IsWindowState(FLAG_WINDOW_TRANSPARENT)) ClearBackground(BLANK); - else ClearBackground(RAYWHITE); - - DrawCircleV(ballPosition, ballRadius, MAROON); - DrawRectangleLinesEx((Rectangle) { 0, 0, (float)GetScreenWidth(), (float)GetScreenHeight() }, 4, RAYWHITE); - - DrawCircleV(GetMousePosition(), 10, DARKBLUE); - - DrawFPS(10, 10); - - DrawText(TextFormat("Screen Size: [%i, %i]", GetScreenWidth(), GetScreenHeight()), 10, 40, 10, GREEN); - - // Draw window state info - DrawText("Following flags can be set after window creation:", 10, 60, 10, GRAY); - if (IsWindowState(FLAG_FULLSCREEN_MODE)) DrawText("[F] FLAG_FULLSCREEN_MODE: on", 10, 80, 10, LIME); - else DrawText("[F] FLAG_FULLSCREEN_MODE: off", 10, 80, 10, MAROON); - if (IsWindowState(FLAG_WINDOW_RESIZABLE)) DrawText("[R] FLAG_WINDOW_RESIZABLE: on", 10, 100, 10, LIME); - else DrawText("[R] FLAG_WINDOW_RESIZABLE: off", 10, 100, 10, MAROON); - if (IsWindowState(FLAG_WINDOW_UNDECORATED)) DrawText("[D] FLAG_WINDOW_UNDECORATED: on", 10, 120, 10, LIME); - else DrawText("[D] FLAG_WINDOW_UNDECORATED: off", 10, 120, 10, MAROON); - if (IsWindowState(FLAG_WINDOW_HIDDEN)) DrawText("[H] FLAG_WINDOW_HIDDEN: on", 10, 140, 10, LIME); - else DrawText("[H] FLAG_WINDOW_HIDDEN: off", 10, 140, 10, MAROON); - if (IsWindowState(FLAG_WINDOW_MINIMIZED)) DrawText("[N] FLAG_WINDOW_MINIMIZED: on", 10, 160, 10, LIME); - else DrawText("[N] FLAG_WINDOW_MINIMIZED: off", 10, 160, 10, MAROON); - if (IsWindowState(FLAG_WINDOW_MAXIMIZED)) DrawText("[M] FLAG_WINDOW_MAXIMIZED: on", 10, 180, 10, LIME); - else DrawText("[M] FLAG_WINDOW_MAXIMIZED: off", 10, 180, 10, MAROON); - if (IsWindowState(FLAG_WINDOW_UNFOCUSED)) DrawText("[G] FLAG_WINDOW_UNFOCUSED: on", 10, 200, 10, LIME); - else DrawText("[U] FLAG_WINDOW_UNFOCUSED: off", 10, 200, 10, MAROON); - if (IsWindowState(FLAG_WINDOW_TOPMOST)) DrawText("[T] FLAG_WINDOW_TOPMOST: on", 10, 220, 10, LIME); - else DrawText("[T] FLAG_WINDOW_TOPMOST: off", 10, 220, 10, MAROON); - if (IsWindowState(FLAG_WINDOW_ALWAYS_RUN)) DrawText("[A] FLAG_WINDOW_ALWAYS_RUN: on", 10, 240, 10, LIME); - else DrawText("[A] FLAG_WINDOW_ALWAYS_RUN: off", 10, 240, 10, MAROON); - if (IsWindowState(FLAG_VSYNC_HINT)) DrawText("[V] FLAG_VSYNC_HINT: on", 10, 260, 10, LIME); - else DrawText("[V] FLAG_VSYNC_HINT: off", 10, 260, 10, MAROON); - - DrawText("Following flags can only be set before window creation:", 10, 300, 10, GRAY); - if (IsWindowState(FLAG_WINDOW_HIGHDPI)) DrawText("FLAG_WINDOW_HIGHDPI: on", 10, 320, 10, LIME); - else DrawText("FLAG_WINDOW_HIGHDPI: off", 10, 320, 10, MAROON); - if (IsWindowState(FLAG_WINDOW_TRANSPARENT)) DrawText("FLAG_WINDOW_TRANSPARENT: on", 10, 340, 10, LIME); - else DrawText("FLAG_WINDOW_TRANSPARENT: off", 10, 340, 10, MAROON); - if (IsWindowState(FLAG_MSAA_4X_HINT)) DrawText("FLAG_MSAA_4X_HINT: on", 10, 360, 10, LIME); - else DrawText("FLAG_MSAA_4X_HINT: off", 10, 360, 10, MAROON); - - EndDrawing(); - //----------------------------------------------------- - } - - // De-Initialization - //--------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //---------------------------------------------------------- - - return 0; -} diff --git a/examples/core/core_window_letterbox.c b/examples/core/core_window_letterbox.c deleted file mode 100644 index 751fb14..0000000 --- a/examples/core/core_window_letterbox.c +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - window scale letterbox (and virtual mouse) -* -* Example originally created with raylib 2.5, last time updated with raylib 4.0 -* -* 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" - -#include "raymath.h" // Required for: Vector2Clamp() - -#define MAX(a, b) ((a)>(b)? (a) : (b)) -#define MIN(a, b) ((a)<(b)? (a) : (b)) - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - const int windowWidth = 800; - const int windowHeight = 450; - - // Enable config flags for resizable window and vertical synchro - SetConfigFlags(FLAG_WINDOW_RESIZABLE | FLAG_VSYNC_HINT); - InitWindow(windowWidth, windowHeight, "raylib [core] example - window scale letterbox"); - SetWindowMinSize(320, 240); - - int gameScreenWidth = 640; - int gameScreenHeight = 480; - - // Render texture initialization, used to hold the rendering result so we can easily resize it - RenderTexture2D target = LoadRenderTexture(gameScreenWidth, gameScreenHeight); - SetTextureFilter(target.texture, TEXTURE_FILTER_BILINEAR); // Texture scale filter to use - - Color colors[10] = { 0 }; - for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; - - 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 - //---------------------------------------------------------------------------------- - // Compute required framebuffer scaling - float scale = MIN((float)GetScreenWidth()/gameScreenWidth, (float)GetScreenHeight()/gameScreenHeight); - - if (IsKeyPressed(KEY_SPACE)) - { - // Recalculate random colors for the bars - for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; - } - - // Update virtual mouse (clamped mouse value behind game screen) - Vector2 mouse = GetMousePosition(); - Vector2 virtualMouse = { 0 }; - virtualMouse.x = (mouse.x - (GetScreenWidth() - (gameScreenWidth*scale))*0.5f)/scale; - virtualMouse.y = (mouse.y - (GetScreenHeight() - (gameScreenHeight*scale))*0.5f)/scale; - virtualMouse = Vector2Clamp(virtualMouse, (Vector2){ 0, 0 }, (Vector2){ (float)gameScreenWidth, (float)gameScreenHeight }); - - // Apply the same transformation as the virtual mouse to the real mouse (i.e. to work with raygui) - //SetMouseOffset(-(GetScreenWidth() - (gameScreenWidth*scale))*0.5f, -(GetScreenHeight() - (gameScreenHeight*scale))*0.5f); - //SetMouseScale(1/scale, 1/scale); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - // Draw everything in the render texture, note this will not be rendered on screen, yet - BeginTextureMode(target); - ClearBackground(RAYWHITE); // Clear render texture background color - - for (int i = 0; i < 10; i++) DrawRectangle(0, (gameScreenHeight/10)*i, gameScreenWidth, gameScreenHeight/10, colors[i]); - - DrawText("If executed inside a window,\nyou can resize the window,\nand see the screen scaling!", 10, 25, 20, WHITE); - DrawText(TextFormat("Default Mouse: [%i , %i]", (int)mouse.x, (int)mouse.y), 350, 25, 20, GREEN); - DrawText(TextFormat("Virtual Mouse: [%i , %i]", (int)virtualMouse.x, (int)virtualMouse.y), 350, 55, 20, YELLOW); - EndTextureMode(); - - BeginDrawing(); - ClearBackground(BLACK); // Clear screen background - - // Draw render texture to screen, properly scaled - DrawTexturePro(target.texture, (Rectangle){ 0.0f, 0.0f, (float)target.texture.width, (float)-target.texture.height }, - (Rectangle){ (GetScreenWidth() - ((float)gameScreenWidth*scale))*0.5f, (GetScreenHeight() - ((float)gameScreenHeight*scale))*0.5f, - (float)gameScreenWidth*scale, (float)gameScreenHeight*scale }, (Vector2){ 0, 0 }, 0.0f, WHITE); - EndDrawing(); - //-------------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadRenderTexture(target); // Unload render texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/core/core_window_should_close.c b/examples/core/core_window_should_close.c deleted file mode 100644 index f0392b0..0000000 --- a/examples/core/core_window_should_close.c +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - Window should close -* -* 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) 2013-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main() -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [core] example - window should close"); - - SetExitKey(KEY_NULL); // Disable KEY_ESCAPE to close window, X-button still works - - bool exitWindowRequested = false; // Flag to request window to exit - bool exitWindow = false; // Flag to set window to exit - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!exitWindow) - { - // Update - //---------------------------------------------------------------------------------- - // Detect if X-button or KEY_ESCAPE have been pressed to close window - if (WindowShouldClose() || IsKeyPressed(KEY_ESCAPE)) exitWindowRequested = true; - - if (exitWindowRequested) - { - // A request for close window has been issued, we can save data before closing - // or just show a message asking for confirmation - - if (IsKeyPressed(KEY_Y)) exitWindow = true; - else if (IsKeyPressed(KEY_N)) exitWindowRequested = false; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - if (exitWindowRequested) - { - DrawRectangle(0, 100, screenWidth, 200, BLACK); - DrawText("Are you sure you want to exit program? [Y/N]", 40, 180, 30, WHITE); - } - else DrawText("Try to close the window to get confirmation message!", 120, 200, 20, LIGHTGRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} diff --git a/examples/core/core_world_screen.c b/examples/core/core_world_screen.c deleted file mode 100644 index 6c811a5..0000000 --- a/examples/core/core_world_screen.c +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************************* -* -* raylib [core] example - World to screen -* -* Example originally created with raylib 1.3, 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) 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 [core] example - core world screen"); - - // Define the camera to look into our 3d world - Camera camera = { 0 }; - camera.position = (Vector3){ 10.0f, 10.0f, 10.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 - - Vector3 cubePosition = { 0.0f, 0.0f, 0.0f }; - Vector2 cubeScreenPosition = { 0.0f, 0.0f }; - - 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_THIRD_PERSON); - - // Calculate cube screen space position (with a little offset to be in top) - cubeScreenPosition = GetWorldToScreen((Vector3){cubePosition.x, cubePosition.y + 2.5f, cubePosition.z}, camera); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED); - DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON); - - DrawGrid(10, 1.0f); - - EndMode3D(); - - DrawText("Enemy: 100 / 100", (int)cubeScreenPosition.x - MeasureText("Enemy: 100/100", 20)/2, (int)cubeScreenPosition.y, 20, BLACK); - - DrawText(TextFormat("Cube position in screen space coordinates: [%i, %i]", (int)cubeScreenPosition.x, (int)cubeScreenPosition.y), 10, 10, 20, LIME); - DrawText("Text 2d should be always on top of the cube", 10, 40, 20, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/shaders/shaders_basic_lighting2.js b/examples/shaders/js_shaders_gradient_lighting.js similarity index 100% rename from examples/shaders/shaders_basic_lighting2.js rename to examples/shaders/js_shaders_gradient_lighting.js diff --git a/examples/text/text_codepoints_loading.c b/examples/text/text_codepoints_loading.c deleted file mode 100644 index 1f3db0c..0000000 --- a/examples/text/text_codepoints_loading.c +++ /dev/null @@ -1,155 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Codepoints loading -* -* Example originally created with raylib 4.2, 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) 2022-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include // Required for: calloc(), realloc(), free() -#include // Required for: memcpy() - -// Text to be displayed, must be UTF-8 (save this code file as UTF-8) -// NOTE: It can contain all the required text for the game, -// this text will be scanned to get all the required codepoints -static char *text = "いろはにほへと ちりぬるを\nわかよたれそ つねならむ\nうゐのおくやま けふこえて\nあさきゆめみし ゑひもせす"; - -// Remove codepoint duplicates if requested -static int *CodepointRemoveDuplicates(int *codepoints, int codepointCount, int *codepointResultCount); - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [text] example - codepoints loading"); - - // Get codepoints from text - int codepointCount = 0; - int *codepoints = LoadCodepoints(text, &codepointCount); - - // Removed duplicate codepoints to generate smaller font atlas - int codepointsNoDupsCount = 0; - int *codepointsNoDups = CodepointRemoveDuplicates(codepoints, codepointCount, &codepointsNoDupsCount); - UnloadCodepoints(codepoints); - - // Load font containing all the provided codepoint glyphs - // A texture font atlas is automatically generated - Font font = LoadFontEx("resources/DotGothic16-Regular.ttf", 36, codepointsNoDups, codepointsNoDupsCount); - - // Set bilinear scale filter for better font scaling - SetTextureFilter(font.texture, TEXTURE_FILTER_BILINEAR); - - // Free codepoints, atlas has already been generated - free(codepointsNoDups); - - bool showFontAtlas = false; - - int codepointSize = 0; - int codepoint = 0; - char *ptr = text; - - 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)) showFontAtlas = !showFontAtlas; - - // Testing code: getting next and previous codepoints on provided text - if (IsKeyPressed(KEY_RIGHT)) - { - // Get next codepoint in string and move pointer - codepoint = GetCodepointNext(ptr, &codepointSize); - ptr += codepointSize; - } - else if (IsKeyPressed(KEY_LEFT)) - { - // Get previous codepoint in string and move pointer - codepoint = GetCodepointPrevious(ptr, &codepointSize); - ptr -= codepointSize; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawRectangle(0, 0, GetScreenWidth(), 70, BLACK); - DrawText(TextFormat("Total codepoints contained in provided text: %i", codepointCount), 10, 10, 20, GREEN); - DrawText(TextFormat("Total codepoints required for font atlas (duplicates excluded): %i", codepointsNoDupsCount), 10, 40, 20, GREEN); - - if (showFontAtlas) - { - // Draw generated font texture atlas containing provided codepoints - DrawTexture(font.texture, 150, 100, BLACK); - DrawRectangleLines(150, 100, font.texture.width, font.texture.height, BLACK); - } - else - { - // Draw provided text with laoded font, containing all required codepoint glyphs - DrawTextEx(font, text, (Vector2) { 160, 110 }, 48, 5, BLACK); - } - - DrawText("Press SPACE to toggle font atlas view!", 10, GetScreenHeight() - 30, 20, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadFont(font); // Unload font - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -// Remove codepoint duplicates if requested -// WARNING: This process could be a bit slow if there text to process is very long -static int *CodepointRemoveDuplicates(int *codepoints, int codepointCount, int *codepointsResultCount) -{ - int codepointsNoDupsCount = codepointCount; - int *codepointsNoDups = (int *)calloc(codepointCount, sizeof(int)); - memcpy(codepointsNoDups, codepoints, codepointCount*sizeof(int)); - - // Remove duplicates - for (int i = 0; i < codepointsNoDupsCount; i++) - { - for (int j = i + 1; j < codepointsNoDupsCount; j++) - { - if (codepointsNoDups[i] == codepointsNoDups[j]) - { - for (int k = j; k < codepointsNoDupsCount; k++) codepointsNoDups[k] = codepointsNoDups[k + 1]; - - codepointsNoDupsCount--; - j--; - } - } - } - - // NOTE: The size of codepointsNoDups is the same as original array but - // only required positions are filled (codepointsNoDupsCount) - - *codepointsResultCount = codepointsNoDupsCount; - return codepointsNoDups; -} \ No newline at end of file diff --git a/examples/text/text_draw_3d.c b/examples/text/text_draw_3d.c deleted file mode 100644 index 097e4fc..0000000 --- a/examples/text/text_draw_3d.c +++ /dev/null @@ -1,750 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Draw 3d -* -* NOTE: Draw a 2D text in 3D space, each letter is drawn in a quad (or 2 quads if backface is set) -* where the texture coodinates of each quad map to the texture coordinates of the glyphs -* inside the font texture. -* -* A more efficient approach, i believe, would be to render the text in a render texture and -* map that texture to a plane and render that, or maybe a shader but my method allows more -* flexibility...for example to change position of each letter individually to make somethink -* like a wavy text effect. -* -* Special thanks to: -* @Nighten for the DrawTextStyle() code https://github.com/NightenDushi/Raylib_DrawTextStyle -* Chris Camacho (codifies - http://bedroomcoders.co.uk/) for the alpha discard shader -* -* Example originally created with raylib 3.5, last time updated with raylib 4.0 -* -* 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) 2021-2023 Vlad Adrian (@demizdor) -* -********************************************************************************************/ - -#include "raylib.h" -#include "rlgl.h" - -#include // Required for: NULL -#include // Required for: sinf() - -// To make it work with the older RLGL module just comment the line below -#define RAYLIB_NEW_RLGL - -//-------------------------------------------------------------------------------------- -// Globals -//-------------------------------------------------------------------------------------- -#define LETTER_BOUNDRY_SIZE 0.25f -#define TEXT_MAX_LAYERS 32 -#define LETTER_BOUNDRY_COLOR VIOLET - -bool SHOW_LETTER_BOUNDRY = false; -bool SHOW_TEXT_BOUNDRY = false; - -//-------------------------------------------------------------------------------------- -// Data Types definition -//-------------------------------------------------------------------------------------- - -// Configuration structure for waving the text -typedef struct WaveTextConfig { - Vector3 waveRange; - Vector3 waveSpeed; - Vector3 waveOffset; -} WaveTextConfig; - -//-------------------------------------------------------------------------------------- -// Module Functions Declaration -//-------------------------------------------------------------------------------------- -// Draw a codepoint in 3D space -static void DrawTextCodepoint3D(Font font, int codepoint, Vector3 position, float fontSize, bool backface, Color tint); -// Draw a 2D text in 3D space -static void DrawText3D(Font font, const char *text, Vector3 position, float fontSize, float fontSpacing, float lineSpacing, bool backface, Color tint); -// Measure a text in 3D. For some reason `MeasureTextEx()` just doesn't seem to work so i had to use this instead. -static Vector3 MeasureText3D(Font font, const char *text, float fontSize, float fontSpacing, float lineSpacing); - -// Draw a 2D text in 3D space and wave the parts that start with `~~` and end with `~~`. -// This is a modified version of the original code by @Nighten found here https://github.com/NightenDushi/Raylib_DrawTextStyle -static void DrawTextWave3D(Font font, const char *text, Vector3 position, float fontSize, float fontSpacing, float lineSpacing, bool backface, WaveTextConfig *config, float time, Color tint); -// Measure a text in 3D ignoring the `~~` chars. -static Vector3 MeasureTextWave3D(Font font, const char *text, float fontSize, float fontSpacing, float lineSpacing); -// Generates a nice color with a random hue -static Color GenerateRandomColor(float s, float v); - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - SetConfigFlags(FLAG_MSAA_4X_HINT|FLAG_VSYNC_HINT); - InitWindow(screenWidth, screenHeight, "raylib [text] example - draw 2D text in 3D"); - - bool spin = true; // Spin the camera? - bool multicolor = false; // Multicolor mode - - // Define the camera to look into our 3d world - Camera3D camera = { 0 }; - camera.position = (Vector3){ -10.0f, 15.0f, -10.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 - - int camera_mode = CAMERA_ORBITAL; - - Vector3 cubePosition = { 0.0f, 1.0f, 0.0f }; - Vector3 cubeSize = { 2.0f, 2.0f, 2.0f }; - - // Use the default font - Font font = GetFontDefault(); - float fontSize = 8.0f; - float fontSpacing = 0.5f; - float lineSpacing = -1.0f; - - // Set the text (using markdown!) - char text[64] = "Hello ~~World~~ in 3D!"; - Vector3 tbox = {0}; - int layers = 1; - int quads = 0; - float layerDistance = 0.01f; - - WaveTextConfig wcfg; - wcfg.waveSpeed.x = wcfg.waveSpeed.y = 3.0f; wcfg.waveSpeed.z = 0.5f; - wcfg.waveOffset.x = wcfg.waveOffset.y = wcfg.waveOffset.z = 0.35f; - wcfg.waveRange.x = wcfg.waveRange.y = wcfg.waveRange.z = 0.45f; - - float time = 0.0f; - - // Setup a light and dark color - Color light = MAROON; - Color dark = RED; - - // Load the alpha discard shader - Shader alphaDiscard = LoadShader(NULL, "resources/shaders/glsl330/alpha_discard.fs"); - - // Array filled with multiple random colors (when multicolor mode is set) - Color multi[TEXT_MAX_LAYERS] = {0}; - - 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_mode); - - // Handle font files dropped - if (IsFileDropped()) - { - FilePathList droppedFiles = LoadDroppedFiles(); - - // NOTE: We only support first ttf file dropped - if (IsFileExtension(droppedFiles.paths[0], ".ttf")) - { - UnloadFont(font); - font = LoadFontEx(droppedFiles.paths[0], (int)fontSize, 0, 0); - } - else if (IsFileExtension(droppedFiles.paths[0], ".fnt")) - { - UnloadFont(font); - font = LoadFont(droppedFiles.paths[0]); - fontSize = (float)font.baseSize; - } - - UnloadDroppedFiles(droppedFiles); // Unload filepaths from memory - } - - // Handle Events - if (IsKeyPressed(KEY_F1)) SHOW_LETTER_BOUNDRY = !SHOW_LETTER_BOUNDRY; - if (IsKeyPressed(KEY_F2)) SHOW_TEXT_BOUNDRY = !SHOW_TEXT_BOUNDRY; - if (IsKeyPressed(KEY_F3)) - { - // Handle camera change - spin = !spin; - // we need to reset the camera when changing modes - camera = (Camera3D){ 0 }; - 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 mode type - - if (spin) - { - camera.position = (Vector3){ -10.0f, 15.0f, -10.0f }; // Camera position - camera_mode = CAMERA_ORBITAL; - } - else - { - camera.position = (Vector3){ 10.0f, 10.0f, -10.0f }; // Camera position - camera_mode = CAMERA_FREE; - } - } - - // Handle clicking the cube - if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) - { - Ray ray = GetMouseRay(GetMousePosition(), camera); - - // Check collision between ray and box - RayCollision collision = GetRayCollisionBox(ray, - (BoundingBox){(Vector3){ cubePosition.x - cubeSize.x/2, cubePosition.y - cubeSize.y/2, cubePosition.z - cubeSize.z/2 }, - (Vector3){ cubePosition.x + cubeSize.x/2, cubePosition.y + cubeSize.y/2, cubePosition.z + cubeSize.z/2 }}); - if (collision.hit) - { - // Generate new random colors - light = GenerateRandomColor(0.5f, 0.78f); - dark = GenerateRandomColor(0.4f, 0.58f); - } - } - - // Handle text layers changes - if (IsKeyPressed(KEY_HOME)) { if (layers > 1) --layers; } - else if (IsKeyPressed(KEY_END)) { if (layers < TEXT_MAX_LAYERS) ++layers; } - - // Handle text changes - if (IsKeyPressed(KEY_LEFT)) fontSize -= 0.5f; - else if (IsKeyPressed(KEY_RIGHT)) fontSize += 0.5f; - else if (IsKeyPressed(KEY_UP)) fontSpacing -= 0.1f; - else if (IsKeyPressed(KEY_DOWN)) fontSpacing += 0.1f; - else if (IsKeyPressed(KEY_PAGE_UP)) lineSpacing -= 0.1f; - else if (IsKeyPressed(KEY_PAGE_DOWN)) lineSpacing += 0.1f; - else if (IsKeyDown(KEY_INSERT)) layerDistance -= 0.001f; - else if (IsKeyDown(KEY_DELETE)) layerDistance += 0.001f; - else if (IsKeyPressed(KEY_TAB)) - { - multicolor = !multicolor; // Enable /disable multicolor mode - - if (multicolor) - { - // Fill color array with random colors - for (int i = 0; i < TEXT_MAX_LAYERS; ++i) - { - multi[i] = GenerateRandomColor(0.5f, 0.8f); - multi[i].a = GetRandomValue(0, 255); - } - } - } - - // Handle text input - int ch = GetCharPressed(); - if (IsKeyPressed(KEY_BACKSPACE)) - { - // Remove last char - int len = TextLength(text); - if (len > 0) text[len - 1] = '\0'; - } - else if (IsKeyPressed(KEY_ENTER)) - { - // handle newline - int len = TextLength(text); - if (len < sizeof(text) - 1) - { - text[len] = '\n'; - text[len+1] ='\0'; - } - } - else - { - // append only printable chars - int len = TextLength(text); - if (len < sizeof(text) - 1) - { - text[len] = ch; - text[len+1] ='\0'; - } - } - - // Measure 3D text so we can center it - tbox = MeasureTextWave3D(font, text, fontSize, fontSpacing, lineSpacing); - - quads = 0; // Reset quad counter - time += GetFrameTime(); // Update timer needed by `DrawTextWave3D()` - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - DrawCubeV(cubePosition, cubeSize, dark); - DrawCubeWires(cubePosition, 2.1f, 2.1f, 2.1f, light); - - DrawGrid(10, 2.0f); - - // Use a shader to handle the depth buffer issue with transparent textures - // NOTE: more info at https://bedroomcoders.co.uk/raylib-billboards-advanced-use/ - BeginShaderMode(alphaDiscard); - - // Draw the 3D text above the red cube - rlPushMatrix(); - rlRotatef(90.0f, 1.0f, 0.0f, 0.0f); - rlRotatef(90.0f, 0.0f, 0.0f, -1.0f); - - for (int i = 0; i < layers; ++i) - { - Color clr = light; - if (multicolor) clr = multi[i]; - DrawTextWave3D(font, text, (Vector3){ -tbox.x/2.0f, layerDistance*i, -4.5f }, fontSize, fontSpacing, lineSpacing, true, &wcfg, time, clr); - } - - // Draw the text boundry if set - if (SHOW_TEXT_BOUNDRY) DrawCubeWiresV((Vector3){ 0.0f, 0.0f, -4.5f + tbox.z/2 }, tbox, dark); - rlPopMatrix(); - - // Don't draw the letter boundries for the 3D text below - bool slb = SHOW_LETTER_BOUNDRY; - SHOW_LETTER_BOUNDRY = false; - - // Draw 3D options (use default font) - //------------------------------------------------------------------------- - rlPushMatrix(); - rlRotatef(180.0f, 0.0f, 1.0f, 0.0f); - char *opt = (char *)TextFormat("< SIZE: %2.1f >", fontSize); - quads += TextLength(opt); - Vector3 m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); - Vector3 pos = { -m.x/2.0f, 0.01f, 2.0f}; - DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, BLUE); - pos.z += 0.5f + m.z; - - opt = (char *)TextFormat("< SPACING: %2.1f >", fontSpacing); - quads += TextLength(opt); - m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); - pos.x = -m.x/2.0f; - DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, BLUE); - pos.z += 0.5f + m.z; - - opt = (char *)TextFormat("< LINE: %2.1f >", lineSpacing); - quads += TextLength(opt); - m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); - pos.x = -m.x/2.0f; - DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, BLUE); - pos.z += 1.0f + m.z; - - opt = (char *)TextFormat("< LBOX: %3s >", slb? "ON" : "OFF"); - quads += TextLength(opt); - m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); - pos.x = -m.x/2.0f; - DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, RED); - pos.z += 0.5f + m.z; - - opt = (char *)TextFormat("< TBOX: %3s >", SHOW_TEXT_BOUNDRY? "ON" : "OFF"); - quads += TextLength(opt); - m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); - pos.x = -m.x/2.0f; - DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, RED); - pos.z += 0.5f + m.z; - - opt = (char *)TextFormat("< LAYER DISTANCE: %.3f >", layerDistance); - quads += TextLength(opt); - m = MeasureText3D(GetFontDefault(), opt, 8.0f, 1.0f, 0.0f); - pos.x = -m.x/2.0f; - DrawText3D(GetFontDefault(), opt, pos, 8.0f, 1.0f, 0.0f, false, DARKPURPLE); - rlPopMatrix(); - //------------------------------------------------------------------------- - - // Draw 3D info text (use default font) - //------------------------------------------------------------------------- - opt = "All the text displayed here is in 3D"; - quads += 36; - m = MeasureText3D(GetFontDefault(), opt, 10.0f, 0.5f, 0.0f); - pos = (Vector3){-m.x/2.0f, 0.01f, 2.0f}; - DrawText3D(GetFontDefault(), opt, pos, 10.0f, 0.5f, 0.0f, false, DARKBLUE); - pos.z += 1.5f + m.z; - - opt = "press [Left]/[Right] to change the font size"; - quads += 44; - m = MeasureText3D(GetFontDefault(), opt, 6.0f, 0.5f, 0.0f); - pos.x = -m.x/2.0f; - DrawText3D(GetFontDefault(), opt, pos, 6.0f, 0.5f, 0.0f, false, DARKBLUE); - pos.z += 0.5f + m.z; - - opt = "press [Up]/[Down] to change the font spacing"; - quads += 44; - m = MeasureText3D(GetFontDefault(), opt, 6.0f, 0.5f, 0.0f); - pos.x = -m.x/2.0f; - DrawText3D(GetFontDefault(), opt, pos, 6.0f, 0.5f, 0.0f, false, DARKBLUE); - pos.z += 0.5f + m.z; - - opt = "press [PgUp]/[PgDown] to change the line spacing"; - quads += 48; - m = MeasureText3D(GetFontDefault(), opt, 6.0f, 0.5f, 0.0f); - pos.x = -m.x/2.0f; - DrawText3D(GetFontDefault(), opt, pos, 6.0f, 0.5f, 0.0f, false, DARKBLUE); - pos.z += 0.5f + m.z; - - opt = "press [F1] to toggle the letter boundry"; - quads += 39; - m = MeasureText3D(GetFontDefault(), opt, 6.0f, 0.5f, 0.0f); - pos.x = -m.x/2.0f; - DrawText3D(GetFontDefault(), opt, pos, 6.0f, 0.5f, 0.0f, false, DARKBLUE); - pos.z += 0.5f + m.z; - - opt = "press [F2] to toggle the text boundry"; - quads += 37; - m = MeasureText3D(GetFontDefault(), opt, 6.0f, 0.5f, 0.0f); - pos.x = -m.x/2.0f; - DrawText3D(GetFontDefault(), opt, pos, 6.0f, 0.5f, 0.0f, false, DARKBLUE); - //------------------------------------------------------------------------- - - SHOW_LETTER_BOUNDRY = slb; - EndShaderMode(); - - EndMode3D(); - - // Draw 2D info text & stats - //------------------------------------------------------------------------- - DrawText("Drag & drop a font file to change the font!\nType something, see what happens!\n\n" - "Press [F3] to toggle the camera", 10, 35, 10, BLACK); - - quads += TextLength(text)*2*layers; - char *tmp = (char *)TextFormat("%2i layer(s) | %s camera | %4i quads (%4i verts)", layers, spin? "ORBITAL" : "FREE", quads, quads*4); - int width = MeasureText(tmp, 10); - DrawText(tmp, screenWidth - 20 - width, 10, 10, DARKGREEN); - - tmp = "[Home]/[End] to add/remove 3D text layers"; - width = MeasureText(tmp, 10); - DrawText(tmp, screenWidth - 20 - width, 25, 10, DARKGRAY); - - tmp = "[Insert]/[Delete] to increase/decrease distance between layers"; - width = MeasureText(tmp, 10); - DrawText(tmp, screenWidth - 20 - width, 40, 10, DARKGRAY); - - tmp = "click the [CUBE] for a random color"; - width = MeasureText(tmp, 10); - DrawText(tmp, screenWidth - 20 - width, 55, 10, DARKGRAY); - - tmp = "[Tab] to toggle multicolor mode"; - width = MeasureText(tmp, 10); - DrawText(tmp, screenWidth - 20 - width, 70, 10, DARKGRAY); - //------------------------------------------------------------------------- - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadFont(font); - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//-------------------------------------------------------------------------------------- -// Module Functions Definitions -//-------------------------------------------------------------------------------------- -// Draw codepoint at specified position in 3D space -static void DrawTextCodepoint3D(Font font, int codepoint, Vector3 position, float fontSize, bool backface, Color tint) -{ - // Character index position in sprite font - // NOTE: In case a codepoint is not available in the font, index returned points to '?' - int index = GetGlyphIndex(font, codepoint); - float scale = fontSize/(float)font.baseSize; - - // Character destination rectangle on screen - // NOTE: We consider charsPadding on drawing - position.x += (float)(font.glyphs[index].offsetX - font.glyphPadding)/(float)font.baseSize*scale; - position.z += (float)(font.glyphs[index].offsetY - font.glyphPadding)/(float)font.baseSize*scale; - - // Character source rectangle from font texture atlas - // NOTE: We consider chars padding when drawing, it could be required for outline/glow shader effects - Rectangle srcRec = { font.recs[index].x - (float)font.glyphPadding, font.recs[index].y - (float)font.glyphPadding, - font.recs[index].width + 2.0f*font.glyphPadding, font.recs[index].height + 2.0f*font.glyphPadding }; - - float width = (float)(font.recs[index].width + 2.0f*font.glyphPadding)/(float)font.baseSize*scale; - float height = (float)(font.recs[index].height + 2.0f*font.glyphPadding)/(float)font.baseSize*scale; - - if (font.texture.id > 0) - { - const float x = 0.0f; - const float y = 0.0f; - const float z = 0.0f; - - // normalized texture coordinates of the glyph inside the font texture (0.0f -> 1.0f) - const float tx = srcRec.x/font.texture.width; - const float ty = srcRec.y/font.texture.height; - const float tw = (srcRec.x+srcRec.width)/font.texture.width; - const float th = (srcRec.y+srcRec.height)/font.texture.height; - - if (SHOW_LETTER_BOUNDRY) DrawCubeWiresV((Vector3){ position.x + width/2, position.y, position.z + height/2}, (Vector3){ width, LETTER_BOUNDRY_SIZE, height }, LETTER_BOUNDRY_COLOR); - - rlCheckRenderBatchLimit(4 + 4*backface); - rlSetTexture(font.texture.id); - - rlPushMatrix(); - rlTranslatef(position.x, position.y, position.z); - - rlBegin(RL_QUADS); - rlColor4ub(tint.r, tint.g, tint.b, tint.a); - - // Front Face - rlNormal3f(0.0f, 1.0f, 0.0f); // Normal Pointing Up - rlTexCoord2f(tx, ty); rlVertex3f(x, y, z); // Top Left Of The Texture and Quad - rlTexCoord2f(tx, th); rlVertex3f(x, y, z + height); // Bottom Left Of The Texture and Quad - rlTexCoord2f(tw, th); rlVertex3f(x + width, y, z + height); // Bottom Right Of The Texture and Quad - rlTexCoord2f(tw, ty); rlVertex3f(x + width, y, z); // Top Right Of The Texture and Quad - - if (backface) - { - // Back Face - rlNormal3f(0.0f, -1.0f, 0.0f); // Normal Pointing Down - rlTexCoord2f(tx, ty); rlVertex3f(x, y, z); // Top Right Of The Texture and Quad - rlTexCoord2f(tw, ty); rlVertex3f(x + width, y, z); // Top Left Of The Texture and Quad - rlTexCoord2f(tw, th); rlVertex3f(x + width, y, z + height); // Bottom Left Of The Texture and Quad - rlTexCoord2f(tx, th); rlVertex3f(x, y, z + height); // Bottom Right Of The Texture and Quad - } - rlEnd(); - rlPopMatrix(); - - rlSetTexture(0); - } -} - -// Draw a 2D text in 3D space -static void DrawText3D(Font font, const char *text, Vector3 position, float fontSize, float fontSpacing, float lineSpacing, bool backface, Color tint) -{ - int length = TextLength(text); // Total length in bytes of the text, scanned by codepoints in loop - - float textOffsetY = 0.0f; // Offset between lines (on line break '\n') - float textOffsetX = 0.0f; // Offset X to next character to draw - - float scale = fontSize/(float)font.baseSize; - - for (int i = 0; i < length;) - { - // Get next codepoint from byte string and glyph index in font - int codepointByteCount = 0; - int codepoint = GetCodepoint(&text[i], &codepointByteCount); - int index = GetGlyphIndex(font, codepoint); - - // NOTE: Normally we exit the decoding sequence as soon as a bad byte is found (and return 0x3f) - // but we need to draw all of the bad bytes using the '?' symbol moving one byte - if (codepoint == 0x3f) codepointByteCount = 1; - - if (codepoint == '\n') - { - // NOTE: Fixed line spacing of 1.5 line-height - // TODO: Support custom line spacing defined by user - textOffsetY += scale + lineSpacing/(float)font.baseSize*scale; - textOffsetX = 0.0f; - } - else - { - if ((codepoint != ' ') && (codepoint != '\t')) - { - DrawTextCodepoint3D(font, codepoint, (Vector3){ position.x + textOffsetX, position.y, position.z + textOffsetY }, fontSize, backface, tint); - } - - if (font.glyphs[index].advanceX == 0) textOffsetX += (float)(font.recs[index].width + fontSpacing)/(float)font.baseSize*scale; - else textOffsetX += (float)(font.glyphs[index].advanceX + fontSpacing)/(float)font.baseSize*scale; - } - - i += codepointByteCount; // Move text bytes counter to next codepoint - } -} - -// Measure a text in 3D. For some reason `MeasureTextEx()` just doesn't seem to work so i had to use this instead. -static Vector3 MeasureText3D(Font font, const char* text, float fontSize, float fontSpacing, float lineSpacing) -{ - int len = TextLength(text); - int tempLen = 0; // Used to count longer text line num chars - int lenCounter = 0; - - float tempTextWidth = 0.0f; // Used to count longer text line width - - float scale = fontSize/(float)font.baseSize; - float textHeight = scale; - float textWidth = 0.0f; - - int letter = 0; // Current character - int index = 0; // Index position in sprite font - - for (int i = 0; i < len; i++) - { - lenCounter++; - - int next = 0; - letter = GetCodepoint(&text[i], &next); - index = GetGlyphIndex(font, letter); - - // NOTE: normally we exit the decoding sequence as soon as a bad byte is found (and return 0x3f) - // but we need to draw all of the bad bytes using the '?' symbol so to not skip any we set next = 1 - if (letter == 0x3f) next = 1; - i += next - 1; - - if (letter != '\n') - { - if (font.glyphs[index].advanceX != 0) textWidth += (font.glyphs[index].advanceX+fontSpacing)/(float)font.baseSize*scale; - else textWidth += (font.recs[index].width + font.glyphs[index].offsetX)/(float)font.baseSize*scale; - } - else - { - if (tempTextWidth < textWidth) tempTextWidth = textWidth; - lenCounter = 0; - textWidth = 0.0f; - textHeight += scale + lineSpacing/(float)font.baseSize*scale; - } - - if (tempLen < lenCounter) tempLen = lenCounter; - } - - if (tempTextWidth < textWidth) tempTextWidth = textWidth; - - Vector3 vec = { 0 }; - vec.x = tempTextWidth + (float)((tempLen - 1)*fontSpacing/(float)font.baseSize*scale); // Adds chars spacing to measure - vec.y = 0.25f; - vec.z = textHeight; - - return vec; -} - -// Draw a 2D text in 3D space and wave the parts that start with `~~` and end with `~~`. -// This is a modified version of the original code by @Nighten found here https://github.com/NightenDushi/Raylib_DrawTextStyle -static void DrawTextWave3D(Font font, const char *text, Vector3 position, float fontSize, float fontSpacing, float lineSpacing, bool backface, WaveTextConfig* config, float time, Color tint) -{ - int length = TextLength(text); // Total length in bytes of the text, scanned by codepoints in loop - - float textOffsetY = 0.0f; // Offset between lines (on line break '\n') - float textOffsetX = 0.0f; // Offset X to next character to draw - - float scale = fontSize/(float)font.baseSize; - - bool wave = false; - - for (int i = 0, k = 0; i < length; ++k) - { - // Get next codepoint from byte string and glyph index in font - int codepointByteCount = 0; - int codepoint = GetCodepoint(&text[i], &codepointByteCount); - int index = GetGlyphIndex(font, codepoint); - - // NOTE: Normally we exit the decoding sequence as soon as a bad byte is found (and return 0x3f) - // but we need to draw all of the bad bytes using the '?' symbol moving one byte - if (codepoint == 0x3f) codepointByteCount = 1; - - if (codepoint == '\n') - { - // NOTE: Fixed line spacing of 1.5 line-height - // TODO: Support custom line spacing defined by user - textOffsetY += scale + lineSpacing/(float)font.baseSize*scale; - textOffsetX = 0.0f; - k = 0; - } - else if (codepoint == '~') - { - if (GetCodepoint(&text[i+1], &codepointByteCount) == '~') - { - codepointByteCount += 1; - wave = !wave; - } - } - else - { - if ((codepoint != ' ') && (codepoint != '\t')) - { - Vector3 pos = position; - if (wave) // Apply the wave effect - { - pos.x += sinf(time*config->waveSpeed.x-k*config->waveOffset.x)*config->waveRange.x; - pos.y += sinf(time*config->waveSpeed.y-k*config->waveOffset.y)*config->waveRange.y; - pos.z += sinf(time*config->waveSpeed.z-k*config->waveOffset.z)*config->waveRange.z; - } - - DrawTextCodepoint3D(font, codepoint, (Vector3){ pos.x + textOffsetX, pos.y, pos.z + textOffsetY }, fontSize, backface, tint); - } - - if (font.glyphs[index].advanceX == 0) textOffsetX += (float)(font.recs[index].width + fontSpacing)/(float)font.baseSize*scale; - else textOffsetX += (float)(font.glyphs[index].advanceX + fontSpacing)/(float)font.baseSize*scale; - } - - i += codepointByteCount; // Move text bytes counter to next codepoint - } -} - -// Measure a text in 3D ignoring the `~~` chars. -static Vector3 MeasureTextWave3D(Font font, const char* text, float fontSize, float fontSpacing, float lineSpacing) -{ - int len = TextLength(text); - int tempLen = 0; // Used to count longer text line num chars - int lenCounter = 0; - - float tempTextWidth = 0.0f; // Used to count longer text line width - - float scale = fontSize/(float)font.baseSize; - float textHeight = scale; - float textWidth = 0.0f; - - int letter = 0; // Current character - int index = 0; // Index position in sprite font - - for (int i = 0; i < len; i++) - { - lenCounter++; - - int next = 0; - letter = GetCodepoint(&text[i], &next); - index = GetGlyphIndex(font, letter); - - // NOTE: normally we exit the decoding sequence as soon as a bad byte is found (and return 0x3f) - // but we need to draw all of the bad bytes using the '?' symbol so to not skip any we set next = 1 - if (letter == 0x3f) next = 1; - i += next - 1; - - if (letter != '\n') - { - if (letter == '~' && GetCodepoint(&text[i+1], &next) == '~') - { - i++; - } - else - { - if (font.glyphs[index].advanceX != 0) textWidth += (font.glyphs[index].advanceX+fontSpacing)/(float)font.baseSize*scale; - else textWidth += (font.recs[index].width + font.glyphs[index].offsetX)/(float)font.baseSize*scale; - } - } - else - { - if (tempTextWidth < textWidth) tempTextWidth = textWidth; - lenCounter = 0; - textWidth = 0.0f; - textHeight += scale + lineSpacing/(float)font.baseSize*scale; - } - - if (tempLen < lenCounter) tempLen = lenCounter; - } - - if (tempTextWidth < textWidth) tempTextWidth = textWidth; - - Vector3 vec = { 0 }; - vec.x = tempTextWidth + (float)((tempLen - 1)*fontSpacing/(float)font.baseSize*scale); // Adds chars spacing to measure - vec.y = 0.25f; - vec.z = textHeight; - - return vec; -} - -// Generates a nice color with a random hue -static Color GenerateRandomColor(float s, float v) -{ - const float Phi = 0.618033988749895f; // Golden ratio conjugate - float h = (float)GetRandomValue(0, 360); - h = fmodf((h + h*Phi), 360.0f); - return ColorFromHSV(h, s, v); -} diff --git a/examples/text/text_font_filters.c b/examples/text/text_font_filters.c deleted file mode 100644 index e675671..0000000 --- a/examples/text/text_font_filters.c +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Font filters -* -* NOTE: After font loading, font texture atlas filter could be configured for a softer -* display of the font when scaling it to different sizes, that way, it's not required -* to generate multiple fonts at multiple sizes (as long as the scaling is not very different) -* -* Example originally created with raylib 1.3, 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) 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 [text] example - font filters"); - - const char msg[50] = "Loaded Font"; - - // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) - - // TTF Font loading with custom generation parameters - Font font = LoadFontEx("resources/KAISG.ttf", 96, 0, 0); - - // Generate mipmap levels to use trilinear filtering - // NOTE: On 2D drawing it won't be noticeable, it looks like FILTER_BILINEAR - GenTextureMipmaps(&font.texture); - - float fontSize = (float)font.baseSize; - Vector2 fontPosition = { 40.0f, screenHeight/2.0f - 80.0f }; - Vector2 textSize = { 0.0f, 0.0f }; - - // Setup texture scaling filter - SetTextureFilter(font.texture, TEXTURE_FILTER_POINT); - int currentFontFilter = 0; // TEXTURE_FILTER_POINT - - 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 - //---------------------------------------------------------------------------------- - fontSize += GetMouseWheelMove()*4.0f; - - // Choose font texture filter method - if (IsKeyPressed(KEY_ONE)) - { - SetTextureFilter(font.texture, TEXTURE_FILTER_POINT); - currentFontFilter = 0; - } - else if (IsKeyPressed(KEY_TWO)) - { - SetTextureFilter(font.texture, TEXTURE_FILTER_BILINEAR); - currentFontFilter = 1; - } - else if (IsKeyPressed(KEY_THREE)) - { - // NOTE: Trilinear filter won't be noticed on 2D drawing - SetTextureFilter(font.texture, TEXTURE_FILTER_TRILINEAR); - currentFontFilter = 2; - } - - textSize = MeasureTextEx(font, msg, fontSize, 0); - - if (IsKeyDown(KEY_LEFT)) fontPosition.x -= 10; - else if (IsKeyDown(KEY_RIGHT)) fontPosition.x += 10; - - // Load a dropped TTF file dynamically (at current fontSize) - if (IsFileDropped()) - { - FilePathList droppedFiles = LoadDroppedFiles(); - - // NOTE: We only support first ttf file dropped - if (IsFileExtension(droppedFiles.paths[0], ".ttf")) - { - UnloadFont(font); - font = LoadFontEx(droppedFiles.paths[0], (int)fontSize, 0, 0); - } - - UnloadDroppedFiles(droppedFiles); // Unload filepaths from memory - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText("Use mouse wheel to change font size", 20, 20, 10, GRAY); - DrawText("Use KEY_RIGHT and KEY_LEFT to move text", 20, 40, 10, GRAY); - DrawText("Use 1, 2, 3 to change texture filter", 20, 60, 10, GRAY); - DrawText("Drop a new TTF font for dynamic loading", 20, 80, 10, DARKGRAY); - - DrawTextEx(font, msg, fontPosition, fontSize, 0, BLACK); - - // TODO: It seems texSize measurement is not accurate due to chars offsets... - //DrawRectangleLines(fontPosition.x, fontPosition.y, textSize.x, textSize.y, RED); - - DrawRectangle(0, screenHeight - 80, screenWidth, 80, LIGHTGRAY); - DrawText(TextFormat("Font size: %02.02f", fontSize), 20, screenHeight - 50, 10, DARKGRAY); - DrawText(TextFormat("Text size: [%02.02f, %02.02f]", textSize.x, textSize.y), 20, screenHeight - 30, 10, DARKGRAY); - DrawText("CURRENT TEXTURE FILTER:", 250, 400, 20, GRAY); - - if (currentFontFilter == 0) DrawText("POINT", 570, 400, 20, BLACK); - else if (currentFontFilter == 1) DrawText("BILINEAR", 570, 400, 20, BLACK); - else if (currentFontFilter == 2) DrawText("TRILINEAR", 570, 400, 20, BLACK); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadFont(font); // Font unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/text/text_font_loading.c b/examples/text/text_font_loading.c deleted file mode 100644 index 2ded64f..0000000 --- a/examples/text/text_font_loading.c +++ /dev/null @@ -1,96 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Font loading -* -* NOTE: raylib can load fonts from multiple input file formats: -* -* - TTF/OTF > Sprite font atlas is generated on loading, user can configure -* some of the generation parameters (size, characters to include) -* - BMFonts > Angel code font fileformat, sprite font image must be provided -* together with the .fnt file, font generation cna not be configured -* - XNA Spritefont > Sprite font image, following XNA Spritefont conventions, -* Characters in image must follow some spacing and order rules -* -* Example originally created with raylib 1.4, last time updated with raylib 3.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) 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 [text] example - font loading"); - - // Define characters to draw - // NOTE: raylib supports UTF-8 encoding, following list is actually codified as UTF8 internally - const char msg[256] = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI\nJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmn\nopqrstuvwxyz{|}~¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓ\nÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷\nøùúûüýþÿ"; - - // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) - - // BMFont (AngelCode) : Font data and image atlas have been generated using external program - Font fontBm = LoadFont("resources/pixantiqua.fnt"); - - // TTF font : Font data and atlas are generated directly from TTF - // NOTE: We define a font base size of 32 pixels tall and up-to 250 characters - Font fontTtf = LoadFontEx("resources/pixantiqua.ttf", 32, 0, 250); - - bool useTtf = 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 - //---------------------------------------------------------------------------------- - if (IsKeyDown(KEY_SPACE)) useTtf = true; - else useTtf = false; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText("Hold SPACE to use TTF generated font", 20, 20, 20, LIGHTGRAY); - - if (!useTtf) - { - DrawTextEx(fontBm, msg, (Vector2){ 20.0f, 100.0f }, (float)fontBm.baseSize, 2, MAROON); - DrawText("Using BMFont (Angelcode) imported", 20, GetScreenHeight() - 30, 20, GRAY); - } - else - { - DrawTextEx(fontTtf, msg, (Vector2){ 20.0f, 100.0f }, (float)fontTtf.baseSize, 2, LIME); - DrawText("Using TTF font generated", 20, GetScreenHeight() - 30, 20, GRAY); - } - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadFont(fontBm); // AngelCode Font unloading - UnloadFont(fontTtf); // TTF Font unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/text/text_font_loading.js b/examples/text/text_font_loading.js new file mode 100644 index 0000000..15ea08c --- /dev/null +++ b/examples/text/text_font_loading.js @@ -0,0 +1,86 @@ +/******************************************************************************************* +* +* raylib [text] example - Font loading +* +* NOTE: raylib can load fonts from multiple input file formats: +* +* - TTF/OTF > Sprite font atlas is generated on loading, user can configure +* some of the generation parameters (size, characters to include) +* - BMFonts > Angel code font fileformat, sprite font image must be provided +* together with the .fnt file, font generation cna not be configured +* - XNA Spritefont > Sprite font image, following XNA Spritefont conventions, +* Characters in image must follow some spacing and order rules +* +* Example originally created with raylib 1.4, last time updated with raylib 3.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) 2016-2023 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ +// Initialization +//-------------------------------------------------------------------------------------- +const screenWidth = 800; +const screenHeight = 450; + +initWindow(screenWidth, screenHeight, "raylib [text] example - font loading"); + +// Define characters to draw +// NOTE: raylib supports UTF-8 encoding, following list is actually codified as UTF8 internally +const msg = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI\nJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmn\nopqrstuvwxyz{|}~¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓ\nÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷\nøùúûüýþÿ"; + +// NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) + +// BMFont (AngelCode) : Font data and image atlas have been generated using external program +const fontBm = loadFont("resources/pixantiqua.fnt"); + +// TTF font : Font data and atlas are generated directly from TTF +// NOTE: We define a font base size of 32 pixels tall and up-to 250 characters +const fontTtf = loadFontEx("resources/pixantiqua.ttf", 32, 0, 250); + +let useTtf = 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 + //---------------------------------------------------------------------------------- + if (isKeyDown(KEY_SPACE)) useTtf = true; + else useTtf = false; + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + beginDrawing(); + + clearBackground(RAYWHITE); + + drawText("Hold SPACE to use TTF generated font", 20, 20, 20, LIGHTGRAY); + + if (!useTtf) + { + traceLog(LOG_INFO, fontBm.baseSize) + drawTextEx(fontBm, msg, new Vector2(20.0, 100.0), fontBm.baseSize/2, 2, MAROON); + drawText("Using BMFont (Angelcode) imported", 20, getScreenHeight() - 30, 20, GRAY); + } + else + { + drawTextEx(fontTtf, msg, new Vector2(20.0, 100.0), fontTtf.baseSize/2, 2, LIME); + drawText("Using TTF font generated", 20, getScreenHeight() - 30, 20, GRAY); + } + + endDrawing(); + //---------------------------------------------------------------------------------- +} + +// De-Initialization +//-------------------------------------------------------------------------------------- +unloadFont(fontBm); // AngelCode Font unloading +unloadFont(fontTtf); // TTF Font unloading + +closeWindow(); // Close window and OpenGL context +//-------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/examples/text/text_font_sdf.c b/examples/text/text_font_sdf.c deleted file mode 100644 index 6a223ae..0000000 --- a/examples/text/text_font_sdf.c +++ /dev/null @@ -1,146 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Font SDF loading -* -* 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 - -#include - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [text] example - SDF fonts"); - - // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) - - const char msg[50] = "Signed Distance Fields"; - - // Loading file to memory - unsigned int fileSize = 0; - unsigned char *fileData = LoadFileData("resources/anonymous_pro_bold.ttf", &fileSize); - - // Default font generation from TTF font - Font fontDefault = { 0 }; - fontDefault.baseSize = 16; - fontDefault.glyphCount = 95; - - // Loading font data from memory data - // Parameters > font size: 16, no glyphs array provided (0), glyphs count: 95 (autogenerate chars array) - fontDefault.glyphs = LoadFontData(fileData, fileSize, 16, 0, 95, FONT_DEFAULT); - // Parameters > glyphs count: 95, font size: 16, glyphs padding in image: 4 px, pack method: 0 (default) - Image atlas = GenImageFontAtlas(fontDefault.glyphs, &fontDefault.recs, 95, 16, 4, 0); - fontDefault.texture = LoadTextureFromImage(atlas); - UnloadImage(atlas); - - // SDF font generation from TTF font - Font fontSDF = { 0 }; - fontSDF.baseSize = 16; - fontSDF.glyphCount = 95; - // Parameters > font size: 16, no glyphs array provided (0), glyphs count: 0 (defaults to 95) - fontSDF.glyphs = LoadFontData(fileData, fileSize, 16, 0, 0, FONT_SDF); - // Parameters > glyphs count: 95, font size: 16, glyphs padding in image: 0 px, pack method: 1 (Skyline algorythm) - atlas = GenImageFontAtlas(fontSDF.glyphs, &fontSDF.recs, 95, 16, 0, 1); - fontSDF.texture = LoadTextureFromImage(atlas); - UnloadImage(atlas); - - UnloadFileData(fileData); // Free memory from loaded file - - // Load SDF required shader (we use default vertex shader) - Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/sdf.fs", GLSL_VERSION)); - SetTextureFilter(fontSDF.texture, TEXTURE_FILTER_BILINEAR); // Required for SDF font - - Vector2 fontPosition = { 40, screenHeight/2.0f - 50 }; - Vector2 textSize = { 0.0f, 0.0f }; - float fontSize = 16.0f; - int currentFont = 0; // 0 - fontDefault, 1 - fontSDF - - 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 - //---------------------------------------------------------------------------------- - fontSize += GetMouseWheelMove()*8.0f; - - if (fontSize < 6) fontSize = 6; - - if (IsKeyDown(KEY_SPACE)) currentFont = 1; - else currentFont = 0; - - if (currentFont == 0) textSize = MeasureTextEx(fontDefault, msg, fontSize, 0); - else textSize = MeasureTextEx(fontSDF, msg, fontSize, 0); - - fontPosition.x = GetScreenWidth()/2 - textSize.x/2; - fontPosition.y = GetScreenHeight()/2 - textSize.y/2 + 80; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - if (currentFont == 1) - { - // NOTE: SDF fonts require a custom SDf shader to compute fragment color - BeginShaderMode(shader); // Activate SDF font shader - DrawTextEx(fontSDF, msg, fontPosition, fontSize, 0, BLACK); - EndShaderMode(); // Activate our default shader for next drawings - - DrawTexture(fontSDF.texture, 10, 10, BLACK); - } - else - { - DrawTextEx(fontDefault, msg, fontPosition, fontSize, 0, BLACK); - DrawTexture(fontDefault.texture, 10, 10, BLACK); - } - - if (currentFont == 1) DrawText("SDF!", 320, 20, 80, RED); - else DrawText("default font", 315, 40, 30, GRAY); - - DrawText("FONT SIZE: 16.0", GetScreenWidth() - 240, 20, 20, DARKGRAY); - DrawText(TextFormat("RENDER SIZE: %02.02f", fontSize), GetScreenWidth() - 240, 50, 20, DARKGRAY); - DrawText("Use MOUSE WHEEL to SCALE TEXT!", GetScreenWidth() - 240, 90, 10, DARKGRAY); - - DrawText("HOLD SPACE to USE SDF FONT VERSION!", 340, GetScreenHeight() - 30, 20, MAROON); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadFont(fontDefault); // Default font unloading - UnloadFont(fontSDF); // SDF font unloading - - UnloadShader(shader); // Unload SDF shader - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/text/text_font_spritefont.c b/examples/text/text_font_spritefont.c deleted file mode 100644 index b5df2d0..0000000 --- a/examples/text/text_font_spritefont.c +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Sprite font loading -* -* NOTE: Sprite fonts should be generated following this conventions: -* -* - Characters must be ordered starting with character 32 (Space) -* - Every character must be contained within the same Rectangle height -* - Every character and every line must be separated by the same distance (margin/padding) -* - Rectangles must be defined by a MAGENTA color background -* -* Following those constraints, a font can be provided just by an image, -* this is quite handy to avoid additional font descriptor files (like BMFonts use). -* -* 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 [text] example - sprite font loading"); - - const char msg1[50] = "THIS IS A custom SPRITE FONT..."; - const char msg2[50] = "...and this is ANOTHER CUSTOM font..."; - const char msg3[50] = "...and a THIRD one! GREAT! :D"; - - // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) - Font font1 = LoadFont("resources/custom_mecha.png"); // Font loading - Font font2 = LoadFont("resources/custom_alagard.png"); // Font loading - Font font3 = LoadFont("resources/custom_jupiter_crash.png"); // Font loading - - Vector2 fontPosition1 = { screenWidth/2.0f - MeasureTextEx(font1, msg1, (float)font1.baseSize, -3).x/2, - screenHeight/2.0f - font1.baseSize/2.0f - 80.0f }; - - Vector2 fontPosition2 = { screenWidth/2.0f - MeasureTextEx(font2, msg2, (float)font2.baseSize, -2.0f).x/2.0f, - screenHeight/2.0f - font2.baseSize/2.0f - 10.0f }; - - Vector2 fontPosition3 = { screenWidth/2.0f - MeasureTextEx(font3, msg3, (float)font3.baseSize, 2.0f).x/2.0f, - screenHeight/2.0f - font3.baseSize/2.0f + 50.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 - //---------------------------------------------------------------------------------- - // TODO: Update variables here... - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTextEx(font1, msg1, fontPosition1, (float)font1.baseSize, -3, WHITE); - DrawTextEx(font2, msg2, fontPosition2, (float)font2.baseSize, -2, WHITE); - DrawTextEx(font3, msg3, fontPosition3, (float)font3.baseSize, 2, WHITE); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadFont(font1); // Font unloading - UnloadFont(font2); // Font unloading - UnloadFont(font3); // Font unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/text/text_format_text.c b/examples/text/text_format_text.c deleted file mode 100644 index 6b1b045..0000000 --- a/examples/text/text_format_text.c +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Text formatting -* -* Example originally created with raylib 1.1, last time updated with raylib 3.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 [text] example - text formatting"); - - int score = 100020; - int hiscore = 200450; - int lives = 5; - - 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); - - DrawText(TextFormat("Score: %08i", score), 200, 80, 20, RED); - - DrawText(TextFormat("HiScore: %08i", hiscore), 200, 120, 20, GREEN); - - DrawText(TextFormat("Lives: %02i", lives), 200, 160, 40, BLUE); - - DrawText(TextFormat("Elapsed Time: %02.02f ms", GetFrameTime()*1000), 200, 220, 20, BLACK); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/text/text_input_box.c b/examples/text/text_input_box.c deleted file mode 100644 index f3923c1..0000000 --- a/examples/text/text_input_box.c +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Input Box -* -* 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_INPUT_CHARS 9 - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [text] example - input box"); - - char name[MAX_INPUT_CHARS + 1] = "\0"; // NOTE: One extra space required for null terminator char '\0' - int letterCount = 0; - - Rectangle textBox = { screenWidth/2.0f - 100, 180, 225, 50 }; - bool mouseOnText = false; - - int framesCounter = 0; - - SetTargetFPS(10); // Set our game to run at 10 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - if (CheckCollisionPointRec(GetMousePosition(), textBox)) mouseOnText = true; - else mouseOnText = false; - - if (mouseOnText) - { - // Set the window's cursor to the I-Beam - SetMouseCursor(MOUSE_CURSOR_IBEAM); - - // Get char pressed (unicode character) on the queue - int key = GetCharPressed(); - - // Check if more characters have been pressed on the same frame - while (key > 0) - { - // NOTE: Only allow keys in range [32..125] - if ((key >= 32) && (key <= 125) && (letterCount < MAX_INPUT_CHARS)) - { - name[letterCount] = (char)key; - name[letterCount+1] = '\0'; // Add null terminator at the end of the string. - letterCount++; - } - - key = GetCharPressed(); // Check next character in the queue - } - - if (IsKeyPressed(KEY_BACKSPACE)) - { - letterCount--; - if (letterCount < 0) letterCount = 0; - name[letterCount] = '\0'; - } - } - else SetMouseCursor(MOUSE_CURSOR_DEFAULT); - - if (mouseOnText) framesCounter++; - else framesCounter = 0; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText("PLACE MOUSE OVER INPUT BOX!", 240, 140, 20, GRAY); - - DrawRectangleRec(textBox, LIGHTGRAY); - if (mouseOnText) DrawRectangleLines((int)textBox.x, (int)textBox.y, (int)textBox.width, (int)textBox.height, RED); - else DrawRectangleLines((int)textBox.x, (int)textBox.y, (int)textBox.width, (int)textBox.height, DARKGRAY); - - DrawText(name, (int)textBox.x + 5, (int)textBox.y + 8, 40, MAROON); - - DrawText(TextFormat("INPUT CHARS: %i/%i", letterCount, MAX_INPUT_CHARS), 315, 250, 20, DARKGRAY); - - if (mouseOnText) - { - if (letterCount < MAX_INPUT_CHARS) - { - // Draw blinking underscore char - if (((framesCounter/20)%2) == 0) DrawText("_", (int)textBox.x + 8 + MeasureText(name, 40), (int)textBox.y + 12, 40, MAROON); - } - else DrawText("Press BACKSPACE to delete chars...", 230, 300, 20, GRAY); - } - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -// Check if any key is pressed -// NOTE: We limit keys check to keys between 32 (KEY_SPACE) and 126 -bool IsAnyKeyPressed() -{ - bool keyPressed = false; - int key = GetKeyPressed(); - - if ((key >= 32) && (key <= 126)) keyPressed = true; - - return keyPressed; -} diff --git a/examples/text/text_raylib_fonts.c b/examples/text/text_raylib_fonts.c deleted file mode 100644 index 8ef67c7..0000000 --- a/examples/text/text_raylib_fonts.c +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - raylib fonts loading -* -* NOTE: raylib is distributed with some free to use fonts (even for commercial pourposes!) -* To view details and credits for those fonts, check raylib license file -* -* 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) 2017-2023 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#define MAX_FONTS 8 - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [text] example - raylib fonts"); - - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - Font fonts[MAX_FONTS] = { 0 }; - - fonts[0] = LoadFont("resources/fonts/alagard.png"); - fonts[1] = LoadFont("resources/fonts/pixelplay.png"); - fonts[2] = LoadFont("resources/fonts/mecha.png"); - fonts[3] = LoadFont("resources/fonts/setback.png"); - fonts[4] = LoadFont("resources/fonts/romulus.png"); - fonts[5] = LoadFont("resources/fonts/pixantiqua.png"); - fonts[6] = LoadFont("resources/fonts/alpha_beta.png"); - fonts[7] = LoadFont("resources/fonts/jupiter_crash.png"); - - const char *messages[MAX_FONTS] = { "ALAGARD FONT designed by Hewett Tsoi", - "PIXELPLAY FONT designed by Aleksander Shevchuk", - "MECHA FONT designed by Captain Falcon", - "SETBACK FONT designed by Brian Kent (AEnigma)", - "ROMULUS FONT designed by Hewett Tsoi", - "PIXANTIQUA FONT designed by Gerhard Grossmann", - "ALPHA_BETA FONT designed by Brian Kent (AEnigma)", - "JUPITER_CRASH FONT designed by Brian Kent (AEnigma)" }; - - const int spacings[MAX_FONTS] = { 2, 4, 8, 4, 3, 4, 4, 1 }; - - Vector2 positions[MAX_FONTS] = { 0 }; - - for (int i = 0; i < MAX_FONTS; i++) - { - positions[i].x = screenWidth/2.0f - MeasureTextEx(fonts[i], messages[i], fonts[i].baseSize*2.0f, (float)spacings[i]).x/2.0f; - positions[i].y = 60.0f + fonts[i].baseSize + 45.0f*i; - } - - // Small Y position corrections - positions[3].y += 8; - positions[4].y += 2; - positions[7].y -= 8; - - Color colors[MAX_FONTS] = { MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, LIME, GOLD, RED }; - - 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); - - DrawText("free fonts included with raylib", 250, 20, 20, DARKGRAY); - DrawLine(220, 50, 590, 50, DARKGRAY); - - for (int i = 0; i < MAX_FONTS; i++) - { - DrawTextEx(fonts[i], messages[i], positions[i], fonts[i].baseSize*2.0f, (float)spacings[i], colors[i]); - } - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - - // Fonts unloading - for (int i = 0; i < MAX_FONTS; i++) UnloadFont(fonts[i]); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/text/text_rectangle_bounds.c b/examples/text/text_rectangle_bounds.c deleted file mode 100644 index 886c348..0000000 --- a/examples/text/text_rectangle_bounds.c +++ /dev/null @@ -1,268 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Rectangle bounds -* -* Example originally created with raylib 2.5, last time updated with raylib 4.0 -* -* 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" - -static void DrawTextBoxed(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint); // Draw text using font inside rectangle limits -static void DrawTextBoxedSelectable(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint, int selectStart, int selectLength, Color selectTint, Color selectBackTint); // Draw text using font inside rectangle limits with support for text selection - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [text] example - draw text inside a rectangle"); - - const char text[] = "Text cannot escape\tthis container\t...word wrap also works when active so here's \ -a long text for testing.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod \ -tempor incididunt ut labore et dolore magna aliqua. Nec ullamcorper sit amet risus nullam eget felis eget."; - - bool resizing = false; - bool wordWrap = true; - - Rectangle container = { 25.0f, 25.0f, screenWidth - 50.0f, screenHeight - 250.0f }; - Rectangle resizer = { container.x + container.width - 17, container.y + container.height - 17, 14, 14 }; - - // Minimum width and heigh for the container rectangle - const float minWidth = 60; - const float minHeight = 60; - const float maxWidth = screenWidth - 50.0f; - const float maxHeight = screenHeight - 160.0f; - - Vector2 lastMouse = { 0.0f, 0.0f }; // Stores last mouse coordinates - Color borderColor = MAROON; // Container border color - Font font = GetFontDefault(); // Get default system font - - 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)) wordWrap = !wordWrap; - - Vector2 mouse = GetMousePosition(); - - // Check if the mouse is inside the container and toggle border color - if (CheckCollisionPointRec(mouse, container)) borderColor = Fade(MAROON, 0.4f); - else if (!resizing) borderColor = MAROON; - - // Container resizing logic - if (resizing) - { - if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) resizing = false; - - float width = container.width + (mouse.x - lastMouse.x); - container.width = (width > minWidth)? ((width < maxWidth)? width : maxWidth) : minWidth; - - float height = container.height + (mouse.y - lastMouse.y); - container.height = (height > minHeight)? ((height < maxHeight)? height : maxHeight) : minHeight; - } - else - { - // Check if we're resizing - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(mouse, resizer)) resizing = true; - } - - // Move resizer rectangle properly - resizer.x = container.x + container.width - 17; - resizer.y = container.y + container.height - 17; - - lastMouse = mouse; // Update mouse - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawRectangleLinesEx(container, 3, borderColor); // Draw container border - - // Draw text in container (add some padding) - DrawTextBoxed(font, text, (Rectangle){ container.x + 4, container.y + 4, container.width - 4, container.height - 4 }, 20.0f, 2.0f, wordWrap, GRAY); - - DrawRectangleRec(resizer, borderColor); // Draw the resize box - - // Draw bottom info - DrawRectangle(0, screenHeight - 54, screenWidth, 54, GRAY); - DrawRectangleRec((Rectangle){ 382.0f, screenHeight - 34.0f, 12.0f, 12.0f }, MAROON); - - DrawText("Word Wrap: ", 313, screenHeight-115, 20, BLACK); - if (wordWrap) DrawText("ON", 447, screenHeight - 115, 20, RED); - else DrawText("OFF", 447, screenHeight - 115, 20, BLACK); - - DrawText("Press [SPACE] to toggle word wrap", 218, screenHeight - 86, 20, GRAY); - - DrawText("Click hold & drag the to resize the container", 155, screenHeight - 38, 20, RAYWHITE); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//-------------------------------------------------------------------------------------- -// Module functions definition -//-------------------------------------------------------------------------------------- - -// Draw text using font inside rectangle limits -static void DrawTextBoxed(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint) -{ - DrawTextBoxedSelectable(font, text, rec, fontSize, spacing, wordWrap, tint, 0, 0, WHITE, WHITE); -} - -// Draw text using font inside rectangle limits with support for text selection -static void DrawTextBoxedSelectable(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint, int selectStart, int selectLength, Color selectTint, Color selectBackTint) -{ - int length = TextLength(text); // Total length in bytes of the text, scanned by codepoints in loop - - float textOffsetY = 0; // Offset between lines (on line break '\n') - float textOffsetX = 0.0f; // Offset X to next character to draw - - float scaleFactor = fontSize/(float)font.baseSize; // Character rectangle scaling factor - - // Word/character wrapping mechanism variables - enum { MEASURE_STATE = 0, DRAW_STATE = 1 }; - int state = wordWrap? MEASURE_STATE : DRAW_STATE; - - int startLine = -1; // Index where to begin drawing (where a line begins) - int endLine = -1; // Index where to stop drawing (where a line ends) - int lastk = -1; // Holds last value of the character position - - for (int i = 0, k = 0; i < length; i++, k++) - { - // Get next codepoint from byte string and glyph index in font - int codepointByteCount = 0; - int codepoint = GetCodepoint(&text[i], &codepointByteCount); - int index = GetGlyphIndex(font, codepoint); - - // NOTE: Normally we exit the decoding sequence as soon as a bad byte is found (and return 0x3f) - // but we need to draw all of the bad bytes using the '?' symbol moving one byte - if (codepoint == 0x3f) codepointByteCount = 1; - i += (codepointByteCount - 1); - - float glyphWidth = 0; - if (codepoint != '\n') - { - glyphWidth = (font.glyphs[index].advanceX == 0) ? font.recs[index].width*scaleFactor : font.glyphs[index].advanceX*scaleFactor; - - if (i + 1 < length) glyphWidth = glyphWidth + spacing; - } - - // NOTE: When wordWrap is ON we first measure how much of the text we can draw before going outside of the rec container - // We store this info in startLine and endLine, then we change states, draw the text between those two variables - // and change states again and again recursively until the end of the text (or until we get outside of the container). - // When wordWrap is OFF we don't need the measure state so we go to the drawing state immediately - // and begin drawing on the next line before we can get outside the container. - if (state == MEASURE_STATE) - { - // TODO: There are multiple types of spaces in UNICODE, maybe it's a good idea to add support for more - // Ref: http://jkorpela.fi/chars/spaces.html - if ((codepoint == ' ') || (codepoint == '\t') || (codepoint == '\n')) endLine = i; - - if ((textOffsetX + glyphWidth) > rec.width) - { - endLine = (endLine < 1)? i : endLine; - if (i == endLine) endLine -= codepointByteCount; - if ((startLine + codepointByteCount) == endLine) endLine = (i - codepointByteCount); - - state = !state; - } - else if ((i + 1) == length) - { - endLine = i; - state = !state; - } - else if (codepoint == '\n') state = !state; - - if (state == DRAW_STATE) - { - textOffsetX = 0; - i = startLine; - glyphWidth = 0; - - // Save character position when we switch states - int tmp = lastk; - lastk = k - 1; - k = tmp; - } - } - else - { - if (codepoint == '\n') - { - if (!wordWrap) - { - textOffsetY += (font.baseSize + font.baseSize/2)*scaleFactor; - textOffsetX = 0; - } - } - else - { - if (!wordWrap && ((textOffsetX + glyphWidth) > rec.width)) - { - textOffsetY += (font.baseSize + font.baseSize/2)*scaleFactor; - textOffsetX = 0; - } - - // When text overflows rectangle height limit, just stop drawing - if ((textOffsetY + font.baseSize*scaleFactor) > rec.height) break; - - // Draw selection background - bool isGlyphSelected = false; - if ((selectStart >= 0) && (k >= selectStart) && (k < (selectStart + selectLength))) - { - DrawRectangleRec((Rectangle){ rec.x + textOffsetX - 1, rec.y + textOffsetY, glyphWidth, (float)font.baseSize*scaleFactor }, selectBackTint); - isGlyphSelected = true; - } - - // Draw current character glyph - if ((codepoint != ' ') && (codepoint != '\t')) - { - DrawTextCodepoint(font, codepoint, (Vector2){ rec.x + textOffsetX, rec.y + textOffsetY }, fontSize, isGlyphSelected? selectTint : tint); - } - } - - if (wordWrap && (i == endLine)) - { - textOffsetY += (font.baseSize + font.baseSize/2)*scaleFactor; - textOffsetX = 0; - startLine = endLine; - endLine = -1; - glyphWidth = 0; - selectStart += lastk - k; - k = lastk; - - state = !state; - } - } - - if ((textOffsetX != 0) || (codepoint != ' ')) textOffsetX += glyphWidth; // avoid leading spaces - } -} diff --git a/examples/text/text_unicode.c b/examples/text/text_unicode.c deleted file mode 100644 index eb2a784..0000000 --- a/examples/text/text_unicode.c +++ /dev/null @@ -1,468 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Unicode -* -* Example originally created with raylib 2.5, last time updated with raylib 4.0 -* -* 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) 2019-2023 Vlad Adrian (@demizdor) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include -#include - -#define SIZEOF(A) (sizeof(A)/sizeof(A[0])) -#define EMOJI_PER_WIDTH 8 -#define EMOJI_PER_HEIGHT 4 - -// String containing 180 emoji codepoints separated by a '\0' char -const char *const emojiCodepoints = "\xF0\x9F\x8C\x80\x00\xF0\x9F\x98\x80\x00\xF0\x9F\x98\x82\x00\xF0\x9F\xA4\xA3\x00\xF0\x9F\x98\x83\x00\xF0\x9F\x98\x86\x00\xF0\x9F\x98\x89\x00" - "\xF0\x9F\x98\x8B\x00\xF0\x9F\x98\x8E\x00\xF0\x9F\x98\x8D\x00\xF0\x9F\x98\x98\x00\xF0\x9F\x98\x97\x00\xF0\x9F\x98\x99\x00\xF0\x9F\x98\x9A\x00\xF0\x9F\x99\x82\x00" - "\xF0\x9F\xA4\x97\x00\xF0\x9F\xA4\xA9\x00\xF0\x9F\xA4\x94\x00\xF0\x9F\xA4\xA8\x00\xF0\x9F\x98\x90\x00\xF0\x9F\x98\x91\x00\xF0\x9F\x98\xB6\x00\xF0\x9F\x99\x84\x00" - "\xF0\x9F\x98\x8F\x00\xF0\x9F\x98\xA3\x00\xF0\x9F\x98\xA5\x00\xF0\x9F\x98\xAE\x00\xF0\x9F\xA4\x90\x00\xF0\x9F\x98\xAF\x00\xF0\x9F\x98\xAA\x00\xF0\x9F\x98\xAB\x00" - "\xF0\x9F\x98\xB4\x00\xF0\x9F\x98\x8C\x00\xF0\x9F\x98\x9B\x00\xF0\x9F\x98\x9D\x00\xF0\x9F\xA4\xA4\x00\xF0\x9F\x98\x92\x00\xF0\x9F\x98\x95\x00\xF0\x9F\x99\x83\x00" - "\xF0\x9F\xA4\x91\x00\xF0\x9F\x98\xB2\x00\xF0\x9F\x99\x81\x00\xF0\x9F\x98\x96\x00\xF0\x9F\x98\x9E\x00\xF0\x9F\x98\x9F\x00\xF0\x9F\x98\xA4\x00\xF0\x9F\x98\xA2\x00" - "\xF0\x9F\x98\xAD\x00\xF0\x9F\x98\xA6\x00\xF0\x9F\x98\xA9\x00\xF0\x9F\xA4\xAF\x00\xF0\x9F\x98\xAC\x00\xF0\x9F\x98\xB0\x00\xF0\x9F\x98\xB1\x00\xF0\x9F\x98\xB3\x00" - "\xF0\x9F\xA4\xAA\x00\xF0\x9F\x98\xB5\x00\xF0\x9F\x98\xA1\x00\xF0\x9F\x98\xA0\x00\xF0\x9F\xA4\xAC\x00\xF0\x9F\x98\xB7\x00\xF0\x9F\xA4\x92\x00\xF0\x9F\xA4\x95\x00" - "\xF0\x9F\xA4\xA2\x00\xF0\x9F\xA4\xAE\x00\xF0\x9F\xA4\xA7\x00\xF0\x9F\x98\x87\x00\xF0\x9F\xA4\xA0\x00\xF0\x9F\xA4\xAB\x00\xF0\x9F\xA4\xAD\x00\xF0\x9F\xA7\x90\x00" - "\xF0\x9F\xA4\x93\x00\xF0\x9F\x98\x88\x00\xF0\x9F\x91\xBF\x00\xF0\x9F\x91\xB9\x00\xF0\x9F\x91\xBA\x00\xF0\x9F\x92\x80\x00\xF0\x9F\x91\xBB\x00\xF0\x9F\x91\xBD\x00" - "\xF0\x9F\x91\xBE\x00\xF0\x9F\xA4\x96\x00\xF0\x9F\x92\xA9\x00\xF0\x9F\x98\xBA\x00\xF0\x9F\x98\xB8\x00\xF0\x9F\x98\xB9\x00\xF0\x9F\x98\xBB\x00\xF0\x9F\x98\xBD\x00" - "\xF0\x9F\x99\x80\x00\xF0\x9F\x98\xBF\x00\xF0\x9F\x8C\xBE\x00\xF0\x9F\x8C\xBF\x00\xF0\x9F\x8D\x80\x00\xF0\x9F\x8D\x83\x00\xF0\x9F\x8D\x87\x00\xF0\x9F\x8D\x93\x00" - "\xF0\x9F\xA5\x9D\x00\xF0\x9F\x8D\x85\x00\xF0\x9F\xA5\xA5\x00\xF0\x9F\xA5\x91\x00\xF0\x9F\x8D\x86\x00\xF0\x9F\xA5\x94\x00\xF0\x9F\xA5\x95\x00\xF0\x9F\x8C\xBD\x00" - "\xF0\x9F\x8C\xB6\x00\xF0\x9F\xA5\x92\x00\xF0\x9F\xA5\xA6\x00\xF0\x9F\x8D\x84\x00\xF0\x9F\xA5\x9C\x00\xF0\x9F\x8C\xB0\x00\xF0\x9F\x8D\x9E\x00\xF0\x9F\xA5\x90\x00" - "\xF0\x9F\xA5\x96\x00\xF0\x9F\xA5\xA8\x00\xF0\x9F\xA5\x9E\x00\xF0\x9F\xA7\x80\x00\xF0\x9F\x8D\x96\x00\xF0\x9F\x8D\x97\x00\xF0\x9F\xA5\xA9\x00\xF0\x9F\xA5\x93\x00" - "\xF0\x9F\x8D\x94\x00\xF0\x9F\x8D\x9F\x00\xF0\x9F\x8D\x95\x00\xF0\x9F\x8C\xAD\x00\xF0\x9F\xA5\xAA\x00\xF0\x9F\x8C\xAE\x00\xF0\x9F\x8C\xAF\x00\xF0\x9F\xA5\x99\x00" - "\xF0\x9F\xA5\x9A\x00\xF0\x9F\x8D\xB3\x00\xF0\x9F\xA5\x98\x00\xF0\x9F\x8D\xB2\x00\xF0\x9F\xA5\xA3\x00\xF0\x9F\xA5\x97\x00\xF0\x9F\x8D\xBF\x00\xF0\x9F\xA5\xAB\x00" - "\xF0\x9F\x8D\xB1\x00\xF0\x9F\x8D\x98\x00\xF0\x9F\x8D\x9D\x00\xF0\x9F\x8D\xA0\x00\xF0\x9F\x8D\xA2\x00\xF0\x9F\x8D\xA5\x00\xF0\x9F\x8D\xA1\x00\xF0\x9F\xA5\x9F\x00" - "\xF0\x9F\xA5\xA1\x00\xF0\x9F\x8D\xA6\x00\xF0\x9F\x8D\xAA\x00\xF0\x9F\x8E\x82\x00\xF0\x9F\x8D\xB0\x00\xF0\x9F\xA5\xA7\x00\xF0\x9F\x8D\xAB\x00\xF0\x9F\x8D\xAF\x00" - "\xF0\x9F\x8D\xBC\x00\xF0\x9F\xA5\x9B\x00\xF0\x9F\x8D\xB5\x00\xF0\x9F\x8D\xB6\x00\xF0\x9F\x8D\xBE\x00\xF0\x9F\x8D\xB7\x00\xF0\x9F\x8D\xBB\x00\xF0\x9F\xA5\x82\x00" - "\xF0\x9F\xA5\x83\x00\xF0\x9F\xA5\xA4\x00\xF0\x9F\xA5\xA2\x00\xF0\x9F\x91\x81\x00\xF0\x9F\x91\x85\x00\xF0\x9F\x91\x84\x00\xF0\x9F\x92\x8B\x00\xF0\x9F\x92\x98\x00" - "\xF0\x9F\x92\x93\x00\xF0\x9F\x92\x97\x00\xF0\x9F\x92\x99\x00\xF0\x9F\x92\x9B\x00\xF0\x9F\xA7\xA1\x00\xF0\x9F\x92\x9C\x00\xF0\x9F\x96\xA4\x00\xF0\x9F\x92\x9D\x00" - "\xF0\x9F\x92\x9F\x00\xF0\x9F\x92\x8C\x00\xF0\x9F\x92\xA4\x00\xF0\x9F\x92\xA2\x00\xF0\x9F\x92\xA3\x00"; - -struct { - char *text; - char *language; -} const messages[] = { // Array containing all of the emojis messages - {"\x46\x61\x6C\x73\x63\x68\x65\x73\x20\xC3\x9C\x62\x65\x6E\x20\x76\x6F\x6E\x20\x58\x79\x6C\x6F\x70\x68\x6F\x6E\x6D\x75\x73\x69\x6B\x20\x71\x75\xC3\xA4\x6C" - "\x74\x20\x6A\x65\x64\x65\x6E\x20\x67\x72\xC3\xB6\xC3\x9F\x65\x72\x65\x6E\x20\x5A\x77\x65\x72\x67", "German"}, - {"\x42\x65\x69\xC3\x9F\x20\x6E\x69\x63\x68\x74\x20\x69\x6E\x20\x64\x69\x65\x20\x48\x61\x6E\x64\x2C\x20\x64\x69\x65\x20\x64\x69\x63\x68\x20\x66\xC3\xBC\x74" - "\x74\x65\x72\x74\x2E", "German"}, - {"\x41\x75\xC3\x9F\x65\x72\x6F\x72\x64\x65\x6E\x74\x6C\x69\x63\x68\x65\x20\xC3\x9C\x62\x65\x6C\x20\x65\x72\x66\x6F\x72\x64\x65\x72\x6E\x20\x61\x75\xC3\x9F" - "\x65\x72\x6F\x72\x64\x65\x6E\x74\x6C\x69\x63\x68\x65\x20\x4D\x69\x74\x74\x65\x6C\x2E", "German"}, - {"\xD4\xBF\xD6\x80\xD5\xB6\xD5\xA1\xD5\xB4\x20\xD5\xA1\xD5\xBA\xD5\xA1\xD5\xAF\xD5\xAB\x20\xD5\xB8\xD6\x82\xD5\xBF\xD5\xA5\xD5\xAC\x20\xD6\x87\x20\xD5\xAB" - "\xD5\xB6\xD5\xAE\xD5\xAB\x20\xD5\xA1\xD5\xB6\xD5\xB0\xD5\xA1\xD5\xB6\xD5\xA3\xD5\xAB\xD5\xBD\xD5\xBF\x20\xD5\xB9\xD5\xA8\xD5\xB6\xD5\xA5\xD6\x80", "Armenian"}, - {"\xD4\xB5\xD6\x80\xD5\xA2\x20\xD5\xB8\xD6\x80\x20\xD5\xAF\xD5\xA1\xD6\x81\xD5\xAB\xD5\xB6\xD5\xA8\x20\xD5\xA5\xD5\xAF\xD5\xA1\xD6\x82\x20\xD5\xA1\xD5\xB6\xD5" - "\xBF\xD5\xA1\xD5\xBC\x2C\x20\xD5\xAE\xD5\xA1\xD5\xBC\xD5\xA5\xD6\x80\xD5\xA8\x20\xD5\xA1\xD5\xBD\xD5\xA1\xD6\x81\xD5\xAB\xD5\xB6\x2E\x2E\x2E\x20\xC2\xAB\xD4\xBF" - "\xD5\xB8\xD5\xBF\xD5\xA8\x20\xD5\xB4\xD5\xA5\xD6\x80\xD5\xB8\xD5\xB6\xD6\x81\xD5\xAB\xD6\x81\x20\xD5\xA7\x3A\xC2\xBB", "Armenian"}, - {"\xD4\xB3\xD5\xA1\xD5\xBC\xD5\xA8\xD5\x9D\x20\xD5\xA3\xD5\xA1\xD6\x80\xD5\xB6\xD5\xA1\xD5\xB6\x2C\x20\xD5\xB1\xD5\xAB\xD6\x82\xD5\xB6\xD5\xA8\xD5\x9D\x20\xD5" - "\xB1\xD5\xB4\xD5\xBC\xD5\xA1\xD5\xB6", "Armenian"}, - {"\x4A\x65\xC5\xBC\x75\x20\x6B\x6C\xC4\x85\x74\x77\x2C\x20\x73\x70\xC5\x82\xC3\xB3\x64\xC5\xBA\x20\x46\x69\x6E\x6F\x6D\x20\x63\x7A\xC4\x99\xC5\x9B\xC4\x87" - "\x20\x67\x72\x79\x20\x68\x61\xC5\x84\x62\x21", "Polish"}, - {"\x44\x6F\x62\x72\x79\x6D\x69\x20\x63\x68\xC4\x99\x63\x69\x61\x6D\x69\x20\x6A\x65\x73\x74\x20\x70\x69\x65\x6B\xC5\x82\x6F\x20\x77\x79\x62\x72\x75\x6B\x6F" - "\x77\x61\x6E\x65\x2E", "Polish"}, - {"\xC3\x8E\xC8\x9B\x69\x20\x6D\x75\x6C\xC8\x9B\x75\x6D\x65\x73\x63\x20\x63\xC4\x83\x20\x61\x69\x20\x61\x6C\x65\x73\x20\x72\x61\x79\x6C\x69\x62\x2E\x0A\xC8\x98" - "\x69\x20\x73\x70\x65\x72\x20\x73\xC4\x83\x20\x61\x69\x20\x6F\x20\x7A\x69\x20\x62\x75\x6E\xC4\x83\x21", "Romanian"}, - {"\xD0\xAD\xD1\x85\x2C\x20\xD1\x87\xD1\x83\xD0\xB6\xD0\xB0\xD0\xBA\x2C\x20\xD0\xBE\xD0\xB1\xD1\x89\xD0\xB8\xD0\xB9\x20\xD1\x81\xD1\x8A\xD1\x91\xD0\xBC\x20" - "\xD1\x86\xD0\xB5\xD0\xBD\x20\xD1\x88\xD0\xBB\xD1\x8F\xD0\xBF\x20\x28\xD1\x8E\xD1\x84\xD1\x82\xD1\x8C\x29\x20\xD0\xB2\xD0\xB4\xD1\x80\xD1\x8B\xD0\xB7\xD0\xB3\x21", "Russian"}, - {"\xD0\xAF\x20\xD0\xBB\xD1\x8E\xD0\xB1\xD0\xBB\xD1\x8E\x20\x72\x61\x79\x6C\x69\x62\x21", "Russian"}, - {"\xD0\x9C\xD0\xBE\xD0\xBB\xD1\x87\xD0\xB8\x2C\x20\xD1\x81\xD0\xBA\xD1\x80\xD1\x8B\xD0\xB2\xD0\xB0\xD0\xB9\xD1\x81\xD1\x8F\x20\xD0\xB8\x20\xD1\x82\xD0\xB0\xD0\xB8" - "\x0A\xD0\x98\x20\xD1\x87\xD1\x83\xD0\xB2\xD1\x81\xD1\x82\xD0\xB2\xD0\xB0\x20\xD0\xB8\x20\xD0\xBC\xD0\xB5\xD1\x87\xD1\x82\xD1\x8B\x20\xD1\x81\xD0\xB2\xD0\xBE\xD0\xB8\x20" - "\xE2\x80\x93\x0A\xD0\x9F\xD1\x83\xD1\x81\xD0\xBA\xD0\xB0\xD0\xB9\x20\xD0\xB2\x20\xD0\xB4\xD1\x83\xD1\x88\xD0\xB5\xD0\xB2\xD0\xBD\xD0\xBE\xD0\xB9\x20\xD0\xB3\xD0\xBB\xD1" - "\x83\xD0\xB1\xD0\xB8\xD0\xBD\xD0\xB5\x0A\xD0\x98\x20\xD0\xB2\xD1\x81\xD1\x85\xD0\xBE\xD0\xB4\xD1\x8F\xD1\x82\x20\xD0\xB8\x20\xD0\xB7\xD0\xB0\xD0\xB9\xD0\xB4\xD1\x83\xD1" - "\x82\x20\xD0\xBE\xD0\xBD\xD0\xB5\x0A\xD0\x9A\xD0\xB0\xD0\xBA\x20\xD0\xB7\xD0\xB2\xD0\xB5\xD0\xB7\xD0\xB4\xD1\x8B\x20\xD1\x8F\xD1\x81\xD0\xBD\xD1\x8B\xD0\xB5\x20\xD0\xB2" - "\x20\xD0\xBD\xD0\xBE\xD1\x87\xD0\xB8\x2D\x0A\xD0\x9B\xD1\x8E\xD0\xB1\xD1\x83\xD0\xB9\xD1\x81\xD1\x8F\x20\xD0\xB8\xD0\xBC\xD0\xB8\x20\xE2\x80\x93\x20\xD0\xB8\x20\xD0\xBC" - "\xD0\xBE\xD0\xBB\xD1\x87\xD0\xB8\x2E", "Russian"}, - {"\x56\x6F\x69\x78\x20\x61\x6D\x62\x69\x67\x75\xC3\xAB\x20\x64\xE2\x80\x99\x75\x6E\x20\x63\xC5\x93\x75\x72\x20\x71\x75\x69\x20\x61\x75\x20\x7A\xC3\xA9\x70" - "\x68\x79\x72\x20\x70\x72\xC3\xA9\x66\xC3\xA8\x72\x65\x20\x6C\x65\x73\x20\x6A\x61\x74\x74\x65\x73\x20\x64\x65\x20\x6B\x69\x77\x69", "French"}, - {"\x42\x65\x6E\x6A\x61\x6D\xC3\xAD\x6E\x20\x70\x69\x64\x69\xC3\xB3\x20\x75\x6E\x61\x20\x62\x65\x62\x69\x64\x61\x20\x64\x65\x20\x6B\x69\x77\x69\x20\x79\x20" - "\x66\x72\x65\x73\x61\x3B\x20\x4E\x6F\xC3\xA9\x2C\x20\x73\x69\x6E\x20\x76\x65\x72\x67\xC3\xBC\x65\x6E\x7A\x61\x2C\x20\x6C\x61\x20\x6D\xC3\xA1\x73\x20\x65\x78" - "\x71\x75\x69\x73\x69\x74\x61\x20\x63\x68\x61\x6D\x70\x61\xC3\xB1\x61\x20\x64\x65\x6C\x20\x6D\x65\x6E\xC3\xBA\x2E", "Spanish"}, - {"\xCE\xA4\xCE\xB1\xCF\x87\xCE\xAF\xCF\x83\xCF\x84\xCE\xB7\x20\xCE\xB1\xCE\xBB\xCF\x8E\xCF\x80\xCE\xB7\xCE\xBE\x20\xCE\xB2\xCE\xB1\xCF\x86\xCE\xAE\xCF\x82\x20" - "\xCF\x88\xCE\xB7\xCE\xBC\xCE\xAD\xCE\xBD\xCE\xB7\x20\xCE\xB3\xCE\xB7\x2C\x20\xCE\xB4\xCF\x81\xCE\xB1\xCF\x83\xCE\xBA\xCE\xB5\xCE\xBB\xCE\xAF\xCE\xB6\xCE\xB5\xCE" - "\xB9\x20\xCF\x85\xCF\x80\xCE\xAD\xCF\x81\x20\xCE\xBD\xCF\x89\xCE\xB8\xCF\x81\xCE\xBF\xCF\x8D\x20\xCE\xBA\xCF\x85\xCE\xBD\xCF\x8C\xCF\x82", "Greek"}, - {"\xCE\x97\x20\xCE\xBA\xCE\xB1\xCE\xBB\xCF\x8D\xCF\x84\xCE\xB5\xCF\x81\xCE\xB7\x20\xCE\xAC\xCE\xBC\xCF\x85\xCE\xBD\xCE\xB1\x20\xCE\xB5\xCE\xAF\xCE\xBD" - "\xCE\xB1\xCE\xB9\x20\xCE\xB7\x20\xCE\xB5\xCF\x80\xCE\xAF\xCE\xB8\xCE\xB5\xCF\x83\xCE\xB7\x2E", "Greek"}, - {"\xCE\xA7\xCF\x81\xCF\x8C\xCE\xBD\xCE\xB9\xCE\xB1\x20\xCE\xBA\xCE\xB1\xCE\xB9\x20\xCE\xB6\xCE\xB1\xCE\xBC\xCE\xAC\xCE\xBD\xCE\xB9\xCE\xB1\x21", "Greek"}, - {"\xCE\xA0\xCF\x8E\xCF\x82\x20\xCF\x84\xCE\xB1\x20\xCF\x80\xCE\xB1\xCF\x82\x20\xCF\x83\xCE\xAE\xCE\xBC\xCE\xB5\xCF\x81\xCE\xB1\x3B", "Greek"}, - - {"\xE6\x88\x91\xE8\x83\xBD\xE5\x90\x9E\xE4\xB8\x8B\xE7\x8E\xBB\xE7\x92\x83\xE8\x80\x8C\xE4\xB8\x8D\xE4\xBC\xA4\xE8\xBA\xAB\xE4\xBD\x93\xE3\x80\x82", "Chinese"}, - {"\xE4\xBD\xA0\xE5\x90\x83\xE4\xBA\x86\xE5\x90\x97\xEF\xBC\x9F", "Chinese"}, - {"\xE4\xB8\x8D\xE4\xBD\x9C\xE4\xB8\x8D\xE6\xAD\xBB\xE3\x80\x82", "Chinese"}, - {"\xE6\x9C\x80\xE8\xBF\x91\xE5\xA5\xBD\xE5\x90\x97\xEF\xBC\x9F", "Chinese"}, - {"\xE5\xA1\x9E\xE7\xBF\x81\xE5\xA4\xB1\xE9\xA9\xAC\xEF\xBC\x8C\xE7\x84\x89\xE7\x9F\xA5\xE9\x9D\x9E\xE7\xA6\x8F\xE3\x80\x82", "Chinese"}, - {"\xE5\x8D\x83\xE5\x86\x9B\xE6\x98\x93\xE5\xBE\x97\x2C\x20\xE4\xB8\x80\xE5\xB0\x86\xE9\x9A\xBE\xE6\xB1\x82", "Chinese"}, - {"\xE4\xB8\x87\xE4\xBA\x8B\xE5\xBC\x80\xE5\xA4\xB4\xE9\x9A\xBE\xE3\x80\x82", "Chinese"}, - {"\xE9\xA3\x8E\xE6\x97\xA0\xE5\xB8\xB8\xE9\xA1\xBA\xEF\xBC\x8C\xE5\x85\xB5\xE6\x97\xA0\xE5\xB8\xB8\xE8\x83\x9C\xE3\x80\x82", "Chinese"}, - {"\xE6\xB4\xBB\xE5\x88\xB0\xE8\x80\x81\xEF\xBC\x8C\xE5\xAD\xA6\xE5\x88\xB0\xE8\x80\x81\xE3\x80\x82", "Chinese"}, - {"\xE4\xB8\x80\xE8\xA8\x80\xE6\x97\xA2\xE5\x87\xBA\xEF\xBC\x8C\xE9\xA9\xB7\xE9\xA9\xAC\xE9\x9A\xBE\xE8\xBF\xBD\xE3\x80\x82", "Chinese"}, - {"\xE8\xB7\xAF\xE9\x81\xA5\xE7\x9F\xA5\xE9\xA9\xAC\xE5\x8A\x9B\xEF\xBC\x8C\xE6\x97\xA5\xE4\xB9\x85\xE8\xA7\x81\xE4\xBA\xBA\xE5\xBF\x83", "Chinese"}, - {"\xE6\x9C\x89\xE7\x90\x86\xE8\xB5\xB0\xE9\x81\x8D\xE5\xA4\xA9\xE4\xB8\x8B\xEF\xBC\x8C\xE6\x97\xA0\xE7\x90\x86\xE5\xAF\xB8\xE6\xAD\xA5\xE9\x9A\xBE\xE8\xA1\x8C\xE3\x80\x82", "Chinese"}, - - {"\xE7\x8C\xBF\xE3\x82\x82\xE6\x9C\xA8\xE3\x81\x8B\xE3\x82\x89\xE8\x90\xBD\xE3\x81\xA1\xE3\x82\x8B", "Japanese"}, - {"\xE4\xBA\x80\xE3\x81\xAE\xE7\x94\xB2\xE3\x82\x88\xE3\x82\x8A\xE5\xB9\xB4\xE3\x81\xAE\xE5\x8A\x9F", "Japanese"}, - {"\xE3\x81\x86\xE3\x82\x89\xE3\x82\x84\xE3\x81\xBE\xE3\x81\x97\x20\x20\xE6\x80\x9D\xE3\x81\xB2\xE5\x88\x87\xE3\x82\x8B\xE6\x99\x82\x20\x20\xE7\x8C\xAB\xE3\x81\xAE\xE6\x81\x8B", "Japanese"}, - {"\xE8\x99\x8E\xE7\xA9\xB4\xE3\x81\xAB\xE5\x85\xA5\xE3\x82\x89\xE3\x81\x9A\xE3\x82\x93\xE3\x81\xB0\xE8\x99\x8E\xE5\xAD\x90\xE3\x82\x92\xE5\xBE\x97\xE3\x81\x9A\xE3\x80\x82", "Japanese"}, - {"\xE4\xBA\x8C\xE5\x85\x8E\xE3\x82\x92\xE8\xBF\xBD\xE3\x81\x86\xE8\x80\x85\xE3\x81\xAF\xE4\xB8\x80\xE5\x85\x8E\xE3\x82\x92\xE3\x82\x82\xE5\xBE\x97\xE3\x81\x9A\xE3\x80\x82", "Japanese"}, - {"\xE9\xA6\xAC\xE9\xB9\xBF\xE3\x81\xAF\xE6\xAD\xBB\xE3\x81\xAA\xE3\x81\xAA\xE3\x81\x8D\xE3\x82\x83\xE6\xB2\xBB\xE3\x82\x89\xE3\x81\xAA\xE3\x81\x84\xE3\x80\x82", "Japanese"}, - {"\xE6\x9E\xAF\xE9\x87\x8E\xE8\xB7\xAF\xE3\x81\xAB\xE3\x80\x80\xE5\xBD\xB1\xE3\x81\x8B\xE3\x81\x95\xE3\x81\xAA\xE3\x82\x8A\xE3\x81\xA6\xE3\x80\x80\xE3\x82\x8F\xE3\x81\x8B\xE3\x82\x8C\xE3\x81\x91\xE3\x82\x8A", "Japanese"}, - {"\xE7\xB9\xB0\xE3\x82\x8A\xE8\xBF\x94\xE3\x81\x97\xE9\xBA\xA6\xE3\x81\xAE\xE7\x95\x9D\xE7\xB8\xAB\xE3\x81\xB5\xE8\x83\xA1\xE8\x9D\xB6\xE5\x93\x89", "Japanese"}, - - {"\xEC\x95\x84\xEB\x93\x9D\xED\x95\x9C\x20\xEB\xB0\x94\xEB\x8B\xA4\x20\xEC\x9C\x84\xEC\x97\x90\x20\xEA\xB0\x88\xEB\xA7\xA4\xEA\xB8\xB0\x20\xEB\x91\x90\xEC\x97\x87\x20" - "\xEB\x82\xA0\xEC\x95\x84\x20\xEB\x8F\x88\xEB\x8B\xA4\x2E\x0A\xEB\x84\x88\xED\x9B\x8C\xEB\x84\x88\xED\x9B\x8C\x20\xEC\x8B\x9C\xEB\xA5\xBC\x20\xEC\x93\xB4\xEB\x8B\xA4\x2E" - "\x20\xEB\xAA\xA8\xEB\xA5\xB4\xEB\x8A\x94\x20\xEB\x82\x98\xEB\x9D\xBC\x20\xEA\xB8\x80\xEC\x9E\x90\xEB\x8B\xA4\x2E\x0A\xEB\x84\x90\xEB\x94\xB0\xEB\x9E\x80\x20\xED\x95\x98" - "\xEB\x8A\x98\x20\xEB\xB3\xB5\xED\x8C\x90\xEC\x97\x90\x20\xEB\x82\x98\xEB\x8F\x84\x20\xEA\xB0\x99\xEC\x9D\xB4\x20\xEC\x8B\x9C\xEB\xA5\xBC\x20\xEC\x93\xB4\xEB\x8B\xA4\x2E", "Korean"}, - {"\xEC\xA0\x9C\x20\xEB\x88\x88\xEC\x97\x90\x20\xEC\x95\x88\xEA\xB2\xBD\xEC\x9D\xB4\xEB\x8B\xA4", "Korean"}, - {"\xEA\xBF\xA9\x20\xEB\xA8\xB9\xEA\xB3\xA0\x20\xEC\x95\x8C\x20\xEB\xA8\xB9\xEB\x8A\x94\xEB\x8B\xA4", "Korean"}, - {"\xEB\xA1\x9C\xEB\xA7\x88\xEB\x8A\x94\x20\xED\x95\x98\xEB\xA3\xA8\xEC\x95\x84\xEC\xB9\xA8\xEC\x97\x90\x20\xEC\x9D\xB4\xEB\xA3\xA8\xEC\x96\xB4\xEC\xA7\x84\x20\xEA\xB2\x83\xEC\x9D\xB4" - "\x20\xEC\x95\x84\xEB\x8B\x88\xEB\x8B\xA4", "Korean"}, - {"\xEA\xB3\xA0\xEC\x83\x9D\x20\xEB\x81\x9D\xEC\x97\x90\x20\xEB\x82\x99\xEC\x9D\xB4\x20\xEC\x98\xA8\xEB\x8B\xA4", "Korean"}, - {"\xEA\xB0\x9C\xEC\xB2\x9C\xEC\x97\x90\xEC\x84\x9C\x20\xEC\x9A\xA9\x20\xEB\x82\x9C\xEB\x8B\xA4", "Korean"}, - {"\xEC\x95\x88\xEB\x85\x95\xED\x95\x98\xEC\x84\xB8\xEC\x9A\x94\x3F", "Korean"}, - {"\xEB\xA7\x8C\xEB\x82\x98\xEC\x84\x9C\x20\xEB\xB0\x98\xEA\xB0\x91\xEC\x8A\xB5\xEB\x8B\x88\xEB\x8B\xA4", "Korean"}, - {"\xED\x95\x9C\xEA\xB5\xAD\xEB\xA7\x90\x20\xED\x95\x98\xEC\x8B\xA4\x20\xEC\xA4\x84\x20\xEC\x95\x84\xEC\x84\xB8\xEC\x9A\x94\x3F", "Korean"}, -}; - -//-------------------------------------------------------------------------------------- -// Module functions declaration -//-------------------------------------------------------------------------------------- -static void RandomizeEmoji(void); // Fills the emoji array with random emojis - -static void DrawTextBoxed(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint); // Draw text using font inside rectangle limits -static void DrawTextBoxedSelectable(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint, int selectStart, int selectLength, Color selectTint, Color selectBackTint); // Draw text using font inside rectangle limits with support for text selection - -//-------------------------------------------------------------------------------------- -// Global variables -//-------------------------------------------------------------------------------------- -// Arrays that holds the random emojis -struct { - int index; // Index inside `emojiCodepoints` - int message; // Message index - Color color; // Emoji color -} emoji[EMOJI_PER_WIDTH*EMOJI_PER_HEIGHT] = { 0 }; - -static int hovered = -1, selected = -1; - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT); - InitWindow(screenWidth, screenHeight, "raylib [text] example - unicode"); - - // Load the font resources - // NOTE: fontAsian is for asian languages, - // fontEmoji is the emojis and fontDefault is used for everything else - Font fontDefault = LoadFont("resources/dejavu.fnt"); - Font fontAsian = LoadFont("resources/noto_cjk.fnt"); - Font fontEmoji = LoadFont("resources/symbola.fnt"); - - Vector2 hoveredPos = { 0.0f, 0.0f }; - Vector2 selectedPos = { 0.0f, 0.0f }; - - // Set a random set of emojis when starting up - RandomizeEmoji(); - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // Add a new set of emojis when SPACE is pressed - if (IsKeyPressed(KEY_SPACE)) RandomizeEmoji(); - - // Set the selected emoji and copy its text to clipboard - if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && (hovered != -1) && (hovered != selected)) - { - selected = hovered; - selectedPos = hoveredPos; - SetClipboardText(messages[emoji[selected].message].text); - } - - Vector2 mouse = GetMousePosition(); - Vector2 pos = { 28.8f, 10.0f }; - hovered = -1; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - // Draw random emojis in the background - //------------------------------------------------------------------------------ - for (int i = 0; i < SIZEOF(emoji); ++i) - { - const char *txt = &emojiCodepoints[emoji[i].index]; - Rectangle emojiRect = { pos.x, pos.y, (float)fontEmoji.baseSize, (float)fontEmoji.baseSize }; - - if (!CheckCollisionPointRec(mouse, emojiRect)) - { - DrawTextEx(fontEmoji, txt, pos, (float)fontEmoji.baseSize, 1.0f, selected == i ? emoji[i].color : Fade(LIGHTGRAY, 0.4f)); - } - else - { - DrawTextEx(fontEmoji, txt, pos, (float)fontEmoji.baseSize, 1.0f, emoji[i].color ); - hovered = i; - hoveredPos = pos; - } - - if ((i != 0) && (i%EMOJI_PER_WIDTH == 0)) { pos.y += fontEmoji.baseSize + 24.25f; pos.x = 28.8f; } - else pos.x += fontEmoji.baseSize + 28.8f; - } - //------------------------------------------------------------------------------ - - // Draw the message when a emoji is selected - //------------------------------------------------------------------------------ - if (selected != -1) - { - const int message = emoji[selected].message; - const int horizontalPadding = 20, verticalPadding = 30; - Font *font = &fontDefault; - - // Set correct font for asian languages - if (TextIsEqual(messages[message].language, "Chinese") || - TextIsEqual(messages[message].language, "Korean") || - TextIsEqual(messages[message].language, "Japanese")) font = &fontAsian; - - // Calculate size for the message box (approximate the height and width) - Vector2 sz = MeasureTextEx(*font, messages[message].text, (float)font->baseSize, 1.0f); - if (sz.x > 300) { sz.y *= sz.x/300; sz.x = 300; } - else if (sz.x < 160) sz.x = 160; - - Rectangle msgRect = { selectedPos.x - 38.8f, selectedPos.y, 2 * horizontalPadding + sz.x, 2 * verticalPadding + sz.y }; - msgRect.y -= msgRect.height; - - // Coordinates for the chat bubble triangle - Vector2 a = { selectedPos.x, msgRect.y + msgRect.height }, b = {a.x + 8, a.y + 10}, c= { a.x + 10, a.y }; - - // Don't go outside the screen - if (msgRect.x < 10) msgRect.x += 28; - if (msgRect.y < 10) - { - msgRect.y = selectedPos.y + 84; - a.y = msgRect.y; - c.y = a.y; - b.y = a.y - 10; - - // Swap values so we can actually render the triangle :( - Vector2 tmp = a; - a = b; - b = tmp; - } - - if (msgRect.x + msgRect.width > screenWidth) msgRect.x -= (msgRect.x + msgRect.width) - screenWidth + 10; - - // Draw chat bubble - DrawRectangleRec(msgRect, emoji[selected].color); - DrawTriangle(a, b, c, emoji[selected].color); - - // Draw the main text message - Rectangle textRect = { msgRect.x + horizontalPadding/2, msgRect.y + verticalPadding/2, msgRect.width - horizontalPadding, msgRect.height }; - DrawTextBoxed(*font, messages[message].text, textRect, (float)font->baseSize, 1.0f, true, WHITE); - - // Draw the info text below the main message - int size = (int)strlen(messages[message].text); - int length = GetCodepointCount(messages[message].text); - const char *info = TextFormat("%s %u characters %i bytes", messages[message].language, length, size); - sz = MeasureTextEx(GetFontDefault(), info, 10, 1.0f); - Vector2 pos = { textRect.x + textRect.width - sz.x, msgRect.y + msgRect.height - sz.y - 2 }; - DrawText(info, (int)pos.x, (int)pos.y, 10, RAYWHITE); - } - //------------------------------------------------------------------------------ - - // Draw the info text - DrawText("These emojis have something to tell you, click each to find out!", (screenWidth - 650)/2, screenHeight - 40, 20, GRAY); - DrawText("Each emoji is a unicode character from a font, not a texture... Press [SPACEBAR] to refresh", (screenWidth - 484)/2, screenHeight - 16, 10, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadFont(fontDefault); // Unload font resource - UnloadFont(fontAsian); // Unload font resource - UnloadFont(fontEmoji); // Unload font resource - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -// Fills the emoji array with random emoji (only those emojis present in fontEmoji) -static void RandomizeEmoji(void) -{ - hovered = selected = -1; - int start = GetRandomValue(45, 360); - - for (int i = 0; i < SIZEOF(emoji); ++i) - { - // 0-179 emoji codepoints (from emoji char array) each 4bytes + null char - emoji[i].index = GetRandomValue(0, 179)*5; - - // Generate a random color for this emoji - emoji[i].color = Fade(ColorFromHSV((float)((start*(i + 1))%360), 0.6f, 0.85f), 0.8f); - - // Set a random message for this emoji - emoji[i].message = GetRandomValue(0, SIZEOF(messages) - 1); - } -} - -//-------------------------------------------------------------------------------------- -// Module functions definition -//-------------------------------------------------------------------------------------- - -// Draw text using font inside rectangle limits -static void DrawTextBoxed(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint) -{ - DrawTextBoxedSelectable(font, text, rec, fontSize, spacing, wordWrap, tint, 0, 0, WHITE, WHITE); -} - -// Draw text using font inside rectangle limits with support for text selection -static void DrawTextBoxedSelectable(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint, int selectStart, int selectLength, Color selectTint, Color selectBackTint) -{ - int length = TextLength(text); // Total length in bytes of the text, scanned by codepoints in loop - - float textOffsetY = 0; // Offset between lines (on line break '\n') - float textOffsetX = 0.0f; // Offset X to next character to draw - - float scaleFactor = fontSize/(float)font.baseSize; // Character rectangle scaling factor - - // Word/character wrapping mechanism variables - enum { MEASURE_STATE = 0, DRAW_STATE = 1 }; - int state = wordWrap? MEASURE_STATE : DRAW_STATE; - - int startLine = -1; // Index where to begin drawing (where a line begins) - int endLine = -1; // Index where to stop drawing (where a line ends) - int lastk = -1; // Holds last value of the character position - - for (int i = 0, k = 0; i < length; i++, k++) - { - // Get next codepoint from byte string and glyph index in font - int codepointByteCount = 0; - int codepoint = GetCodepoint(&text[i], &codepointByteCount); - int index = GetGlyphIndex(font, codepoint); - - // NOTE: Normally we exit the decoding sequence as soon as a bad byte is found (and return 0x3f) - // but we need to draw all of the bad bytes using the '?' symbol moving one byte - if (codepoint == 0x3f) codepointByteCount = 1; - i += (codepointByteCount - 1); - - float glyphWidth = 0; - if (codepoint != '\n') - { - glyphWidth = (font.glyphs[index].advanceX == 0) ? font.recs[index].width*scaleFactor : font.glyphs[index].advanceX*scaleFactor; - - if (i + 1 < length) glyphWidth = glyphWidth + spacing; - } - - // NOTE: When wordWrap is ON we first measure how much of the text we can draw before going outside of the rec container - // We store this info in startLine and endLine, then we change states, draw the text between those two variables - // and change states again and again recursively until the end of the text (or until we get outside of the container). - // When wordWrap is OFF we don't need the measure state so we go to the drawing state immediately - // and begin drawing on the next line before we can get outside the container. - if (state == MEASURE_STATE) - { - // TODO: There are multiple types of spaces in UNICODE, maybe it's a good idea to add support for more - // Ref: http://jkorpela.fi/chars/spaces.html - if ((codepoint == ' ') || (codepoint == '\t') || (codepoint == '\n')) endLine = i; - - if ((textOffsetX + glyphWidth) > rec.width) - { - endLine = (endLine < 1)? i : endLine; - if (i == endLine) endLine -= codepointByteCount; - if ((startLine + codepointByteCount) == endLine) endLine = (i - codepointByteCount); - - state = !state; - } - else if ((i + 1) == length) - { - endLine = i; - state = !state; - } - else if (codepoint == '\n') state = !state; - - if (state == DRAW_STATE) - { - textOffsetX = 0; - i = startLine; - glyphWidth = 0; - - // Save character position when we switch states - int tmp = lastk; - lastk = k - 1; - k = tmp; - } - } - else - { - if (codepoint == '\n') - { - if (!wordWrap) - { - textOffsetY += (font.baseSize + font.baseSize/2)*scaleFactor; - textOffsetX = 0; - } - } - else - { - if (!wordWrap && ((textOffsetX + glyphWidth) > rec.width)) - { - textOffsetY += (font.baseSize + font.baseSize/2)*scaleFactor; - textOffsetX = 0; - } - - // When text overflows rectangle height limit, just stop drawing - if ((textOffsetY + font.baseSize*scaleFactor) > rec.height) break; - - // Draw selection background - bool isGlyphSelected = false; - if ((selectStart >= 0) && (k >= selectStart) && (k < (selectStart + selectLength))) - { - DrawRectangleRec((Rectangle){ rec.x + textOffsetX - 1, rec.y + textOffsetY, glyphWidth, (float)font.baseSize*scaleFactor }, selectBackTint); - isGlyphSelected = true; - } - - // Draw current character glyph - if ((codepoint != ' ') && (codepoint != '\t')) - { - DrawTextCodepoint(font, codepoint, (Vector2){ rec.x + textOffsetX, rec.y + textOffsetY }, fontSize, isGlyphSelected? selectTint : tint); - } - } - - if (wordWrap && (i == endLine)) - { - textOffsetY += (font.baseSize + font.baseSize/2)*scaleFactor; - textOffsetX = 0; - startLine = endLine; - endLine = -1; - glyphWidth = 0; - selectStart += lastk - k; - k = lastk; - - state = !state; - } - } - - textOffsetX += glyphWidth; - } -} \ No newline at end of file diff --git a/examples/text/text_writing_anim.c b/examples/text/text_writing_anim.c deleted file mode 100644 index 4ee6770..0000000 --- a/examples/text/text_writing_anim.c +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************************************* -* -* raylib [text] example - Text Writing Animation -* -* 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 [text] example - text writing anim"); - - const char message[128] = "This sample illustrates a text writing\nanimation effect! Check it out! ;)"; - - 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 (IsKeyDown(KEY_SPACE)) framesCounter += 8; - else framesCounter++; - - if (IsKeyPressed(KEY_ENTER)) framesCounter = 0; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawText(TextSubtext(message, 0, framesCounter/10), 210, 160, 20, MAROON); - - DrawText("PRESS [ENTER] to RESTART!", 240, 260, 20, LIGHTGRAY); - DrawText("PRESS [SPACE] to SPEED UP!", 239, 300, 20, LIGHTGRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/readme.md b/readme.md index 5f6f8ab..49bf03e 100644 --- a/readme.md +++ b/readme.md @@ -61,9 +61,34 @@ The following raylib APIs are supported so far (with a few exceptions): - rcamera - rlights - raygui +- reasings Similar to including a header in C and for your convenience, all types/functions are provided globally. They are additionally available in a module called 'raylib' +To check which API functions are not available (yet) check `/bindings/src/index.ts` for `ignore` statements. + +## Additional APIs + +Rayjs comes with some additional functionality on top of raylib to make writing raylib code with Javascript easier +```typescript +/** Replace material in slot materialIndex (Material is NOT unloaded) */ +declare function setModelMaterial(model: Model, materialIndex: number, material: Material): void; +/** Get material in slot materialIndex */ +declare function getModelMaterial(model: Model, materialIndex: number): Material; +/** Get a single mesh from a model */ +declare function getModelMesh(model: Model, meshIndex: number): Mesh; +/** Set shader constant in shader locations array */ +declare function setShaderLocation(shader: Shader, constant: number, location: number): void; +/** Read a single pixel from an image */ +declare function imageReadPixel(image: Image, x: number, y: number): Color; +/** Make a deep-copy of an existing mesh */ +declare function meshCopy(mesh: Mesh): Mesh; +/** Create a new mesh that contains combined attributes of two meshes */ +declare function meshMerge(a: Mesh, b: Mesh): Mesh; +``` + +Additionally it also comes with bindings to [lightmapper.h](https://github.com/ands/lightmapper/tree/master). See below for more information. + ## Auto-Complete / Intellisense rayjs comes with full auto-complete support in the form of the definitions file `lib.raylib.d.ts`. These will work with Typescript and Javascript. In order to use them with Javascript you should create a Typescript configuration file in the project root (even if you are not using Typescript) called `tsconfig.json` with the following configuration @@ -80,6 +105,53 @@ rayjs comes with full auto-complete support in the form of the definitions file ``` ![](doc/auto-complete.png) +## Examples + +Some official raylib examples were already ported to Javascript and can be found in the `examples` folder. + +Additional examples are described here. + +``` +./rayjs examples/js_example_project +``` +Barebones example project on how to structure a project that uses Javascript +``` +./rayjs examples/js_mesh_generation.js +``` +Shows how to create a mesh from Javascript ArrayBuffers +``` +./rayjs examples/shaders/js_shaders_gradient_lighting.js +``` +Creates a gradient and uses it as lighting for a 3d scene +``` +./rayjs examples/ts_dungeon +``` +Small example game that uses Typescript with Webpack for transpilation and bundling +``` +./rayjs examples/ts_game +``` +Example how to integrate existing JS libraries. This example integrates the Inkjs library to compile and play a game written in the Ink interactive fiction language. + + +### Lightmapper usage +Rayjs integrates the [lightmapper.h](https://github.com/ands/lightmapper/tree/master) library to render baked lighting. +The example demonstrates it's usage. +``` +./rayjs examples/js_lightmapper.js +``` + +Meshes must have unwrapped lightmap uvs in the second UV channel. + +![](2023-07-20-13-08-52.png) + +The example uses an environment that is uniform white which will lead to baking pure ambient occlusion. To bake other light sources, lower the amount of ambient lighting and everything that is rendered with a color other than black will become an emissive lightsource during baking. Rendering will just work as usual and custom shaders are supported. E.g. while the raylib default shader does not support color intensities greater than 1.0, the lightmapper does support them for higher intensity lighting. + +The example will try to bake lighting alongside the render loop which is still buggy and leads to artifacts. Baking before rendering works better. + +## Performance +QuickJS is one of the [faster JS interpreters](https://bellard.org/quickjs/bench.html). I'm getting about 13000 bunnys in the unmodified bunnmark before dropping any frames on my 2020 Macbook Air M1 which seems pretty good. +![Bunnymark](doc/bunny.png) + ## Building Here are some basic steps if you want to compile rayjs yourself. You should use CMake for building. **Please note that QuickJS needs Mingw in order to compile correctly on Windows** @@ -100,6 +172,4 @@ cmake .. make ``` -## Performance -QuickJS is one of the [faster JS interpreters](https://bellard.org/quickjs/bench.html). I'm getting about 13000 bunnys in the unmodified bunnmark before dropping any frames on my 2020 Macbook Air M1 which seems pretty good. -![Bunnymark](doc/bunny.png) +