mirror of
https://github.com/pythops/bouncinamation.git
synced 2024-11-27 01:56:38 +00:00
feat: add colors
This commit is contained in:
parent
378c40435b
commit
4c0c2e33a5
50
Cargo.lock
generated
50
Cargo.lock
generated
@ -16,9 +16,10 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bouncinamation"
|
name = "bouncinamation"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossterm",
|
"crossterm",
|
||||||
|
"rand",
|
||||||
"ratatui",
|
"ratatui",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -59,6 +60,17 @@ dependencies = [
|
|||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "getrandom"
|
||||||
|
version = "0.2.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"wasi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.142"
|
version = "0.2.142"
|
||||||
@ -119,6 +131,42 @@ dependencies = [
|
|||||||
"windows-sys",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ppv-lite86"
|
||||||
|
version = "0.2.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand"
|
||||||
|
version = "0.8.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"rand_chacha",
|
||||||
|
"rand_core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_chacha"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||||
|
dependencies = [
|
||||||
|
"ppv-lite86",
|
||||||
|
"rand_core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_core"
|
||||||
|
version = "0.6.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ratatui"
|
name = "ratatui"
|
||||||
version = "0.20.1"
|
version = "0.20.1"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "bouncinamation"
|
name = "bouncinamation"
|
||||||
description = "Bouncing DvD logo animation"
|
description = "Bouncing DvD logo animation"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
authors = ["pythops <contact@pythops.com>"]
|
authors = ["pythops <contact@pythops.com>"]
|
||||||
license = "AGPL-3.0"
|
license = "AGPL-3.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
@ -12,3 +12,4 @@ repository = "https://github.com/pythops/bouncinamation"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
crossterm = "0.26.1"
|
crossterm = "0.26.1"
|
||||||
tui = { package = "ratatui", version = "0.20.1" }
|
tui = { package = "ratatui", version = "0.20.1" }
|
||||||
|
rand = "0.8.5"
|
||||||
|
62
src/app.rs
62
src/app.rs
@ -1,14 +1,63 @@
|
|||||||
|
use rand::{
|
||||||
|
distributions::{Distribution, Standard},
|
||||||
|
Rng,
|
||||||
|
};
|
||||||
|
|
||||||
use std::error;
|
use std::error;
|
||||||
use tui::layout::Rect;
|
use tui::{layout::Rect, style::Color};
|
||||||
|
|
||||||
pub type AppResult<T> = std::result::Result<T, Box<dyn error::Error>>;
|
pub type AppResult<T> = std::result::Result<T, Box<dyn error::Error>>;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
enum LogoColor {
|
||||||
|
White,
|
||||||
|
Red,
|
||||||
|
Blue,
|
||||||
|
Cyan,
|
||||||
|
Yellow,
|
||||||
|
Magenta,
|
||||||
|
Green,
|
||||||
|
Gray,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<LogoColor> for Color {
|
||||||
|
fn from(color: LogoColor) -> Self {
|
||||||
|
match color {
|
||||||
|
LogoColor::White => Color::White,
|
||||||
|
LogoColor::Red => Color::Red,
|
||||||
|
LogoColor::Blue => Color::Blue,
|
||||||
|
LogoColor::Cyan => Color::Cyan,
|
||||||
|
LogoColor::Yellow => Color::Yellow,
|
||||||
|
LogoColor::Magenta => Color::Magenta,
|
||||||
|
LogoColor::Green => Color::Green,
|
||||||
|
LogoColor::Gray => Color::Gray,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Distribution<LogoColor> for Standard {
|
||||||
|
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> LogoColor {
|
||||||
|
match rng.gen_range(0..=8) {
|
||||||
|
0 => LogoColor::White,
|
||||||
|
1 => LogoColor::Red,
|
||||||
|
2 => LogoColor::Blue,
|
||||||
|
3 => LogoColor::Cyan,
|
||||||
|
4 => LogoColor::Yellow,
|
||||||
|
5 => LogoColor::Magenta,
|
||||||
|
6 => LogoColor::Green,
|
||||||
|
7 => LogoColor::Gray,
|
||||||
|
_ => LogoColor::White,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct App {
|
pub struct App {
|
||||||
pub running: bool,
|
pub running: bool,
|
||||||
pub coordinates: (u16, u16),
|
pub coordinates: (u16, u16),
|
||||||
pub move_left: bool,
|
pub move_left: bool,
|
||||||
pub move_top: bool,
|
pub move_top: bool,
|
||||||
|
pub color: Color,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for App {
|
impl Default for App {
|
||||||
@ -18,6 +67,7 @@ impl Default for App {
|
|||||||
coordinates: (1, 1),
|
coordinates: (1, 1),
|
||||||
move_left: false,
|
move_left: false,
|
||||||
move_top: false,
|
move_top: false,
|
||||||
|
color: Color::White,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -32,20 +82,24 @@ impl App {
|
|||||||
let mut y = self.coordinates.1;
|
let mut y = self.coordinates.1;
|
||||||
|
|
||||||
if x == 0 {
|
if x == 0 {
|
||||||
self.move_left = false
|
self.move_left = false;
|
||||||
|
self.color = rand::random::<LogoColor>().into();
|
||||||
}
|
}
|
||||||
|
|
||||||
if y == 0 {
|
if y == 0 {
|
||||||
self.move_top = false
|
self.move_top = false;
|
||||||
|
self.color = rand::random::<LogoColor>().into();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 31 is the logo width
|
// 31 is the logo width
|
||||||
if x >= term_size.width - 31 {
|
if x >= term_size.width - 31 {
|
||||||
self.move_left = true;
|
self.move_left = true;
|
||||||
|
self.color = rand::random::<LogoColor>().into();
|
||||||
}
|
}
|
||||||
|
|
||||||
if y >= term_size.height - 9 {
|
if y >= term_size.height - 9 {
|
||||||
self.move_top = true
|
self.move_top = true;
|
||||||
|
self.color = rand::random::<LogoColor>().into();
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.move_left {
|
if self.move_left {
|
||||||
|
@ -48,6 +48,7 @@ pub fn render<B: Backend>(app: &mut App, frame: &mut Frame<'_, B>) {
|
|||||||
"#;
|
"#;
|
||||||
|
|
||||||
let block = Paragraph::new(logo)
|
let block = Paragraph::new(logo)
|
||||||
|
.style(Style::default().fg(app.color))
|
||||||
.alignment(tui::layout::Alignment::Center)
|
.alignment(tui::layout::Alignment::Center)
|
||||||
.block(Block::default().style(Style::default()));
|
.block(Block::default().style(Style::default()));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user