multiple items and debug draw

This commit is contained in:
Jeeves 2025-05-28 11:59:55 -06:00
parent 5148d4a040
commit 474cf08b3c

View file

@ -12,7 +12,7 @@ pub fn main() !void {
scales.recalculate(); scales.recalculate();
global_font = raylib.LoadFontEx("font/SCE-PS3-RD-R-LATIN.TTF", 32, 0, 250); global_font = raylib.LoadFontEx("font/SCE-PS3-RD-R-LATIN.TTF", 32, 0, 250);
raylib.SetTextureFilter(global_font.texture, raylib.TEXTURE_FILTER_TRILINEAR); raylib.SetTextureFilter(global_font.texture, raylib.TEXTURE_FILTER_BILINEAR);
var background = Background.init(); var background = Background.init();
var column = Column.init( var column = Column.init(
@ -22,12 +22,30 @@ pub fn main() !void {
); );
defer column.deinit(); defer column.deinit();
var item = Item.init( var item1 = Item.init(
raylib.LoadTexture("menu/game/CometCrash/ICON0.PNG"), raylib.LoadTexture("menu/game/CometCrash/ICON0.PNG"),
"Comet Crash", "Comet Crash",
"", "",
); );
try column.appendItem(&item); var item2 = Item.init(
raylib.LoadTexture("menu/game/LBP1/ICON0.PNG"),
"LittleBigPlanet",
"",
);
var item3 = Item.init(
raylib.LoadTexture("menu/game/LBP2/ICON0.PNG"),
"LittleBigPlanet 2",
"",
);
var item4 = Item.init(
raylib.LoadTexture("menu/game/LBP3/ICON0.PNG"),
"LittleBigPlanet 3",
"",
);
try column.appendItem(&item1);
try column.appendItem(&item2);
try column.appendItem(&item3);
try column.appendItem(&item4);
raylib.SetTargetFPS(120); raylib.SetTargetFPS(120);
while (!raylib.WindowShouldClose()) { while (!raylib.WindowShouldClose()) {
@ -37,7 +55,7 @@ pub fn main() !void {
scales.recalculate(); scales.recalculate();
} }
if (raylib.IsKeyPressed('D')) debug_draw = !debug_draw; if (raylib.IsKeyPressed('D')) debug_draw = !debug_draw;
if (raylib.IsKeyPressed('Z')) item.setBig(!item.large); if (raylib.IsKeyPressed('Z')) item1.setLarge(!item1.large);
if (raylib.IsKeyPressed('S')) raylib.TakeScreenshot("screenshot.png"); if (raylib.IsKeyPressed('S')) raylib.TakeScreenshot("screenshot.png");
raylib.BeginDrawing(); raylib.BeginDrawing();
@ -67,8 +85,8 @@ var scales: Scales = undefined;
pub const Scales = struct { pub const Scales = struct {
item_icon_small_width: f32, item_icon_small_width: f32,
item_icon_small_height: f32, item_icon_small_height: f32,
// item_icon_small_scale: f32, item_icon_large_width: f32,
// item_icon_large_scale: f32, item_icon_large_height: f32,
item_title_font_size: f32, item_title_font_size: f32,
item_subtitle_font_size: f32, item_subtitle_font_size: f32,
@ -76,13 +94,14 @@ pub const Scales = struct {
column_title_font_size: f32, column_title_font_size: f32,
column_position_center: raylib.Vector2, column_position_center: raylib.Vector2,
column_position_spacing: f32, column_position_spacing: f32,
column_item_spacing: f32,
/// Recalculate scales after screen resize. /// Recalculate scales after screen resize.
pub fn recalculate(self: *Scales) void { pub fn recalculate(self: *Scales) void {
self.item_icon_small_width = 67; self.item_icon_small_width = 67;
self.item_icon_small_height = 48; self.item_icon_small_height = 48;
// self.item_icon_small_scale = 0.272727; self.item_icon_large_width = 67;
// self.item_icon_large_scale = 0.272727; self.item_icon_large_height = 48;
self.item_title_font_size = 16; self.item_title_font_size = 16;
self.column_icon_scale = 0.75; self.column_icon_scale = 0.75;
@ -92,6 +111,7 @@ pub const Scales = struct {
.y = std.math.lerp(0.0, screen_height, 0.15), .y = std.math.lerp(0.0, screen_height, 0.15),
}; };
self.column_position_spacing = 64; self.column_position_spacing = 64;
self.column_item_spacing = 16;
} }
}; };
@ -133,11 +153,11 @@ pub const Column = struct {
.y = icon.box.y + icon.box.h + 6, .y = icon.box.y + icon.box.h + 6,
}; };
var y: f32 = scales.column_position_center.y + icon.box.h + title_size.y + 24; var y: f32 = scales.column_position_center.y + icon.box.h + title_size.y + scales.column_item_spacing;
for (self.items.items) |item| { for (self.items.items) |item| {
item.position = .{ .x = scales.column_position_center.x, .y = y }; item.position = .{ .x = scales.column_position_center.x, .y = y };
item.draw(); item.draw();
y += 64; y += scales.item_icon_small_height + scales.column_item_spacing;
} }
icon.draw(); icon.draw();
@ -166,7 +186,7 @@ pub const Item = struct {
icon: raylib.Texture2D, icon: raylib.Texture2D,
title: []const u8, title: []const u8,
subtitle: []const u8, subtitle: []const u8,
large: bool = true, large: bool = false,
pub fn init(texture: raylib.Texture2D, title: []const u8, subtitle: []const u8) Item { pub fn init(texture: raylib.Texture2D, title: []const u8, subtitle: []const u8) Item {
raylib.SetTextureFilter(texture, raylib.TEXTURE_FILTER_BILINEAR); raylib.SetTextureFilter(texture, raylib.TEXTURE_FILTER_BILINEAR);
@ -207,8 +227,8 @@ pub const Item = struct {
raylib.DrawTextEx(global_font, @ptrCast(self.title), title_position, scales.item_title_font_size, 1, raylib.WHITE); raylib.DrawTextEx(global_font, @ptrCast(self.title), title_position, scales.item_title_font_size, 1, raylib.WHITE);
} }
pub fn setBig(self: *Item, big: bool) void { pub fn setLarge(self: *Item, large: bool) void {
self.large = big; self.large = large;
// self.time = 0; // self.time = 0;
// self.start_scale = self.icon_scale; // self.start_scale = self.icon_scale;
} }
@ -302,6 +322,7 @@ pub const BoundingBox = struct {
}; };
/// A texture within a bounding box. Positions and scales based on configurable parameters. /// A texture within a bounding box. Positions and scales based on configurable parameters.
/// Will not crop texture if using `Mode.original`.
pub const Image = struct { pub const Image = struct {
box: BoundingBox, box: BoundingBox,
texture: raylib.Texture2D, texture: raylib.Texture2D,