use alloc::string::ToString;
use tortuise_script::{
buffer::{Cell, Color},
ScriptContext, TortuiseScript,
};
use crate::{APPLE_LOCATION, GRID_SIZE, SNAKE_CELLS};
fn draw_box(cx: &mut ScriptContext, char: char, x: u16, y: u16) {
for i in 1..5 {
cx.add_cell(Cell {
character: '-',
x: x + i,
y,
..Default::default()
});
cx.add_cell(Cell {
character: '-',
x: x + i,
y: y + 2,
..Default::default()
});
}
cx.add_cell(Cell {
character: '|',
x,
y: y + 1,
..Default::default()
});
cx.add_cell(Cell {
character: '|',
x: x + 5,
y: y + 1,
..Default::default()
});
cx.add_cell(Cell {
character: char,
x: x + 3,
y: y + 1,
..Default::default()
});
}
pub const RENDER: TortuiseScript = TortuiseScript {
update: |mut context: ScriptContext| {
let apple_location = APPLE_LOCATION.get(&context);
let snake_cells = SNAKE_CELLS.get(&context);
let window_size = context.window_size();
let offset_x = window_size.columns.saturating_sub(GRID_SIZE) / 2;
let offset_y = window_size.rows.saturating_sub(GRID_SIZE) / 2;
for i in 0..GRID_SIZE {
context.add_cell(Cell {
character: '|',
x: offset_x.saturating_sub(1),
y: offset_y + i,
z: 0,
..Default::default()
});
context.add_cell(Cell {
character: '|',
x: offset_x + GRID_SIZE,
y: offset_y + i,
z: 0,
..Default::default()
});
context.add_cell(Cell {
character: '-',
x: offset_x + i,
y: offset_y.saturating_sub(1),
z: 0,
..Default::default()
});
context.add_cell(Cell {
character: '-',
x: offset_x + i,
y: offset_y + GRID_SIZE,
z: 0,
..Default::default()
});
}
for (i, char) in "Score:".chars().enumerate() {
context.add_cell(Cell {
character: char,
x: offset_x + GRID_SIZE - 10 + i as u16,
y: offset_y.saturating_sub(2),
..Default::default()
});
}
draw_box(&mut context, '<', 4, 4);
draw_box(&mut context, '>', 16, 4);
draw_box(&mut context, '^', 10, 1);
draw_box(&mut context, 'v', 10, 7);
for (i, char) in (snake_cells.len() - 2)
.to_string()
.chars()
.rev()
.enumerate()
{
context.add_cell(Cell {
character: char,
x: offset_x + GRID_SIZE - i as u16,
y: offset_y.saturating_sub(2),
..Default::default()
});
}
context.add_cell(Cell {
character: '●',
foreground_color: Color::Red,
x: apple_location.x.unsigned_abs() + offset_x,
y: apple_location.y.unsigned_abs() + offset_y,
z: 0,
..Default::default()
});
for cell in &*snake_cells {
context.add_cell(Cell {
character: '█',
foreground_color: Color::Green,
x: cell.x.unsigned_abs() + offset_x,
y: cell.y.unsigned_abs() + offset_y,
z: 1,
..Default::default()
});
}
},
..TortuiseScript::empty()
};
|