Skip to content

Instantly share code, notes, and snippets.

@Yairama
Created October 15, 2023 20:41
Show Gist options
  • Save Yairama/f119f347b75d64fdfdab279a3a62616c to your computer and use it in GitHub Desktop.
Save Yairama/f119f347b75d64fdfdab279a3a62616c to your computer and use it in GitHub Desktop.
Bevy and egui_tiles
use bevy::prelude::*;
use bevy::window::PrimaryWindow;
use bevy_inspector_egui::{
bevy_egui::{EguiPlugin, EguiContexts}
};
use egui;
fn main() {
App::new()
.insert_resource(ClearColor(Color::rgb(100.0/255.0, 200.0/255.0, 150.0/255.0)))
.insert_resource(Msaa::Sample4)
.add_plugins(DefaultPlugins.set(WindowPlugin{
primary_window: Some(Window{
title: "Bevy and egui_tiles".into(),
..default()
}),
..default()
}))
.add_plugins(EguiPlugin)
.add_systems(Update, bevy::window::close_on_esc)
.add_systems(Startup, simple_setup)
.add_systems(Update, ui_example_system)
.run();
}
struct Pane {
nr: usize,
}
struct TreeBehavior {}
impl egui_tiles::Behavior<Pane> for TreeBehavior {
fn tab_title_for_pane(&mut self, pane: &Pane) -> egui::WidgetText {
format!("Pane {}", pane.nr).into()
}
fn pane_ui(
&mut self,
ui: &mut egui::Ui,
_tile_id: egui_tiles::TileId,
pane: &mut Pane,
) -> egui_tiles::UiResponse {
// Give each pane a unique color:
let color = egui::epaint::Hsva::new(0.103 * pane.nr as f32, 0.5, 0.5, 1.0);
ui.painter().rect_filled(ui.max_rect(), 0.0, color);
ui.label(format!("The contents of pane {}.", pane.nr));
// You can make your pane draggable like so:
if ui
.add(egui::Button::new("Drag me!").sense(egui::Sense::drag()))
.drag_started()
{
egui_tiles::UiResponse::DragStarted
} else {
egui_tiles::UiResponse::None
}
}
}
fn create_tree() -> egui_tiles::Tree<Pane> {
let mut next_view_nr = 0;
let mut gen_pane = || {
let pane = Pane { nr: next_view_nr };
next_view_nr += 1;
pane
};
let mut tiles = egui_tiles::Tiles::default();
let mut tabs = vec![];
tabs.push({
let children = (0..7).map(|_| tiles.insert_pane(gen_pane())).collect();
tiles.insert_horizontal_tile(children)
});
tabs.push({
let cells = (0..11).map(|_| tiles.insert_pane(gen_pane())).collect();
tiles.insert_grid_tile(cells)
});
tabs.push(tiles.insert_pane(gen_pane()));
let root = tiles.insert_tab_tile(tabs);
egui_tiles::Tree::new(root, tiles)
}
fn ui_example_system(mut contexts: EguiContexts) {
let mut tree = create_tree();
egui::CentralPanel::default().show(contexts.ctx_mut(), |ui| {
let mut behavior = TreeBehavior {};
tree.ui(&mut behavior, ui);
});
}
fn simple_setup(mut commands: Commands){
commands.spawn((
Camera3dBundle::default(),
));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment