mirror of
https://github.com/fairyglade/ly.git
synced 2025-12-20 19:24:53 +00:00
Remove color randomization from Game of Life animation
This commit is contained in:
@@ -147,11 +147,6 @@ gameoflife_frame_delay = 6
|
|||||||
# 0.7+ -> Dense, chaotic patterns
|
# 0.7+ -> Dense, chaotic patterns
|
||||||
gameoflife_initial_density = 0.4
|
gameoflife_initial_density = 0.4
|
||||||
|
|
||||||
# Game of Life randomize colors (true/false)
|
|
||||||
# false -> Use the fixed gameoflife_fg color
|
|
||||||
# true -> Generate one random color at startup and use it for the entire session
|
|
||||||
gameoflife_randomize_colors = false
|
|
||||||
|
|
||||||
# Remove main box borders
|
# Remove main box borders
|
||||||
hide_borders = false
|
hide_borders = false
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ const Cell = @import("../tui/Cell.zig");
|
|||||||
const TerminalBuffer = @import("../tui/TerminalBuffer.zig");
|
const TerminalBuffer = @import("../tui/TerminalBuffer.zig");
|
||||||
|
|
||||||
const Allocator = std.mem.Allocator;
|
const Allocator = std.mem.Allocator;
|
||||||
const Random = std.Random;
|
|
||||||
|
|
||||||
const GameOfLife = @This();
|
const GameOfLife = @This();
|
||||||
|
|
||||||
@@ -27,12 +26,11 @@ fg_color: u32,
|
|||||||
entropy_interval: usize,
|
entropy_interval: usize,
|
||||||
frame_delay: usize,
|
frame_delay: usize,
|
||||||
initial_density: f32,
|
initial_density: f32,
|
||||||
randomize_colors: bool,
|
|
||||||
dead_cell: Cell,
|
dead_cell: Cell,
|
||||||
width: usize,
|
width: usize,
|
||||||
height: usize,
|
height: usize,
|
||||||
|
|
||||||
pub fn init(allocator: Allocator, terminal_buffer: *TerminalBuffer, fg_color: u32, entropy_interval: usize, frame_delay: usize, initial_density: f32, randomize_colors: bool) !GameOfLife {
|
pub fn init(allocator: Allocator, terminal_buffer: *TerminalBuffer, fg_color: u32, entropy_interval: usize, frame_delay: usize, initial_density: f32) !GameOfLife {
|
||||||
const width = terminal_buffer.width;
|
const width = terminal_buffer.width;
|
||||||
const height = terminal_buffer.height;
|
const height = terminal_buffer.height;
|
||||||
const grid_size = width * height;
|
const grid_size = width * height;
|
||||||
@@ -47,11 +45,10 @@ pub fn init(allocator: Allocator, terminal_buffer: *TerminalBuffer, fg_color: u3
|
|||||||
.next_grid = next_grid,
|
.next_grid = next_grid,
|
||||||
.frame_counter = 0,
|
.frame_counter = 0,
|
||||||
.generation = 0,
|
.generation = 0,
|
||||||
.fg_color = if (randomize_colors) generateRandomColor(terminal_buffer.random) else fg_color,
|
.fg_color = fg_color,
|
||||||
.entropy_interval = entropy_interval,
|
.entropy_interval = entropy_interval,
|
||||||
.frame_delay = frame_delay,
|
.frame_delay = frame_delay,
|
||||||
.initial_density = initial_density,
|
.initial_density = initial_density,
|
||||||
.randomize_colors = randomize_colors,
|
|
||||||
.dead_cell = .{ .ch = DEAD_CHAR, .fg = @intCast(TerminalBuffer.Color.DEFAULT), .bg = terminal_buffer.bg },
|
.dead_cell = .{ .ch = DEAD_CHAR, .fg = @intCast(TerminalBuffer.Color.DEFAULT), .bg = terminal_buffer.bg },
|
||||||
.width = width,
|
.width = width,
|
||||||
.height = height,
|
.height = height,
|
||||||
@@ -103,7 +100,7 @@ fn draw(self: *GameOfLife) void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render with the set color (either configured or randomly generated at startup)
|
// Render with the configured color
|
||||||
const alive_cell = Cell{ .ch = ALIVE_CHAR, .fg = self.fg_color, .bg = self.terminal_buffer.bg };
|
const alive_cell = Cell{ .ch = ALIVE_CHAR, .fg = self.fg_color, .bg = self.terminal_buffer.bg };
|
||||||
|
|
||||||
for (0..self.height) |y| {
|
for (0..self.height) |y| {
|
||||||
@@ -115,15 +112,6 @@ fn draw(self: *GameOfLife) void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generateRandomColor(random: Random) u32 {
|
|
||||||
// Generate a random RGB color with good visibility
|
|
||||||
// Avoid very dark colors by using range 64-255 for each component
|
|
||||||
const r = random.intRangeAtMost(u8, 64, 255);
|
|
||||||
const g = random.intRangeAtMost(u8, 64, 255);
|
|
||||||
const b = random.intRangeAtMost(u8, 64, 255);
|
|
||||||
return (@as(u32, r) << 16) | (@as(u32, g) << 8) | @as(u32, b);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn updateGeneration(self: *GameOfLife) void {
|
fn updateGeneration(self: *GameOfLife) void {
|
||||||
// Conway's Game of Life rules with optimized neighbor counting
|
// Conway's Game of Life rules with optimized neighbor counting
|
||||||
for (0..self.height) |y| {
|
for (0..self.height) |y| {
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ gameoflife_fg: u32 = 0x0000FF00,
|
|||||||
gameoflife_entropy_interval: usize = 10,
|
gameoflife_entropy_interval: usize = 10,
|
||||||
gameoflife_frame_delay: usize = 6,
|
gameoflife_frame_delay: usize = 6,
|
||||||
gameoflife_initial_density: f32 = 0.4,
|
gameoflife_initial_density: f32 = 0.4,
|
||||||
gameoflife_randomize_colors: bool = false,
|
|
||||||
hide_borders: bool = false,
|
hide_borders: bool = false,
|
||||||
hide_key_hints: bool = false,
|
hide_key_hints: bool = false,
|
||||||
initial_info_text: ?[]const u8 = null,
|
initial_info_text: ?[]const u8 = null,
|
||||||
|
|||||||
Reference in New Issue
Block a user