Added generic constants to vec and fromHex, toHex for Color
This commit is contained in:
parent
cb7b54995b
commit
f7e249d645
3 changed files with 66 additions and 8 deletions
|
|
@ -36,15 +36,36 @@ pub const Color = extern struct {
|
|||
|
||||
/// ----------------------------------------------------
|
||||
/// ----------------------------------------------------
|
||||
pub inline fn hex(comptime value: u32) Self {
|
||||
const r = @as(f32, @as(u8, @truncate(value >> 16))) / 255.0;
|
||||
const g = @as(f32, @as(u8, @truncate(value >> 8))) / 255.0;
|
||||
const b = @as(f32, @as(u8, @truncate(value >> 0))) / 255.0;
|
||||
pub inline fn fromHex(value: u32) Self {
|
||||
const r = @as(f32, @as(u8, @truncate(value >> 24))) / 255.0;
|
||||
const g = @as(f32, @as(u8, @truncate(value >> 16))) / 255.0;
|
||||
const b = @as(f32, @as(u8, @truncate(value >> 8))) / 255.0;
|
||||
|
||||
const a = if (value > 0xFFFFFF)
|
||||
@as(f32, @as(u8, @truncate(value >> 24))) / 255.0
|
||||
@as(f32, @as(u8, @truncate(value))) / 255.0
|
||||
else
|
||||
1.0;
|
||||
return .{ .r = r, .g = g, .b = b, .a = a };
|
||||
|
||||
return .{
|
||||
.r = r,
|
||||
.g = g,
|
||||
.b = b,
|
||||
.a = a,
|
||||
};
|
||||
}
|
||||
|
||||
/// ----------------------------------------------------
|
||||
/// ----------------------------------------------------
|
||||
pub inline fn toHex(self: Self) u32 {
|
||||
const r: u32 = @intFromFloat(std.math.clamp(self.r, 0.0, 1.0) * 255.0);
|
||||
const g: u32 = @intFromFloat(std.math.clamp(self.g, 0.0, 1.0) * 255.0);
|
||||
const b: u32 = @intFromFloat(std.math.clamp(self.b, 0.0, 1.0) * 255.0);
|
||||
const a: u32 = @intFromFloat(std.math.clamp(self.a, 0.0, 1.0) * 255.0);
|
||||
|
||||
return (r << 24) |
|
||||
(g << 16) |
|
||||
(b << 8) |
|
||||
a;
|
||||
}
|
||||
|
||||
/// ----------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -149,8 +149,11 @@ test "color hex" {
|
|||
std.debug.print("\x1b[35m--- color hex ---\n", .{});
|
||||
defer std.debug.print("\x1b[0m\n", .{});
|
||||
|
||||
const c: Color = .hex(0xFF8800);
|
||||
std.debug.print("0xFF8800: r={d:.4} g={d:.4} b={d:.4} a={d:.1}\n", .{ c.r, c.g, c.b, c.a });
|
||||
const a: Color = .fromHex(0xFF8800);
|
||||
std.debug.print("0xFF8800: r={d:.4} g={d:.4} b={d:.4} a={d:.1}\n", .{ a.r, a.g, a.b, a.a });
|
||||
|
||||
const b = Color.blue.toHex();
|
||||
std.debug.print("blue hex: {}\n", .{b});
|
||||
}
|
||||
|
||||
test "color blend" {
|
||||
|
|
|
|||
34
src/vec.zig
34
src/vec.zig
|
|
@ -133,5 +133,39 @@ pub fn Vec(
|
|||
},
|
||||
};
|
||||
}
|
||||
|
||||
//
|
||||
// CONSTANTS
|
||||
//
|
||||
|
||||
pub const up: Self = blk: {
|
||||
if (Len == 2) break :blk .new(.{ 0, -1 });
|
||||
if (Len == 3) break :blk .new(.{ 0, -1, 0 });
|
||||
};
|
||||
|
||||
pub const down: Self = blk: {
|
||||
if (Len == 2) break :blk .new(.{ 0, 1 });
|
||||
if (Len == 3) break :blk .new(.{ 0, 1, 0 });
|
||||
};
|
||||
|
||||
pub const left: Self = blk: {
|
||||
if (Len == 2) break :blk .new(.{ 1, 0 });
|
||||
if (Len == 3) break :blk .new(.{ 1, 0, 0 });
|
||||
};
|
||||
|
||||
pub const right: Self = blk: {
|
||||
if (Len == 2) break :blk .new(.{ -1, 0 });
|
||||
if (Len == 3) break :blk .new(.{ -1, 0, 0 });
|
||||
};
|
||||
|
||||
pub const forward: Self = blk: {
|
||||
if (Len != 3) @compileError("forward only defined for Vec3");
|
||||
break :blk .new(.{ 0, 0, 1 });
|
||||
};
|
||||
|
||||
pub const backward: Self = blk: {
|
||||
if (Len != 3) @compileError("backward only defined for Vec3");
|
||||
break :blk .new(.{ 0, 0, -1 });
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue