summaryrefslogtreecommitdiffhomepage
path: root/examples
diff options
context:
space:
mode:
authorVlad Adrian <[email protected]>2020-06-28 00:59:14 +0300
committerGitHub <[email protected]>2020-06-27 23:59:14 +0200
commit4d71e9b44fd043472eb523207765fd882578a2e0 (patch)
tree7eee2baa992e31d9c7bdaa5732bd343156f8118e /examples
parenteae6e6a828064a2cc8c3d7735c4422d5ca398eaa (diff)
downloadraylib-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.pngbin0 -> 7387 bytes
-rw-r--r--examples/textures/textures_draw_tiled.c148
2 files changed, 148 insertions, 0 deletions
diff --git a/examples/textures/resources/pat.png b/examples/textures/resources/pat.png
new file mode 100644
index 00000000..58b3c372
--- /dev/null
+++ b/examples/textures/resources/pat.png
Binary files differ
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;
+}
+