mirror of
https://github.com/MadeOfJelly/MushMachine.git
synced 2025-06-19 19:26:36 +02:00
add a quick n dirty json editor imgui widget
This commit is contained in:
202
framework/imgui/test/json_editor_test.cpp
Normal file
202
framework/imgui/test/json_editor_test.cpp
Normal file
@ -0,0 +1,202 @@
|
||||
#include "nlohmann/json_fwd.hpp"
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <mm/engine.hpp>
|
||||
|
||||
// services
|
||||
#include <mm/services/sdl_service.hpp>
|
||||
#include <mm/services/filesystem.hpp>
|
||||
#include <mm/services/opengl_renderer.hpp>
|
||||
#include <mm/services/imgui_s.hpp>
|
||||
|
||||
#include <mm/opengl/render_tasks/imgui.hpp>
|
||||
|
||||
#include <imgui/imgui.h>
|
||||
|
||||
#include <mm/imgui/widgets/imgui_json_editor.hpp>
|
||||
|
||||
const char* argv0;
|
||||
|
||||
TEST(imgui_json_editor, basic) {
|
||||
MM::Engine engine;
|
||||
|
||||
auto& sdl_ss = engine.addService<MM::Services::SDLService>();
|
||||
ASSERT_TRUE(engine.enableService<MM::Services::SDLService>());
|
||||
|
||||
sdl_ss.createGLWindow("imgui_json_editor_test", 1280, 720);
|
||||
|
||||
engine.addService<MM::Services::FilesystemService>(argv0, "imgui_json_editor_test");
|
||||
ASSERT_TRUE(engine.enableService<MM::Services::FilesystemService>());
|
||||
|
||||
engine.addService<MM::Services::ImGuiService>();
|
||||
ASSERT_TRUE(engine.enableService<MM::Services::ImGuiService>());
|
||||
|
||||
auto& rs = engine.addService<MM::Services::OpenGLRenderer>();
|
||||
ASSERT_TRUE(engine.enableService<MM::Services::OpenGLRenderer>());
|
||||
|
||||
rs.addRenderTask<MM::OpenGL::RenderTasks::ImGuiRT>(engine);
|
||||
|
||||
class TestWindow : public MM::Services::Service {
|
||||
public:
|
||||
const char* name(void) override { return "TestWindow"; }
|
||||
|
||||
bool enable(MM::Engine&, std::vector<MM::UpdateStrategies::TaskInfo>& task_array) override {
|
||||
task_array.push_back(
|
||||
MM::UpdateStrategies::TaskInfo{"testwindow"}
|
||||
.fn([this](MM::Engine&) { render(); })
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
void disable(MM::Engine&) override {}
|
||||
|
||||
void render(void) {
|
||||
if (ImGui::Begin("test window")) {
|
||||
MM::ImGuiWidgets::JsonViewerSimple("test", _j);
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
MM::ImGuiWidgets::JsonViewerTree("test", _j);
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
try {
|
||||
MM::ImGuiWidgets::JsonEditor("test", _j);
|
||||
//using tmp_type = decltype(_j.items().begin());
|
||||
//tmp_type item{_j.begin()};
|
||||
//item.key();
|
||||
} catch(...) {
|
||||
assert(false);
|
||||
}
|
||||
|
||||
_j.type();
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
const auto string = _j.dump(4);
|
||||
ImGui::TextUnformatted(string.c_str());
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
//nlohmann::ordered_json _j{
|
||||
//true,
|
||||
//"tseta",
|
||||
//1.f,
|
||||
//1,
|
||||
//1u,
|
||||
//nullptr,
|
||||
//nlohmann::ordered_json::object({{"hi", 10}})
|
||||
//};
|
||||
|
||||
//nlohmann::ordered_json _j = R"({"hi": 12})"_json;
|
||||
//nlohmann::ordered_json _j = nlohmann::ordered_json::object({{"hi", 10}});
|
||||
nlohmann::ordered_json _j = R"(
|
||||
{
|
||||
"data": {
|
||||
"cooldown": 6.0,
|
||||
"igs": [
|
||||
{
|
||||
"data": {
|
||||
"aoe_color": [
|
||||
0.2980392277240753,
|
||||
0.23137255012989044,
|
||||
0.1921568661928177,
|
||||
0.7764706015586853
|
||||
],
|
||||
"interactions": [
|
||||
{
|
||||
"data": {
|
||||
"atb": {
|
||||
"ag": {
|
||||
"base": -0.25,
|
||||
"per_slvl": -0.0375
|
||||
},
|
||||
"en": {
|
||||
"base": -0.35,
|
||||
"per_slvl": -0.0525
|
||||
},
|
||||
"in": {
|
||||
"base": -0.35,
|
||||
"per_slvl": -0.0525
|
||||
},
|
||||
"ne": null,
|
||||
"pe": null
|
||||
}
|
||||
},
|
||||
"type": "interaction::hp_dst"
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"buffs": [
|
||||
{
|
||||
"atb": {
|
||||
"ag": {
|
||||
"base": -0.15,
|
||||
"per_slvl": -0.0075
|
||||
},
|
||||
"in": null,
|
||||
"ne": {
|
||||
"base": -0.05,
|
||||
"per_slvl": -0.0025
|
||||
},
|
||||
"pe": null
|
||||
},
|
||||
"duration": {
|
||||
"base": 2.0,
|
||||
"per_slvl": 0.0
|
||||
},
|
||||
"type": "FAC"
|
||||
}
|
||||
]
|
||||
},
|
||||
"type": "interaction::debuffs_dst"
|
||||
}
|
||||
],
|
||||
"offset": 0.5,
|
||||
"pierce": true,
|
||||
"pierce_walls": false,
|
||||
"radius": 0.75,
|
||||
"target_own_team": false
|
||||
},
|
||||
"type": "ig::aoe"
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"interactions": [
|
||||
{
|
||||
"data": {
|
||||
"trauma_add": 0.04
|
||||
},
|
||||
"type": "interaction::camera_trauma_dst"
|
||||
}
|
||||
],
|
||||
"interactions_via": []
|
||||
},
|
||||
"type": "ig::self"
|
||||
}
|
||||
]
|
||||
},
|
||||
"type": "spell::one_shot"
|
||||
}
|
||||
)"_json;
|
||||
};
|
||||
|
||||
engine.addService<TestWindow>(); // engine dtr ?????????????????
|
||||
|
||||
ASSERT_TRUE(engine.enableService<TestWindow>());
|
||||
|
||||
engine.run();
|
||||
|
||||
sdl_ss.destroyWindow();
|
||||
engine.cleanup();
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
argv0 = argv[0];
|
||||
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
|
Reference in New Issue
Block a user