forked from atiran/txtris
feat: initial game screen
This commit is contained in:
parent
400852f7dc
commit
e8d99eac55
5 changed files with 45 additions and 18 deletions
13
client/src/game.rs
Normal file
13
client/src/game.rs
Normal file
|
@ -0,0 +1,13 @@
|
|||
use ratatui::{
|
||||
buffer::Buffer,
|
||||
layout::Rect,
|
||||
widgets::{Block, Borders, Padding, Paragraph, Widget},
|
||||
};
|
||||
|
||||
pub fn render(area: Rect, buf: &mut Buffer) {
|
||||
let block = Block::new()
|
||||
.padding(Padding::symmetric(2, 1))
|
||||
.borders(Borders::ALL);
|
||||
|
||||
Paragraph::new("").block(block).render(area, buf);
|
||||
}
|
|
@ -1,7 +1,8 @@
|
|||
use color_eyre::Result;
|
||||
|
||||
mod tui;
|
||||
mod game;
|
||||
mod menu;
|
||||
mod tui;
|
||||
mod util;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
use ratatui::{
|
||||
buffer::Buffer,
|
||||
crossterm::event::{self, KeyCode, KeyEvent},
|
||||
layout::Rect,
|
||||
text::{Line, Span},
|
||||
layout::{Constraint, Layout, Rect},
|
||||
style::{Modifier, Style, Stylize, palette::tailwind::*},
|
||||
text::{Line, Span},
|
||||
widgets::{
|
||||
Block, Borders, HighlightSpacing, List,
|
||||
ListState, Padding, StatefulWidget, Paragraph, Widget
|
||||
Block, Borders, HighlightSpacing, List, ListState, Padding, Paragraph, StatefulWidget,
|
||||
Widget,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -113,6 +113,12 @@ impl OptionList {
|
|||
tui::Mode::MainMenu(self)
|
||||
}
|
||||
}
|
||||
KeyCode::Enter => match self.items.get(self.state.selected().unwrap_or_default()) {
|
||||
Some(&"Blitz") => tui::Mode::Blitz,
|
||||
Some(&"40L") => tui::Mode::FortyL,
|
||||
Some(&"txLadder") => tui::Mode::TxLadder,
|
||||
_ => tui::Mode::Exit,
|
||||
},
|
||||
_ => tui::Mode::MainMenu(self),
|
||||
}
|
||||
}
|
||||
|
@ -142,3 +148,12 @@ impl OptionList {
|
|||
StatefulWidget::render(list, area, buf, &mut self.state);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn render_menu(area: Rect, menu_list: &mut OptionList, buf: &mut Buffer) {
|
||||
let [profile_area, list_outer_area] =
|
||||
Layout::vertical([Constraint::Percentage(50), Constraint::Percentage(50)]).areas(area);
|
||||
|
||||
render_profile(profile_area, buf);
|
||||
|
||||
menu_list.render(list_outer_area, buf);
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ use ratatui::{
|
|||
widgets::Widget,
|
||||
};
|
||||
|
||||
use crate::game;
|
||||
use crate::menu;
|
||||
use crate::util::*;
|
||||
|
||||
|
@ -22,7 +23,9 @@ pub enum Mode {
|
|||
|
||||
impl Default for Mode {
|
||||
fn default() -> Self {
|
||||
Mode::MainMenu(menu::OptionList::from_iter(["40L", "Blitz", "txLadder", "Config"]))
|
||||
Mode::MainMenu(menu::OptionList::from_iter([
|
||||
"40L", "Blitz", "txLadder", "Config",
|
||||
]))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,9 +33,7 @@ impl Mode {
|
|||
pub fn run(mut self, mut terminal: DefaultTerminal) -> Result<()> {
|
||||
loop {
|
||||
match self {
|
||||
Mode::Exit => {
|
||||
break
|
||||
}
|
||||
Mode::Exit => break,
|
||||
_ => {
|
||||
terminal.draw(|frame| frame.render_widget(&mut self, frame.area()))?;
|
||||
if let Event::Key(key) = event::read()? {
|
||||
|
@ -46,7 +47,7 @@ impl Mode {
|
|||
|
||||
fn handle_key(self, key: KeyEvent) -> Mode {
|
||||
if key.kind != KeyEventKind::Press {
|
||||
return self
|
||||
return self;
|
||||
}
|
||||
|
||||
match self {
|
||||
|
@ -71,18 +72,15 @@ impl Widget for &mut Mode {
|
|||
Constraint::Percentage(60),
|
||||
);
|
||||
|
||||
let [profile_area, list_outer_area] =
|
||||
Layout::vertical([Constraint::Percentage(50), Constraint::Percentage(50)])
|
||||
.areas(center_area);
|
||||
|
||||
menu::render_header(header_area, buf);
|
||||
|
||||
match self {
|
||||
Mode::MainMenu(menu_list) => {
|
||||
menu::render_profile(profile_area, buf);
|
||||
menu_list.render(list_outer_area, buf);
|
||||
menu::render_menu(center_area, menu_list, buf);
|
||||
}
|
||||
_ => {
|
||||
game::render(center_area, buf);
|
||||
}
|
||||
_ => {},
|
||||
}
|
||||
menu::render_footer(footer_area, buf);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use ratatui::layout::{Layout, Flex, Constraint, Rect};
|
||||
use ratatui::layout::{Constraint, Flex, Layout, Rect};
|
||||
|
||||
pub fn center(area: Rect, horizontal: Constraint, vertical: Constraint) -> Rect {
|
||||
let [area] = Layout::horizontal([horizontal])
|
||||
|
|
Loading…
Reference in a new issue