tui logger w/ patched bevy_ratatui
This commit is contained in:
parent
3fb03cfbcb
commit
78029687d7
10 changed files with 885 additions and 162 deletions
|
|
@ -1,4 +1,3 @@
|
|||
use std::collections::VecDeque;
|
||||
|
||||
use bevy::prelude::*;
|
||||
|
||||
|
|
@ -48,7 +47,7 @@ pub(crate) struct MatchSettings {
|
|||
pub(crate) player_count: u8,
|
||||
}
|
||||
|
||||
pub(crate) fn next_round(mut compass: Res<Compass>) {}
|
||||
pub(crate) fn next_round(_compass: Res<Compass>) {}
|
||||
|
||||
pub(crate) fn init_match(
|
||||
mut commands: Commands,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
use std::collections::VecDeque;
|
||||
|
||||
use bevy::prelude::*;
|
||||
|
||||
|
|
@ -7,6 +6,6 @@ use crate::tiles::Tile;
|
|||
#[derive(Component)]
|
||||
pub(crate) struct Wall(Vec<Entity>);
|
||||
|
||||
pub(crate) fn build_wall(tiles: Query<&Tile>) {
|
||||
pub(crate) fn build_wall(_tiles: Query<&Tile>) {
|
||||
info!("built a wall!")
|
||||
}
|
||||
|
|
|
|||
19
src/main.rs
19
src/main.rs
|
|
@ -1,5 +1,6 @@
|
|||
use bevy::prelude::*;
|
||||
use clap::{Parser, Subcommand};
|
||||
use tracing_subscriber::{layer::SubscriberExt, registry::LookupSpan, util::SubscriberInitExt};
|
||||
|
||||
mod gui;
|
||||
mod tui;
|
||||
|
|
@ -17,17 +18,25 @@ enum Mode {
|
|||
}
|
||||
|
||||
fn main() {
|
||||
tracing_subscriber::fmt()
|
||||
.with_writer(std::io::stderr)
|
||||
.with_env_filter("warn,jong=trace")
|
||||
.init();
|
||||
// tracing_subscriber::fmt()
|
||||
// .with_writer(std::io::stderr)
|
||||
// .with_env_filter("warn,jong=trace")
|
||||
// .init();
|
||||
|
||||
let args = Args::parse();
|
||||
|
||||
let mut app = App::new();
|
||||
let app = match args.mode {
|
||||
Mode::RunGui => app.add_plugins(DefaultPlugins),
|
||||
Mode::RunTui => app.add_plugins(tui::RiichiTui),
|
||||
Mode::RunTui => {
|
||||
tracing_subscriber::registry()
|
||||
.with(tui_logger::TuiTracingSubscriberLayer)
|
||||
.init();
|
||||
tui_logger::init_logger(tui_logger::LevelFilter::Trace).unwrap();
|
||||
tui_logger::set_env_filter_from_string("warn,jong=trace");
|
||||
|
||||
app.add_plugins(tui::RiichiTui)
|
||||
}
|
||||
};
|
||||
|
||||
app.add_plugins(jong::game::Riichi);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
use bevy::{ecs::entity::MapEntities, prelude::*};
|
||||
use strum::FromRepr;
|
||||
|
||||
use crate::game::wall::Wall;
|
||||
|
||||
// #[derive(Component)]
|
||||
// #[derive(relasionship(re))]
|
||||
|
|
|
|||
42
src/tui/console.rs
Normal file
42
src/tui/console.rs
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
use tui_logger::TuiLoggerWidget;
|
||||
|
||||
use bevy_ratatui::RatatuiContext;
|
||||
|
||||
use bevy::input::keyboard::Key;
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Default, States)]
|
||||
pub(crate) enum ConsoleState {
|
||||
Open,
|
||||
#[default]
|
||||
Closed,
|
||||
}
|
||||
|
||||
impl std::ops::Not for ConsoleState {
|
||||
type Output = Self;
|
||||
|
||||
fn not(self) -> Self::Output {
|
||||
match self {
|
||||
ConsoleState::Open => ConsoleState::Closed,
|
||||
ConsoleState::Closed => ConsoleState::Open,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn toggle_console(
|
||||
input: Res<ButtonInput<Key>>,
|
||||
curr_state: Res<State<ConsoleState>>,
|
||||
mut next_state: ResMut<NextState<ConsoleState>>,
|
||||
) {
|
||||
if input.just_pressed(Key::Character("`".into())) {
|
||||
trace!("toggled");
|
||||
next_state.set(!*curr_state.get());
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn draw_console(mut tui_ctx: ResMut<RatatuiContext>) -> Result {
|
||||
tui_ctx.draw(|frame| {
|
||||
frame.render_widget(TuiLoggerWidget::default(), frame.area());
|
||||
})?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
@ -1,11 +1,22 @@
|
|||
// use bevy::ecs::message::MessageReader;
|
||||
use bevy::app::AppExit;
|
||||
use bevy::input::keyboard::Key;
|
||||
use bevy::input::keyboard::{Key, KeyboardInput};
|
||||
use bevy::prelude::*;
|
||||
use bevy_ratatui::crossterm::event::KeyCode;
|
||||
|
||||
use crate::tui::console::ConsoleState;
|
||||
|
||||
pub(crate) fn keyboard_input_system(
|
||||
input: Option<Res<ButtonInput<KeyCode>>>,
|
||||
key_input: Option<Res<ButtonInput<Key>>>,
|
||||
// keycode_input: Option<Res<ButtonInput<KeyCode>>>,
|
||||
// key_input: Option<Res<ButtonInput<Key>>>,
|
||||
// mut next_state: ResMut<State<TuiState>>,
|
||||
mut keyboard_events: MessageReader<KeyboardInput>,
|
||||
) {
|
||||
// if let Some(keycode_input) = keycode_input {
|
||||
// if keycode_input.just_pressed(KeyCode::Backquote) {
|
||||
// // console_state.set;
|
||||
// }
|
||||
// }
|
||||
for keyboard_input in keyboard_events.read() {
|
||||
trace!("{:?}", keyboard_input);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
use std::time::Duration;
|
||||
|
||||
use bevy::{app::ScheduleRunnerPlugin, prelude::*};
|
||||
use bevy::{app::ScheduleRunnerPlugin, input::keyboard::Key, prelude::*, state::app::StatesPlugin};
|
||||
use bevy_ratatui::{RatatuiContext, RatatuiPlugins};
|
||||
|
||||
use jong::tiles::Tile;
|
||||
use tui_logger::TuiLoggerSmartWidget;
|
||||
|
||||
mod console;
|
||||
mod input;
|
||||
|
||||
pub struct RiichiTui;
|
||||
|
|
@ -13,7 +14,7 @@ impl Plugin for RiichiTui {
|
|||
fn build(&self, app: &mut App) {
|
||||
app.add_plugins((
|
||||
MinimalPlugins.set(ScheduleRunnerPlugin::run_loop(Duration::from_secs_f32(
|
||||
1. / 1.,
|
||||
1. / 60.,
|
||||
))),
|
||||
RatatuiPlugins {
|
||||
// enable_kitty_protocol: todo!(),
|
||||
|
|
@ -22,13 +23,25 @@ impl Plugin for RiichiTui {
|
|||
..Default::default()
|
||||
},
|
||||
))
|
||||
.add_plugins(StatesPlugin)
|
||||
.init_state::<console::ConsoleState>()
|
||||
.add_systems(Update, console::toggle_console)
|
||||
.add_systems(Update, console::draw_console.run_if(in_state(console::ConsoleState::Open)))
|
||||
.add_systems(Update, input::keyboard_input_system)
|
||||
.add_systems(Update, draw_system);
|
||||
.add_systems(Update, draw_system)
|
||||
// semicolon stopper
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn draw_system(mut context: ResMut<RatatuiContext>, query: Query<&Tile>) -> Result {
|
||||
context.draw(|frame| {
|
||||
// #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, States)]
|
||||
// enum TuiState {
|
||||
// MainMenu,
|
||||
// InGame,
|
||||
// }
|
||||
|
||||
pub(crate) fn draw_system(mut tui_ctx: ResMut<RatatuiContext>, query: Query<&Tile>) -> Result {
|
||||
tui_ctx.draw(|frame| {
|
||||
let text = ratatui::text::Text::raw("tiny riichi");
|
||||
frame.render_widget(text, frame.area());
|
||||
})?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue