Make tile db edit ui more bearable to use

This commit is contained in:
crumblingstatue 2023-04-17 14:10:04 +02:00
parent 60616cf3bb
commit 5a225c1402
3 changed files with 65 additions and 35 deletions

View file

@ -12,14 +12,14 @@ use crate::{
res::Res, res::Res,
stringfmt::LengthDisp, stringfmt::LengthDisp,
texture_atlas::AtlasBundle, texture_atlas::AtlasBundle,
tiles::tiledb_edit_ui::tiledb_edit_ui, tiles::tiledb_edit_ui::TileDbEdit,
}; };
#[derive(Default, Debug, Inspect)] #[derive(Default, Debug, Inspect)]
pub struct DebugState { pub struct DebugState {
pub panel: bool, pub panel: bool,
pub freecam: bool, pub freecam: bool,
pub tiledb_edit: bool, pub tiledb_edit: TileDbEdit,
pub show_atlas: bool, pub show_atlas: bool,
pub console: Console, pub console: Console,
} }
@ -120,9 +120,7 @@ pub(crate) fn do_debug_ui(
if debug.panel { if debug.panel {
debug_panel_ui(debug, game, ctx, res, scale); debug_panel_ui(debug, game, ctx, res, scale);
} }
if debug.tiledb_edit { debug.tiledb_edit.ui(ctx, &mut game.tile_db);
tiledb_edit_ui(ctx, &mut game.tile_db);
}
if debug.console.show { if debug.console.show {
console_ui(ctx, debug, cmd); console_ui(ctx, debug, cmd);
} }

View file

@ -1,29 +1,55 @@
use std::fmt::Debug; use std::fmt::Debug;
use egui_inspect::Inspect; use egui_inspect::{derive::Inspect, Inspect};
use crate::{ use crate::{
graphics::{ScreenSc, ScreenVec}, graphics::{ScreenSc, ScreenVec},
math::TILE_SIZE, math::TILE_SIZE,
}; };
use super::{Bg, Fg, Mid, TileDb, TileDef, TileLayer, DEFAULT_TILE_BB}; #[derive(Debug, Default, Inspect)]
pub struct TileDbEdit {
pub fn tiledb_edit_ui(ctx: &egui::Context, tile_db: &mut TileDb) { 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| { 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(); ui.separator();
egui::ScrollArea::vertical() egui::ScrollArea::vertical()
.max_height(400.0) .max_height(400.0)
.show(ui, |ui| { .show(ui, |ui| match self.layer {
ui.heading("Bg"); Layer::Bg => db_ui(&mut tile_db.bg, ui),
db_ui(&mut tile_db.bg, ui); Layer::Fg => db_ui(&mut tile_db.fg, ui),
ui.heading("Mid"); Layer::Mid => db_ui(&mut tile_db.mid, ui),
db_ui(&mut tile_db.mid, ui);
ui.heading("Fg");
db_ui(&mut tile_db.fg, 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 { trait SpecialUi {
fn special_ui(&mut self, ui: &mut egui::Ui); fn special_ui(&mut self, ui: &mut egui::Ui);
@ -33,6 +59,7 @@ impl SpecialUi for TileDef<Mid> {
fn special_ui(&mut self, ui: &mut egui::Ui) { fn special_ui(&mut self, ui: &mut egui::Ui) {
match &mut self.layer.bb { match &mut self.layer.bb {
Some(bb) => { Some(bb) => {
ui.horizontal(|ui| {
ui.label("x"); ui.label("x");
ui.add(egui::DragValue::new(&mut bb.x)); ui.add(egui::DragValue::new(&mut bb.x));
ui.label("y"); ui.label("y");
@ -41,6 +68,7 @@ impl SpecialUi for TileDef<Mid> {
ui.add(egui::DragValue::new(&mut bb.w)); ui.add(egui::DragValue::new(&mut bb.w));
ui.label("h"); ui.label("h");
ui.add(egui::DragValue::new(&mut bb.h)); ui.add(egui::DragValue::new(&mut bb.h));
});
} }
None => { None => {
if ui.button("Insert bb").clicked() { if ui.button("Insert bb").clicked() {
@ -48,6 +76,7 @@ impl SpecialUi for TileDef<Mid> {
} }
} }
} }
ui.checkbox(&mut self.layer.platform, "platform");
} }
} }
@ -66,12 +95,15 @@ where
{ {
for (i, def) in db.iter_mut().enumerate() { for (i, def) in db.iter_mut().enumerate() {
ui.label(i.to_string()); ui.label(i.to_string());
ui.text_edit_singleline(&mut def.graphic_name);
match &mut def.light { match &mut def.light {
Some(light) => { Some(light) => {
ui.horizontal(|ui| {
ui.label("x"); ui.label("x");
ui.add(egui::DragValue::new(&mut light.x)); ui.add(egui::DragValue::new(&mut light.x));
ui.label("y"); ui.label("y");
ui.add(egui::DragValue::new(&mut light.y)); ui.add(egui::DragValue::new(&mut light.y));
});
} }
None => { None => {
if ui.button("Insert light emit").clicked() { if ui.button("Insert light emit").clicked() {
@ -83,8 +115,8 @@ where
} }
} }
def.special_ui(ui); def.special_ui(ui);
}
ui.separator(); ui.separator();
}
if ui.button("Add new default").clicked() { if ui.button("Add new default").clicked() {
db.push(Default::default()); db.push(Default::default());
} }

BIN
tiles.dat

Binary file not shown.