diff options
Diffstat (limited to 'editor.cpp')
-rw-r--r-- | editor.cpp | 78 |
1 files changed, 70 insertions, 8 deletions
@@ -8,12 +8,14 @@ static struct { UI* ui; UI::Toolbar* toolbar; - UI::Button* mat_btn; - UI::Modal* mat_win; + UI::Button* mat_btn, * ent_btn; + UI::Modal* mat_win, * ent_win; UI::Label* mat_name; UI::Slider* metalness_input; UI::Slider* roughness_input; UI::Slider* ao_input; + UI::Label* ent_handle, * ent_index, * ent_version, * ent_mask; + World* world; Entity_Id selected; Model_Instance* selected_inst; int selected_mesh; @@ -48,6 +50,21 @@ static void setup_mat_edit() { } } +void setup_ent_debug() { + if (editor.selected) { + int ind = entity_index(editor.selected); + editor.ent_handle->set_hex(editor.selected); + editor.ent_version->set_int(entity_version(editor.selected)); + editor.ent_index->set_int(ind); + editor.ent_mask->set_hex(editor.world->masks[ind]); + } else { + editor.ent_handle->set_text("<null>"); + editor.ent_version->set_text("<null>"); + editor.ent_index->set_text("<null>"); + editor.ent_mask->set_text("<null>"); + } +} + static int mat_btn_handler(UI::Element* e, const UI::Message& m) { (void)e; if (m.type == UI::Message::Type::click) { @@ -114,26 +131,68 @@ static int mat_btn_handler(UI::Element* e, const UI::Message& m) { return 0; } -void init_editor(UI* ui) { +static int ent_win_handler(UI::Element* e, const UI::Message& m) { + (void)e; + if (m.type == UI::Message::Type::destroy) { + editor.ent_btn->enable(); + editor.ent_win = 0; + } + return 0; +} + +static int ent_btn_handler(UI::Element* e, const UI::Message& m) { + if (m.type == UI::Message::Type::click) { + auto ui = editor.ui; + editor.ent_win = ui->create_element<UI::Modal>( + editor.ui->root, + "Entity Debugger" + ); + editor.ent_win->handler = ent_win_handler; + editor.ent_btn->disable(); + int rows[] = { 100, 50, 0 }; + auto tab = ui->create_element<UI::Table>( + editor.ent_win->contents, + rows + ); + ui->create_element<UI::Label>(tab, "Handle"); + editor.ent_handle = ui->create_element<UI::Label>(tab, ""); + ui->create_element<UI::Label>(tab, "Index"); + editor.ent_index = ui->create_element<UI::Label>(tab, ""); + ui->create_element<UI::Label>(tab, "Version"); + editor.ent_version = ui->create_element<UI::Label>(tab, ""); + ui->create_element<UI::Label>(tab, "Mask"); + editor.ent_mask = ui->create_element<UI::Label>(tab, ""); + setup_ent_debug(); + } + return 0; +} + +void init_editor(UI* ui, World* world) { editor.ui = ui; editor.toolbar = ui->create_element<UI::Toolbar>(ui->root); editor.mat_btn = ui->create_element<UI::Button>( editor.toolbar, "Edit Material" ); - editor.mat_win = 0; editor.mat_btn->handler = mat_btn_handler; + editor.ent_btn = ui->create_element<UI::Button>( + editor.toolbar, + "Entity Debugger" + ); + editor.ent_btn->handler = ent_btn_handler; + editor.mat_win = 0; + editor.ent_win = 0; + editor.world = world; } void deinit_editor() { - } -void editor_on_select(World& w, Entity_Id e, int m) { +void editor_on_select(Entity_Id e, int m) { if (!editor.ui->hovered) { editor.selected = e; - if (e && w.has<C_Model>(e)) { - auto& cm = w.get<C_Model>(e); + if (e && editor.world->has<C_Model>(e)) { + auto& cm = editor.world->get<C_Model>(e); editor.selected_inst = cm.i; editor.selected_mesh = m; } else { @@ -143,6 +202,9 @@ void editor_on_select(World& w, Entity_Id e, int m) { if (editor.mat_win) { setup_mat_edit(); } + if (editor.ent_win) { + setup_ent_debug(); + } } } |