117 lines
4.0 KiB
C++
117 lines
4.0 KiB
C++
|
#include "eadev.h"
|
||
|
|
||
|
#include "avs/automap.h"
|
||
|
#include "util/fileutils.h"
|
||
|
#include "overlay/imgui/extensions.h"
|
||
|
|
||
|
|
||
|
namespace overlay::windows {
|
||
|
|
||
|
EADevWindow::EADevWindow(SpiceOverlay *overlay) : Window(overlay) {
|
||
|
this->title = "EA-Dev";
|
||
|
this->init_size = ImVec2(
|
||
|
ImGui::GetIO().DisplaySize.x * 0.8f,
|
||
|
ImGui::GetIO().DisplaySize.y * 0.8f);
|
||
|
this->size_min = ImVec2(250, 200);
|
||
|
this->init_pos = ImVec2(
|
||
|
ImGui::GetIO().DisplaySize.x / 2 - this->init_size.x / 2,
|
||
|
ImGui::GetIO().DisplaySize.y / 2 - this->init_size.y / 2);
|
||
|
this->active = true;
|
||
|
|
||
|
// read existing automap contents from file
|
||
|
if (avs::automap::DUMP_FILENAME.length() > 0) {
|
||
|
auto contents = fileutils::text_read(avs::automap::DUMP_FILENAME);
|
||
|
if (contents.length() > 0) {
|
||
|
this->automap_hook(this, contents.c_str());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// add hook for receiving automap messages
|
||
|
avs::automap::hook_add(automap_hook, this);
|
||
|
}
|
||
|
|
||
|
EADevWindow::~EADevWindow() {
|
||
|
avs::automap::hook_remove(automap_hook, this);
|
||
|
}
|
||
|
|
||
|
void EADevWindow::build_content() {
|
||
|
|
||
|
// automap
|
||
|
ImGui::SetNextItemOpen(true, ImGuiCond_Once);
|
||
|
if (ImGui::CollapsingHeader("Automap")) {
|
||
|
|
||
|
// enable checkbox
|
||
|
if (ImGui::Checkbox("Enabled", &avs::automap::ENABLED)) {
|
||
|
if (avs::automap::ENABLED) {
|
||
|
avs::automap::enable();
|
||
|
} else {
|
||
|
avs::automap::disable();
|
||
|
}
|
||
|
}
|
||
|
ImGui::SameLine();
|
||
|
ImGui::HelpMarker("Enable this module.");
|
||
|
|
||
|
// dump checkbox
|
||
|
ImGui::Checkbox("Dump", &avs::automap::DUMP);
|
||
|
if (avs::automap::DUMP_FILENAME.length() > 0) {
|
||
|
ImGui::SameLine();
|
||
|
ImGui::Text("- %s", avs::automap::DUMP_FILENAME.c_str());
|
||
|
}
|
||
|
ImGui::SameLine();
|
||
|
ImGui::HelpMarker("Dump all destroyed props to file.");
|
||
|
|
||
|
// json checkbox
|
||
|
ImGui::Checkbox("JSON", &avs::automap::JSON);
|
||
|
ImGui::SameLine();
|
||
|
ImGui::HelpMarker("Output in JSON instead of XML.");
|
||
|
|
||
|
// patch checkbox
|
||
|
ImGui::Checkbox("Patch", &avs::automap::PATCH);
|
||
|
ImGui::SameLine();
|
||
|
ImGui::HelpMarker("Try to dynamically add all non-existing nodes which are being accessed. (WIP)");
|
||
|
|
||
|
// network checkbox
|
||
|
ImGui::Checkbox("Network Only", &avs::automap::RESTRICT_NETWORK);
|
||
|
ImGui::SameLine();
|
||
|
ImGui::HelpMarker("Restrict functionality to calls/responses.");
|
||
|
|
||
|
// autoscroll checkbox
|
||
|
ImGui::Checkbox("Auto-Scroll", &this->automap_autoscroll);
|
||
|
ImGui::SameLine();
|
||
|
ImGui::HelpMarker("Automatically scroll to bottom.");
|
||
|
|
||
|
// clear button
|
||
|
if (!this->automap_data.empty()) {
|
||
|
ImGui::SameLine();
|
||
|
if (ImGui::Button("Clear")) {
|
||
|
this->automap_data.clear();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// log view
|
||
|
ImGui::Separator();
|
||
|
ImGui::BeginChild("scrolling", ImVec2(0, 0), false, ImGuiWindowFlags_HorizontalScrollbar);
|
||
|
for (size_t i = 0; i < automap_data.size(); i++) {
|
||
|
ImGui::PushStyleColor(ImGuiCol_Text, (i % 2) == 0
|
||
|
? ImVec4(1.0f, 0.7f, 0.7f, 1.f)
|
||
|
: ImVec4(0.7f, 1.0f, 0.7f, 1.f));
|
||
|
ImGui::TextUnformatted(automap_data[i].c_str());
|
||
|
ImGui::PopStyleColor();
|
||
|
}
|
||
|
if (this->automap_scroll_to_bottom) {
|
||
|
this->automap_scroll_to_bottom = false;
|
||
|
ImGui::SetScrollHereY(1.f);
|
||
|
}
|
||
|
ImGui::EndChild();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void EADevWindow::automap_hook(void *user, const char *data) {
|
||
|
auto This = (EADevWindow*) user;
|
||
|
This->automap_data.emplace_back(std::string(data));
|
||
|
if (This->automap_autoscroll) {
|
||
|
This->automap_scroll_to_bottom = true;
|
||
|
}
|
||
|
}
|
||
|
}
|