diff --git a/src/debug.rs b/src/debug.rs index 8ab1a90..0ce352f 100644 --- a/src/debug.rs +++ b/src/debug.rs @@ -12,14 +12,14 @@ use crate::{ res::Res, stringfmt::LengthDisp, texture_atlas::AtlasBundle, - tiles::tiledb_edit_ui::tiledb_edit_ui, + tiles::tiledb_edit_ui::TileDbEdit, }; #[derive(Default, Debug, Inspect)] pub struct DebugState { pub panel: bool, pub freecam: bool, - pub tiledb_edit: bool, + pub tiledb_edit: TileDbEdit, pub show_atlas: bool, pub console: Console, } @@ -120,9 +120,7 @@ pub(crate) fn do_debug_ui( if debug.panel { debug_panel_ui(debug, game, ctx, res, scale); } - if debug.tiledb_edit { - tiledb_edit_ui(ctx, &mut game.tile_db); - } + debug.tiledb_edit.ui(ctx, &mut game.tile_db); if debug.console.show { console_ui(ctx, debug, cmd); } diff --git a/src/tiles/tiledb_edit_ui.rs b/src/tiles/tiledb_edit_ui.rs index 6986541..4f4d52f 100644 --- a/src/tiles/tiledb_edit_ui.rs +++ b/src/tiles/tiledb_edit_ui.rs @@ -1,29 +1,55 @@ use std::fmt::Debug; -use egui_inspect::Inspect; +use egui_inspect::{derive::Inspect, Inspect}; use crate::{ graphics::{ScreenSc, ScreenVec}, math::TILE_SIZE, }; -use super::{Bg, Fg, Mid, TileDb, TileDef, TileLayer, DEFAULT_TILE_BB}; - -pub fn tiledb_edit_ui(ctx: &egui::Context, tile_db: &mut TileDb) { - egui::Window::new("Tiledb editor").show(ctx, |ui| { - ui.separator(); - egui::ScrollArea::vertical() - .max_height(400.0) - .show(ui, |ui| { - ui.heading("Bg"); - db_ui(&mut tile_db.bg, ui); - ui.heading("Mid"); - db_ui(&mut tile_db.mid, ui); - ui.heading("Fg"); - db_ui(&mut tile_db.fg, ui); - }); - }); +#[derive(Debug, Default, Inspect)] +pub struct TileDbEdit { + open: bool, + #[opaque] + layer: Layer, } +impl TileDbEdit { + pub(crate) fn ui(&mut self, ctx: &egui::Context, tile_db: &mut TileDb) { + if !self.open { + return; + } + egui::Window::new("Tiledb editor").show(ctx, |ui| { + ui.horizontal(|ui| { + ui.selectable_value(&mut self.layer, Layer::Bg, "Bg"); + ui.selectable_value(&mut self.layer, Layer::Mid, "Mid"); + ui.selectable_value(&mut self.layer, Layer::Fg, "Fg"); + }); + ui.separator(); + egui::ScrollArea::vertical() + .max_height(400.0) + .show(ui, |ui| match self.layer { + Layer::Bg => db_ui(&mut tile_db.bg, ui), + Layer::Fg => db_ui(&mut tile_db.fg, ui), + Layer::Mid => db_ui(&mut tile_db.mid, ui), + }); + }); + } +} + +#[derive(Debug, PartialEq, Eq)] +enum Layer { + Bg, + Fg, + Mid, +} + +impl Default for Layer { + fn default() -> Self { + Self::Bg + } +} + +use super::{Bg, Fg, Mid, TileDb, TileDef, TileLayer, DEFAULT_TILE_BB}; trait SpecialUi { fn special_ui(&mut self, ui: &mut egui::Ui); @@ -33,14 +59,16 @@ impl SpecialUi for TileDef { fn special_ui(&mut self, ui: &mut egui::Ui) { match &mut self.layer.bb { Some(bb) => { - ui.label("x"); - ui.add(egui::DragValue::new(&mut bb.x)); - ui.label("y"); - ui.add(egui::DragValue::new(&mut bb.y)); - ui.label("w"); - ui.add(egui::DragValue::new(&mut bb.w)); - ui.label("h"); - ui.add(egui::DragValue::new(&mut bb.h)); + ui.horizontal(|ui| { + ui.label("x"); + ui.add(egui::DragValue::new(&mut bb.x)); + ui.label("y"); + ui.add(egui::DragValue::new(&mut bb.y)); + ui.label("w"); + ui.add(egui::DragValue::new(&mut bb.w)); + ui.label("h"); + ui.add(egui::DragValue::new(&mut bb.h)); + }); } None => { if ui.button("Insert bb").clicked() { @@ -48,6 +76,7 @@ impl SpecialUi for TileDef { } } } + ui.checkbox(&mut self.layer.platform, "platform"); } } @@ -66,12 +95,15 @@ where { for (i, def) in db.iter_mut().enumerate() { ui.label(i.to_string()); + ui.text_edit_singleline(&mut def.graphic_name); match &mut def.light { Some(light) => { - ui.label("x"); - ui.add(egui::DragValue::new(&mut light.x)); - ui.label("y"); - ui.add(egui::DragValue::new(&mut light.y)); + ui.horizontal(|ui| { + ui.label("x"); + ui.add(egui::DragValue::new(&mut light.x)); + ui.label("y"); + ui.add(egui::DragValue::new(&mut light.y)); + }); } None => { if ui.button("Insert light emit").clicked() { @@ -83,8 +115,8 @@ where } } def.special_ui(ui); + ui.separator(); } - ui.separator(); if ui.button("Add new default").clicked() { db.push(Default::default()); } diff --git a/tiles.dat b/tiles.dat index 6b55e19..b3e41da 100644 Binary files a/tiles.dat and b/tiles.dat differ