diff options
| author | Vlad Adrian <[email protected]> | 2020-06-28 00:59:14 +0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-06-27 23:59:14 +0200 |
| commit | 4d71e9b44fd043472eb523207765fd882578a2e0 (patch) | |
| tree | 7eee2baa992e31d9c7bdaa5732bd343156f8118e /examples | |
| parent | eae6e6a828064a2cc8c3d7735c4422d5ca398eaa (diff) | |
| download | raylib-4d71e9b44fd043472eb523207765fd882578a2e0.tar.gz raylib-4d71e9b44fd043472eb523207765fd882578a2e0.zip | |
Added new function `DrawTextureTiled()` (#1291)
* Implemented DrawTextureTiled()
* Example added
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/textures/resources/pat.png | bin | 0 -> 7387 bytes | |||
| -rw-r--r-- | examples/textures/textures_draw_tiled.c | 148 |
2 files changed, 148 insertions, 0 deletions
diff --git a/examples/textures/resources/pat.png b/examples/textures/resources/pat.png Binary files differnew file mode 100644 index 00000000..58b3c372 --- /dev/null +++ b/examples/textures/resources/pat.png diff --git a/examples/textures/textures_draw_tiled.c b/examples/textures/textures_draw_tiled.c new file mode 100644 index 00000000..0e1bebdc --- /dev/null +++ b/examples/textures/textures_draw_tiled.c @@ -0,0 +1,148 @@ +/******************************************************************************************* +* +* raylib [textures] example - Draw part of the texture tiled +* +* This example has been created using raylib 3.0 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2020 Vlad Adrian (@demizdor) and Ramon Santamaria (@raysan5) +* +********************************************************************************************/ +#include "raylib.h" + +#define SIZEOF(A) (sizeof(A)/sizeof(A[0])) +#define OPT_WIDTH 220 // max width for the options container +#define MARGIN_SIZE 8 // size for the margins +#define COLOR_SIZE 16 // size of the color select buttons + +int main(int argc, char **argv) +{ + // Initialization + //-------------------------------------------------------------------------------------- + int screenWidth = 800; + int screenHeight = 450; + + SetConfigFlags(FLAG_WINDOW_RESIZABLE); // Make the window resizable + InitWindow(screenWidth, screenHeight, "raylib [textures] example - Draw part of a texture tiled"); + + // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) + Texture ptex = LoadTexture("resources/pat.png"); + SetTextureFilter(ptex, FILTER_TRILINEAR); // Makes the texture smoother when upscaled + + // Coordinates for all patterns inside the texture + const Rectangle patRec[] = { (Rectangle){3,3,66,66}, (Rectangle){75,3,100,100}, + (Rectangle){3,75,66,66}, (Rectangle){7,156,50,50}, (Rectangle){85,106,90,45}, (Rectangle){75,154,100,60} }; + + // Setup colors + const Color colors[] = { BLACK, MAROON, ORANGE, BLUE, PURPLE, BEIGE, LIME, RED, DARKGRAY, SKYBLUE}; + enum {MAX_COLORS = SIZEOF(colors)}; + Rectangle colorRec[MAX_COLORS] = { 0 }; + + // Calculate rectangle for each color + for(int i=0, x=0, y=0; i<MAX_COLORS; i++) { + colorRec[i].x = 2+MARGIN_SIZE + x; + colorRec[i].y = 22+256+MARGIN_SIZE + y; + colorRec[i].width = COLOR_SIZE*2; + colorRec[i].height = COLOR_SIZE; + if(i == MAX_COLORS/2 - 1) { + x = 0; y += COLOR_SIZE + MARGIN_SIZE; + } else x += COLOR_SIZE * 2 + MARGIN_SIZE; + + } + + int activePat = 0, activeCol = 0; + float scale = 1.0f, rotation = 0.0f; + + SetTargetFPS(60); + //--------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + screenWidth = GetScreenWidth(); + screenHeight = GetScreenHeight(); + + // Handle mouse + if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) { + const Vector2 mouse = GetMousePosition(); + + // Check which pattern was clicked and set it as the active pattern + for(int i=0; i<SIZEOF(patRec); ++i) { + if(CheckCollisionPointRec(mouse, (Rectangle){2+MARGIN_SIZE+patRec[i].x, 40+MARGIN_SIZE+patRec[i].y,patRec[i].width, patRec[i].height})) { + activePat = i; + break; + } + } + + // Check to see which color was clicked and set it as the active color + for(int i=0; i<MAX_COLORS; ++i) { + if(CheckCollisionPointRec(mouse, colorRec[i])) { + activeCol = i; + break; + } + } + } + + // Handle keys + + // Change scale + if(IsKeyPressed(KEY_UP)) scale += 0.25f; + if(IsKeyPressed(KEY_DOWN)) scale -= 0.25f; + if(scale > 10.0f) scale = 10.0f; + else if( scale <= 0.0f) scale = 0.25f; + + // Change rotation + if(IsKeyPressed(KEY_LEFT)) rotation -= 25.0f; + if(IsKeyPressed(KEY_RIGHT)) rotation += 25.0f; + + // Reset + if(IsKeyPressed(KEY_SPACE)) { rotation = 0.0f; scale = 1.0f; } + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + ClearBackground(RAYWHITE); + + // Draw the tiled area + DrawTextureTiled(ptex, patRec[activePat], (Rectangle){OPT_WIDTH+MARGIN_SIZE, MARGIN_SIZE, screenWidth - OPT_WIDTH - 2*MARGIN_SIZE, screenHeight - 2*MARGIN_SIZE}, + (Vector2){0.0f, 0.0f}, rotation, scale, colors[activeCol]); + + // Draw options + DrawRectangle(MARGIN_SIZE, MARGIN_SIZE, OPT_WIDTH - MARGIN_SIZE, screenHeight-2*MARGIN_SIZE, ColorAlpha(LIGHTGRAY, 0.5f)); + + DrawText("Select Pattern", 2+MARGIN_SIZE, 30+MARGIN_SIZE, 10, BLACK); + DrawTexture(ptex, 2+MARGIN_SIZE, 40+MARGIN_SIZE, BLACK); + DrawRectangle(2+MARGIN_SIZE + patRec[activePat].x, 40+MARGIN_SIZE+patRec[activePat].y,patRec[activePat].width, patRec[activePat].height, ColorAlpha(DARKBLUE, 0.3f)); + + DrawText("Select Color", 2+MARGIN_SIZE, 10+256+MARGIN_SIZE, 10, BLACK); + for(int i=0; i<MAX_COLORS; ++i) { + DrawRectangleRec(colorRec[i], colors[i]); + if(activeCol == i) DrawRectangleLinesEx(colorRec[i], 3.0f, ColorAlpha(WHITE, 0.5f)); + } + + DrawText("Scale (UP/DOWN to change)", 2+MARGIN_SIZE, 80+256+MARGIN_SIZE, 10, BLACK); + DrawText(TextFormat("%.2fx", scale), 2+MARGIN_SIZE, 92+256+MARGIN_SIZE, 20, BLACK); + + DrawText("Rotation (LEFT/RIGHT to change)", 2+MARGIN_SIZE, 122+256+MARGIN_SIZE, 10, BLACK); + DrawText(TextFormat("%.0f degrees", rotation), 2+MARGIN_SIZE, 134+256+MARGIN_SIZE, 20, BLACK); + + DrawText("Press [SPACE] to reset", 2+MARGIN_SIZE, 164+256+MARGIN_SIZE, 10, DARKBLUE); + + // Draw FPS + DrawText(TextFormat("%i FPS", GetFPS()), 2+MARGIN_SIZE, 2+MARGIN_SIZE, 20, BLACK); + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadTexture(ptex); + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + |
