From b5330624d64d1511d4c85e49ad4a7fa519517776 Mon Sep 17 00:00:00 2001 From: Sebastian Lukas <45936573+SebaLukas@users.noreply.github.com> Date: Mon, 20 May 2024 20:38:22 +0200 Subject: [PATCH] Adding texture/background_scrolling example (#91) Adding textures_background_scrolling example Signed-off-by: Sebastian Lukas --- build.zig | 7 +- .../textures_background_scrolling.zig | 123 ++++++++++++++++++ .../textures/cyberpunk_street_background.png | Bin 0 -> 7735 bytes .../textures/cyberpunk_street_foreground.png | Bin 0 -> 18035 bytes .../textures/cyberpunk_street_midground.png | Bin 0 -> 7802 bytes 5 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 examples/textures/textures_background_scrolling.zig create mode 100644 resources/textures/cyberpunk_street_background.png create mode 100644 resources/textures/cyberpunk_street_foreground.png create mode 100644 resources/textures/cyberpunk_street_midground.png diff --git a/build.zig b/build.zig index ce1f8e2..c95e571 100755 --- a/build.zig +++ b/build.zig @@ -223,6 +223,11 @@ pub fn build(b: *std.Build) !void { .path = "examples/textures/sprite_anim.zig", .desc = "Animate a sprite", }, + .{ + .name = "textures_background_scrolling", + .path = "examples/textures/textures_background_scrolling.zig", + .desc = "Background scrolling & parallax demo", + }, // .{ // .name = "models_loading", // .path = "examples/models/models_loading.zig", @@ -301,7 +306,7 @@ pub fn build(b: *std.Build) !void { const run_cmd = b.addRunArtifact(exe); const run_step = b.step(ex.name, ex.desc); - + run_step.dependOn(&run_cmd.step); examples_step.dependOn(&exe.step); } diff --git a/examples/textures/textures_background_scrolling.zig b/examples/textures/textures_background_scrolling.zig new file mode 100644 index 0000000..2616303 --- /dev/null +++ b/examples/textures/textures_background_scrolling.zig @@ -0,0 +1,123 @@ +//! # raylib-zig [textures] example - background scrolling +//! +//! 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) Nikolas Wipper 2024 + +const rl = @import("raylib"); + +const screen_width = 800; +const screen_height = 450; + +pub fn main() anyerror!void { + + // Initialization + //-------------------------------------------------------------------------------------- + rl.initWindow(screen_width, screen_height, "raylib [textures] example - background scrolling"); + defer rl.closeWindow(); // Close window and OpenGL context + + // NOTE: Be careful, background width must be equal or bigger than screen width + // if not, texture should be draw more than two times for scrolling effect + const background = rl.loadTexture("resources/textures/cyberpunk_street_background.png"); + const midground = rl.loadTexture("resources/textures/cyberpunk_street_midground.png"); + const foreground = rl.loadTexture("resources/textures/cyberpunk_street_foreground.png"); + defer rl.unloadTexture(background); // Unload background texture + defer rl.unloadTexture(midground); // Unload midground texture + defer rl.unloadTexture(foreground); // Unload foreground texture + + var scrolling_back: f32 = 0; + var scrolling_mid: f32 = 0; + var scrolling_fore: f32 = 0; + + rl.setTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!rl.windowShouldClose()) { // Detect window close button or ESC key + // Update + //---------------------------------------------------------------------------------- + scrolling_back -= 0.1; + scrolling_mid -= 0.5; + scrolling_fore -= 1.0; + + // NOTE: Texture is scaled twice its size, so it sould be considered on scrolling + if (scrolling_back <= @as(f32, @floatFromInt(-background.width * 2))) scrolling_back = 0; + if (scrolling_mid <= @as(f32, @floatFromInt(-midground.width * 2))) scrolling_mid = 0; + if (scrolling_fore <= @as(f32, @floatFromInt(-foreground.width * 2))) scrolling_fore = 0; + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + { + rl.beginDrawing(); + defer rl.endDrawing(); + + rl.clearBackground(rl.getColor(0x052c46ff)); + // Draw background image twice + // NOTE: Texture is scaled twice its size + rl.drawTextureEx( + background, + rl.Vector2.init(scrolling_back, 20.0), + 0.0, + 2.0, + rl.Color.white, + ); + rl.drawTextureEx( + background, + rl.Vector2.init(@as(f32, @floatFromInt(background.width * 2)) + scrolling_back, 20), + 0.0, + 2.0, + rl.Color.white, + ); + + // Draw midground image twice + rl.drawTextureEx( + midground, + rl.Vector2.init(scrolling_mid, 20.0), + 0.0, + 2.0, + rl.Color.white, + ); + rl.drawTextureEx( + midground, + rl.Vector2.init(@as(f32, @floatFromInt(midground.width * 2)) + scrolling_mid, 20), + 0.0, + 2.0, + rl.Color.white, + ); + + // Draw foreground image twice + rl.drawTextureEx( + foreground, + rl.Vector2.init(scrolling_fore, 70.0), + 0.0, + 2.0, + rl.Color.white, + ); + rl.drawTextureEx( + foreground, + rl.Vector2.init(@as(f32, @floatFromInt(foreground.width * 2)) + scrolling_fore, 70), + 0.0, + 2.0, + rl.Color.white, + ); + + rl.drawText( + "BACKGROUND SCROLLING & PARALLAX", + 10, + 10, + 20, + rl.Color.red, + ); + rl.drawText( + "(c) Cyberpunk Street Environment by Luis Zuno (@ansimuz)", + screen_width - 330, + screen_height - 20, + 10, + rl.Color.ray_white, + ); + } + } +} diff --git a/resources/textures/cyberpunk_street_background.png b/resources/textures/cyberpunk_street_background.png new file mode 100644 index 0000000000000000000000000000000000000000..838d08aa1af53d5f20d8e83b317f45dcf447367a GIT binary patch literal 7735 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 Gp$Py)P0nBd literal 0 HcmV?d00001 diff --git a/resources/textures/cyberpunk_street_midground.png b/resources/textures/cyberpunk_street_midground.png new file mode 100644 index 0000000000000000000000000000000000000000..73f24fe75a1e44d3af89544b076cc6d02be66cda GIT binary patch literal 7802 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

Cu7(+E>(_ zYhwO@M#cCTr0#J1c);5#qO7pzfilbg5B6#sSquuFwlRA%+C1Za65;>X2{H(sD%oTy z&Sm(wOb;|FUC))o$)I}homJA+FA*oqX5PEq6acby{-gqiv_*4*59O@yHDyX}mxs(b zm{=+=Naw!(>DqAv?gx+hAISfEe!$+6!FYJZ10b8Zb#L#||OXg?5TRdZcB;nn-cU{jW_`!COM`O6bdc_;o5(A2W0tDnm{ Hr-UW|od|{Y literal 0 HcmV?d00001