feat: initial game screen

This commit is contained in:
Muhammad Nauman Raza 2025-02-21 12:46:52 +00:00
parent 400852f7dc
commit e8d99eac55
Signed by untrusted user: devraza
GPG key ID: 91EAD6081011574B
5 changed files with 45 additions and 18 deletions

13
client/src/game.rs Normal file
View 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);
}

View file

@ -1,7 +1,8 @@
use color_eyre::Result;
mod tui;
mod game;
mod menu;
mod tui;
mod util;
fn main() -> Result<()> {

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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])