Created
October 15, 2023 20:41
-
-
Save Yairama/f119f347b75d64fdfdab279a3a62616c to your computer and use it in GitHub Desktop.
Bevy and egui_tiles
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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