Files
peachy/src/bin/editor.rs

121 lines
4.6 KiB
Rust

use eframe::epi::Frame;
use eframe::egui::CtxRef;
use peachy::{Colour, Config, Game, Palette};
struct EditorState {
game: Option<peachy::Game>,
}
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);
}