mirror of
https://github.com/Not-Nik/raylib-zig.git
synced 2025-09-09 12:07:27 +00:00

* Verify shaders are valid * Verify images are valid * Verify models are valid * Verify materials are valid * Verify textures are valid * Verify render textures are valid * Verify waves are valid * Verify sounds are valid * Verify music is valid * Verify audio streams are valid * Verify fonts are valid * Update examples to handle error unions
124 lines
4.5 KiB
Zig
124 lines
4.5 KiB
Zig
//! # 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 = try rl.loadTexture("resources/textures/cyberpunk_street_background.png");
|
|
const midground = try rl.loadTexture("resources/textures/cyberpunk_street_midground.png");
|
|
const foreground = try 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,
|
|
);
|
|
}
|
|
}
|
|
}
|