Fiddled with some spacing and stuff
This commit is contained in:
@@ -4,8 +4,8 @@ use card_stuffs::{self, NUM_PILES_KLONDIKE};
|
|||||||
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind};
|
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind};
|
||||||
use ratatui::{
|
use ratatui::{
|
||||||
buffer::Buffer,
|
buffer::Buffer,
|
||||||
layout::{Constraint, Layout, Rect},
|
layout::{Constraint, Layout, Rect, Flex},
|
||||||
style::Stylize,
|
style::{Style, Stylize, Color},
|
||||||
symbols::border,
|
symbols::border,
|
||||||
text::{Line, Text},
|
text::{Line, Text},
|
||||||
widgets::{block::title, Block, BorderType, Borders, Paragraph, Widget, Padding, ListItem, List},
|
widgets::{block::title, Block, BorderType, Borders, Paragraph, Widget, Padding, ListItem, List},
|
||||||
@@ -18,56 +18,68 @@ pub struct App {
|
|||||||
exit: bool,
|
exit: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
const CARD_HEIGHT: u16 = 12;
|
const CARD_HEIGHT: u16 = 11;
|
||||||
const CARD_WIDTH: u16 = 17;
|
const CARD_WIDTH: u16 = 15;
|
||||||
|
|
||||||
fn card_widget(card: &card_stuffs::Card) -> List {
|
fn card_widget(card: &card_stuffs::Card, top: bool) -> List {
|
||||||
let five_card = [
|
let five_card = [
|
||||||
format!("{value}{suit} ", value=card.value, suit=card.suit),
|
format!("{value}{suit} ", value=card.value, suit=card.suit),
|
||||||
format!(" "),
|
format!(" "),
|
||||||
format!(" {suit} {suit} ", suit=card.suit),
|
format!(" {suit} {suit} ", suit=card.suit),
|
||||||
format!(" "),
|
format!(" "),
|
||||||
format!(" "),
|
|
||||||
format!(" {suit} ", suit=card.suit),
|
format!(" {suit} ", suit=card.suit),
|
||||||
format!(" "),
|
format!(" "),
|
||||||
format!(" "),
|
|
||||||
format!(" {suit} {suit} ", suit=card.suit),
|
format!(" {suit} {suit} ", suit=card.suit),
|
||||||
format!(" "),
|
format!(" "),
|
||||||
format!(" {value}{suit}", value=card.value, suit=card.suit),
|
format!(" {value}{suit}", value=card.value, suit=card.suit),
|
||||||
];
|
];
|
||||||
let card: Vec<ListItem> = five_card.iter().map(|(m)| {
|
let card_style = match card.suit.colour() {
|
||||||
|
card_stuffs::Colour::Black => Style::new().black().bg(Color::White),
|
||||||
|
card_stuffs::Colour::Red => Style::new().red().bg(Color::White),
|
||||||
|
};
|
||||||
|
let card: Vec<ListItem> = five_card.iter().map(|m| {
|
||||||
ListItem::new(m.to_string())
|
ListItem::new(m.to_string())
|
||||||
|
.style(card_style)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
|
let mut borders = Borders::TOP | Borders::LEFT | Borders::RIGHT;
|
||||||
|
if top {
|
||||||
|
borders |= Borders::BOTTOM;
|
||||||
|
}
|
||||||
|
|
||||||
List::new(card)
|
List::new(card)
|
||||||
.block(Block::new()
|
.block(Block::new()
|
||||||
.borders(Borders::ALL)
|
//.style(Style::new().red().bold().italic())
|
||||||
|
// Might use something like this for "active"/"selected"
|
||||||
|
.borders(borders)
|
||||||
.border_type(BorderType::Rounded))
|
.border_type(BorderType::Rounded))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn turned_over_card() -> List<'static> {
|
fn turned_over_card(top: bool) -> List<'static> {
|
||||||
let hidden_card = [
|
let hidden_card = [
|
||||||
format!("###############"),
|
format!("#############"),
|
||||||
format!("###############"),
|
format!("#############"),
|
||||||
format!("###############"),
|
format!("#############"),
|
||||||
format!("###############"),
|
format!("#############"),
|
||||||
format!("###############"),
|
format!("#############"),
|
||||||
format!("###############"),
|
format!("#############"),
|
||||||
format!("###############"),
|
format!("#############"),
|
||||||
format!("###############"),
|
format!("#############"),
|
||||||
format!("###############"),
|
|
||||||
format!("###############"),
|
|
||||||
format!("###############"),
|
|
||||||
];
|
];
|
||||||
let card: Vec<ListItem> = hidden_card.iter().map(|(m)| {
|
let card: Vec<ListItem> = hidden_card.iter().map(|m| {
|
||||||
ListItem::new(m.to_string())
|
ListItem::new(m.to_string())
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
|
let mut borders = Borders::TOP | Borders::LEFT | Borders::RIGHT;
|
||||||
|
if top {
|
||||||
|
borders |= Borders::BOTTOM;
|
||||||
|
}
|
||||||
|
|
||||||
List::new(card)
|
List::new(card)
|
||||||
.block(Block::new()
|
.block(Block::new()
|
||||||
.borders(Borders::ALL)
|
.borders(borders)
|
||||||
.border_type(BorderType::Rounded))
|
.border_type(BorderType::Rounded))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,21 +132,38 @@ impl App {
|
|||||||
Constraint::Length(CARD_WIDTH),
|
Constraint::Length(CARD_WIDTH),
|
||||||
Constraint::Length(CARD_WIDTH),
|
Constraint::Length(CARD_WIDTH),
|
||||||
Constraint::Length(CARD_WIDTH),
|
Constraint::Length(CARD_WIDTH),
|
||||||
]);
|
]).flex(Flex::SpaceAround);
|
||||||
let pileses: [Rect; 7] = horizontal.areas(piles_area);
|
let pileses: [Rect; 7] = horizontal.areas(piles_area);
|
||||||
let a_card = card_widget(&self.cards.piles[0][0]);
|
|
||||||
|
|
||||||
for pile in 0..card_stuffs::NUM_PILES_KLONDIKE {
|
for pile in 0..card_stuffs::NUM_PILES_KLONDIKE {
|
||||||
let mut constraints = Vec::new();
|
let mut constraints = Vec::new();
|
||||||
for card in 0..(card_stuffs::NUM_PILES_KLONDIKE + 13) {
|
for card in 0..(card_stuffs::NUM_PILES_KLONDIKE + 13) {
|
||||||
constraints.push(Constraint::Min(2));
|
match self.cards.piles[pile].get(card) {
|
||||||
|
Some(_) => {
|
||||||
|
if card == self.cards.piles[pile].len() - 1 {
|
||||||
|
constraints.push(Constraint::Length(CARD_HEIGHT));
|
||||||
|
} else {
|
||||||
|
constraints.push(Constraint::Length(2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
constraints.push(Constraint::Length(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let vertical = Layout::vertical(constraints);
|
let vertical = Layout::vertical(constraints);
|
||||||
let card_display: [Rect; 20] = vertical.areas(pileses[pile]);
|
let card_display: [Rect; card_stuffs::NUM_PILES_KLONDIKE + 13] = vertical.areas(pileses[pile]);
|
||||||
for (i, card) in card_display.iter().enumerate() {
|
for (i, card) in card_display.iter().enumerate() {
|
||||||
match self.cards.piles[pile].get(i) {
|
match self.cards.piles[pile].get(i) {
|
||||||
None => break,
|
None => break,
|
||||||
Some(c) => {
|
Some(c) => {
|
||||||
|
let is_top_card = i == self.cards.piles[pile].len() - 1;
|
||||||
|
let a_card = match c.visible {
|
||||||
|
true => card_widget(c, is_top_card),
|
||||||
|
//false => turned_over_card(is_top_card),
|
||||||
|
false => card_widget(c, is_top_card),
|
||||||
|
};
|
||||||
frame.render_widget(
|
frame.render_widget(
|
||||||
&a_card,
|
&a_card,
|
||||||
*card
|
*card
|
||||||
|
|||||||
Reference in New Issue
Block a user