mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-02 08:35:08 -04:00
09432ee7f4
* Initial Linux/GCC support commit * Add instructins for linux in the README * apply suggestions by @Erotemic and @Emill * Fix python 3.10 symlink line * Fix func_80041E80 type mismatch (#3) Type mismatch functions.h:664 * Makefile: clean OTRExporter/libultraship/ZAPDTR with distclean and fix CXX_FILES * Makefile: find C/CXX_FILES automatically * Makefile: remove ugly conditions in find commands * cleanup _MSC_VER usage * fix Windows build * cleanup extraction scripts * fix Windows build * Fix Windows path separator issue * fix rumble support for linux * use glew-cmake in dockerfile * add pulseaudio backend * fix ZAPDTR linkage * Check for "soh.elf" in directory (#6) hide second button if `soh.exe` or `soh.elf` is present * Fix hardcoded segment addresses (#5) * fix condition * hack lus -> soh dep for ZAPDTR Co-authored-by: sholdee <102821812+sholdee@users.noreply.github.com> Co-authored-by: qurious-pixel <62252937+qurious-pixel@users.noreply.github.com> Co-authored-by: GaryOderNichts <12049776+GaryOderNichts@users.noreply.github.com>
81 lines
2.2 KiB
C++
81 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#include <map>
|
|
#include <vector>
|
|
#include <string>
|
|
#include <functional>
|
|
|
|
#include "Lib/ImGui/imgui.h"
|
|
|
|
#define LOG(msg, ...) SohImGui::console->Append("Main", Priority::LOG_LVL, msg, ##__VA_ARGS__)
|
|
#define INFO(msg, ...) SohImGui::console->Append("Main", Priority::INFO_LVL, msg, ##__VA_ARGS__)
|
|
#define WARNING(msg, ...) SohImGui::console->Append("Main", Priority::WARNING_LVL, msg, ##__VA_ARGS__)
|
|
#define ERROR(msg, ...) SohImGui::console->Append("Main", Priority::ERROR_LVL, msg, ##__VA_ARGS__)
|
|
#define CMD_SUCCESS true
|
|
#define CMD_FAILED false
|
|
#define MAX_BUFFER_SIZE 255
|
|
#define NULLSTR "None"
|
|
|
|
typedef std::function<bool(std::vector<std::string> args)> CommandHandler;
|
|
|
|
enum Priority {
|
|
INFO_LVL,
|
|
LOG_LVL,
|
|
WARNING_LVL,
|
|
ERROR_LVL
|
|
};
|
|
|
|
enum class ArgumentType {
|
|
TEXT, NUMBER, PLAYER_POS, PLAYER_ROT
|
|
};
|
|
|
|
struct CommandArgument {
|
|
std::string info;
|
|
ArgumentType type = ArgumentType::NUMBER;
|
|
bool optional = false;
|
|
};
|
|
|
|
struct CommandEntry {
|
|
CommandHandler handler;
|
|
std::string description;
|
|
std::vector<CommandArgument> arguments;
|
|
};
|
|
|
|
struct ConsoleLine {
|
|
std::string text;
|
|
Priority priority = Priority::INFO_LVL;
|
|
std::string channel = "Main";
|
|
};
|
|
|
|
class Console {
|
|
int selectedId = -1;
|
|
std::vector<int> selectedEntries;
|
|
std::string filter;
|
|
std::string level_filter = NULLSTR;
|
|
std::vector<std::string> log_channels = { "Main", "SoH Logging"};
|
|
std::vector<std::string> priority_filters = { "None", "Info", "Log", "Warning", "Error" };
|
|
std::vector<ImVec4> priority_colors = {
|
|
ImVec4(1.0f, 1.0f, 1.0f, 1.0f),
|
|
ImVec4(0.2f, 1.0f, 0.2f, 1.0f),
|
|
ImVec4(0.9f, 0.8f, 0.4f, 0.01f),
|
|
ImVec4(1.0f, 0.2f, 0.2f, 1.0f)
|
|
};
|
|
public:
|
|
std::map<std::string, std::vector<ConsoleLine>> Log;
|
|
std::map<std::string, CommandEntry> Commands;
|
|
std::vector<std::string> Autocomplete;
|
|
std::vector<std::string> History;
|
|
std::string CMDHint = NULLSTR;
|
|
char* FilterBuffer = nullptr;
|
|
char* InputBuffer = nullptr;
|
|
bool OpenAutocomplete = false;
|
|
int HistoryIndex = -1;
|
|
std::string selected_channel = "Main";
|
|
bool opened = false;
|
|
void Init();
|
|
void Update();
|
|
void Draw();
|
|
void Append(const std::string& channel, Priority priority, const char* fmt, ...) IM_FMTARGS(4);
|
|
void Dispatch(const std::string& line);
|
|
static int CallbackStub(ImGuiInputTextCallbackData* data);
|
|
}; |