From 4fb9823d09230250259f79acaf415db237541887 Mon Sep 17 00:00:00 2001 From: Yimura Date: Sat, 9 Jan 2021 16:57:04 +0100 Subject: [PATCH] feat(TabSettings): Added option to send custom events --- BigBaseV2/src/gui/tab_bar/tab_settings.cpp | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/BigBaseV2/src/gui/tab_bar/tab_settings.cpp b/BigBaseV2/src/gui/tab_bar/tab_settings.cpp index 8fa837f6..893255e8 100644 --- a/BigBaseV2/src/gui/tab_bar/tab_settings.cpp +++ b/BigBaseV2/src/gui/tab_bar/tab_settings.cpp @@ -1,4 +1,5 @@ #include "tab_bar.hpp" +#include "pointers.hpp" namespace big { @@ -16,6 +17,63 @@ namespace big if (ImGui::Checkbox("Script Events", logging["script_events"].get())) g_settings.save(); + ImGui::Separator(); + + static const uint8_t max_count = 64; + static char str_args[max_count][38]; + static int arg_count = 0; + static Player target = 0; + static char* selected; + + ImGui::Text("Trigger Script Event:"); + + ImGui::Text("Target:"); + + if (ImGui::BeginCombo("##player_target", selected)) + { + for (int i = 0; i < 32; i++) + { + bool is_selected = (g_players[i].id == target); + if (g_players[i].is_online && ImGui::Selectable(g_players[i].name, is_selected)) + { + selected = g_players[i].name; + target = g_players[i].id; + } + if (is_selected) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } + + ImGui::SliderInt(": Argument Count", &arg_count, 0, max_count); + + for (int i = 0; i < arg_count; i++) + { + char label[16]; + + sprintf(label, ": arg #%d", i); + + ImGui::InputText(label, str_args[i], sizeof(str_args[i])); + } + + if (ImGui::Button("Send Event")) + { + QUEUE_JOB_BEGIN_CLAUSE(=) + { + + int64_t* event_args = new int64_t[arg_count]; + + for (int i = 0; i < arg_count; i++) + { + event_args[i] = strtoll(str_args[i], NULL, 10); + + script::get_current()->yield(); + } + + g_pointers->m_trigger_script_event(true, event_args, arg_count, 1 << target); + }QUEUE_JOB_END_CLAUSE + } + ImGui::TreePop(); }