use eframe::epi::Frame; use eframe::egui::CtxRef; use peachy::{Colour, Config, Game, Palette}; struct EditorState { game: Option, } impl epi::App for EditorState { fn update(&mut self, ctx: &CtxRef, frame: &mut Frame<'_>) { egui::TopPanel::top("top_panel").show(ctx, |ui| { egui::menu::bar(ui, |ui| { egui::menu::menu(ui, "File", |ui| { if ui.button("Quit").clicked() { frame.quit(); } }); }); }); egui::SidePanel::left("side_panel", 200.0).show(ctx, |ui| { ui.heading("Side Panel"); ui.horizontal(|ui| { ui.label("Blah blah…"); }); // if let Some(game) = &mut self.game { // // todo colour picker // // todo tool picker // // todo collapsing panels for different things? buttons to launch browse windows? // } }); egui::CentralPanel::default().show(ctx, |ui| { // todo if game is none, add a "load project" window? if let Some(game) = &mut self.game { egui::Window::new("palettes") .default_width(200.0) .collapsible(false) .show(ctx, |ui| { for palette in game.palettes.iter_mut() { ui.columns(2, |columns | { columns[0].label(&palette.name); if columns[1].button("edit").clicked() { egui::Window::new(&palette.name) .default_width(200.0) .collapsible(true) .show(ctx, |ui| { for (i, colour) in palette.colours.iter().enumerate() { ui.columns(2, |row| { // todo edit each colour... this is broken row[0].color_edit_button_rgb(&mut [ colour.red as f32, colour.green as f32, colour.blue as f32 ]); if row[1].button("delete").clicked() { // can't alter palettes while iterating... what to do? // palette.colours.remove(i); } }); } // todo "add colour" button }); } }); } }); } }); } fn name(&self) -> &str { "peachy" } } fn main() { // testing… let state = EditorState { game: Some(Game { config: Config { name: Some("example".into()), width: 16, height: 9, tick: 400, starting_room: None, version: (0, 1) }, entities: vec![], images: vec![], palettes: vec![ Palette { name: "example palette".into(), colours: vec![ Colour { red: 79, green: 30, blue: 69 }, Colour { red: 150, green: 48, blue: 87 }, Colour { red: 215, green: 68, blue: 89 }, Colour { red: 235, green: 112, blue: 96 }, Colour { red: 255, green: 179, blue: 131 }, Colour { red: 255, green: 255, blue: 255 }, Colour { red: 127, green: 227, blue: 187 }, Colour { red: 92, green: 187, blue: 196 }, Colour { red: 69, green: 126, blue: 163 }, Colour { red: 56, green: 66, blue: 118 }, Colour { red: 50, green: 36, blue: 81 } ]}, ], scenes: vec![], tiles: vec![], music: vec![] }), }; let native_options = eframe::NativeOptions::default(); eframe::run_native(Box::new(state), native_options); }