1 unstable release
0.15.0 | Dec 5, 2024 |
---|
#901 in Game dev
139 downloads per month
81KB
84 lines
Bevy Term
Easy terminal event handling and rendering with Bevy!
Description
This crate primarily provides the TerminalPlugin
for Bevy.
It allows for easily rendering to the terminal and handling terminal events.
Features
- Work In Progress
- ...
Usage
Check out the examples directory!
Add the TerminalPlugin
fn main() -> AppExit {
App::new()
.add_plugins(TerminalPlugin)
// ...
.run()
}
Register a system for rendering to the terminal
fn main() -> AppExit {
App::new()
.add_systems(PostUpdate, render)
// ...
.run()
}
fn render(mut terminal: ResMut<Terminal>) {
terminal
.0
.draw(|frame| {
let chunks = Layout::default()
.direction(Direction::Vertical)
.constraints([Constraint::Percentage(49), Constraint::Min(1)].as_ref())
.split(frame.area());
frame.render_widget(
Paragraph::new("Hellow World!\nPress `ESC` or `C-d` to exit.")
.alignment(Alignment::Center),
chunks[1],
);
})
.unwrap();
}
(Optional) Register a system for handling terminal events
fn main() -> AppExit {
App::new()
.add_systems(PreUpdate, handler)
// ...
.run()
}
fn handler(
mut terminal_events: EventReader<bevy_term::Event>,
mut tui_state: ResMut<bevy_term::State>,
) {
for terminal_event in terminal_events.read() {
if let Event::Key(key_event) = terminal_event.0 {
if key_event.code == KeyCode::Esc {
*tui_state = bevy_term::State::Exit
}
}
}
}
Dependencies
~16–27MB
~398K SLoC