fix imgui, add dice tool and p2prng (non functional yet)
Some checks failed
ContinuousDelivery / windows (push) Waiting to run
ContinuousDelivery / release (push) Blocked by required conditions
ContinuousIntegration / macos (push) Waiting to run
ContinuousIntegration / windows (push) Waiting to run
ContinuousDelivery / linux-ubuntu (push) Failing after 3m21s
ContinuousIntegration / linux (push) Successful in 2m41s
ContinuousIntegration / android (push) Failing after 5m26s
Some checks failed
ContinuousDelivery / windows (push) Waiting to run
ContinuousDelivery / release (push) Blocked by required conditions
ContinuousIntegration / macos (push) Waiting to run
ContinuousIntegration / windows (push) Waiting to run
ContinuousDelivery / linux-ubuntu (push) Failing after 3m21s
ContinuousIntegration / linux (push) Successful in 2m41s
ContinuousIntegration / android (push) Failing after 5m26s
This commit is contained in:
parent
3d9cdf581e
commit
b51414f049
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -59,3 +59,6 @@
|
|||||||
[submodule "external/solanaceae_message_fragment_store"]
|
[submodule "external/solanaceae_message_fragment_store"]
|
||||||
path = external/solanaceae_message_fragment_store
|
path = external/solanaceae_message_fragment_store
|
||||||
url = https://github.com/Green-Sky/solanaceae_message_fragment_store.git
|
url = https://github.com/Green-Sky/solanaceae_message_fragment_store.git
|
||||||
|
[submodule "external/solanaceae_tox_p2prng"]
|
||||||
|
path = external/solanaceae_tox_p2prng
|
||||||
|
url = https://github.com/Green-Sky/solanaceae_tox_p2prng.git
|
||||||
|
3
external/CMakeLists.txt
vendored
3
external/CMakeLists.txt
vendored
@ -26,6 +26,9 @@ add_subdirectory(./solanaceae_tox)
|
|||||||
set(SOLANACEAE_TOX_UPNP_BUILD_PLUGINS ON CACHE BOOL "")
|
set(SOLANACEAE_TOX_UPNP_BUILD_PLUGINS ON CACHE BOOL "")
|
||||||
add_subdirectory(./solanaceae_tox_upnp)
|
add_subdirectory(./solanaceae_tox_upnp)
|
||||||
|
|
||||||
|
set(SOLANACEAE_TOX_P2PRNG_BUILD_PLUGINS ON CACHE BOOL "")
|
||||||
|
add_subdirectory(./solanaceae_tox_p2prng)
|
||||||
|
|
||||||
set(SOLANACEAE_NGCFT1_SHA1_BUILD_TESTING ${SOLANACEAE_ECOSYSTEM_BUILD_TESTING} CACHE BOOL "")
|
set(SOLANACEAE_NGCFT1_SHA1_BUILD_TESTING ${SOLANACEAE_ECOSYSTEM_BUILD_TESTING} CACHE BOOL "")
|
||||||
add_subdirectory(./solanaceae_ngc_ft1)
|
add_subdirectory(./solanaceae_ngc_ft1)
|
||||||
|
|
||||||
|
2
external/solanaceae_crdtnotes
vendored
2
external/solanaceae_crdtnotes
vendored
@ -1 +1 @@
|
|||||||
Subproject commit a0d122540b1121b7b4a51c46c7d3861cf581f12d
|
Subproject commit d7400e375c6c7485659a0c5fc4bd7741cda57e37
|
2
external/solanaceae_ngc_ft1
vendored
2
external/solanaceae_ngc_ft1
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 60d6f27a125ad74e20e43999f8ddff4e2e6eb152
|
Subproject commit a761378dd94e557ee1bd039fd99cb7c552ae44b3
|
1
external/solanaceae_tox_p2prng
vendored
Submodule
1
external/solanaceae_tox_p2prng
vendored
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 516df11eda8932248a7df1ae73d9543a96546def
|
2
external/solanaceae_toxic_games
vendored
2
external/solanaceae_toxic_games
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 599094c8e4b432008f09892043abe7034ff18a3a
|
Subproject commit c4608bb3c9c37908bfb264a4b3d60b5630998b84
|
@ -35,3 +35,21 @@ target_link_libraries(plugin_transfer_auto_accept PUBLIC
|
|||||||
solanaceae_message3
|
solanaceae_message3
|
||||||
solanaceae_tox_messages # sad, for filekind
|
solanaceae_tox_messages # sad, for filekind
|
||||||
)
|
)
|
||||||
|
|
||||||
|
########################################
|
||||||
|
|
||||||
|
add_library(plugin_dice_tool MODULE
|
||||||
|
./plugin_dice_tool.cpp
|
||||||
|
./dice_tool.hpp
|
||||||
|
./dice_tool.cpp
|
||||||
|
)
|
||||||
|
set_target_properties(plugin_dice_tool PROPERTIES
|
||||||
|
C_VISIBILITY_PRESET hidden
|
||||||
|
)
|
||||||
|
target_compile_definitions(plugin_dice_tool PUBLIC ENTT_API_IMPORT)
|
||||||
|
|
||||||
|
target_link_libraries(plugin_dice_tool PUBLIC
|
||||||
|
solanaceae_plugin
|
||||||
|
solanaceae_tox_p2prng
|
||||||
|
imgui
|
||||||
|
)
|
||||||
|
162
plugins/dice_tool.cpp
Normal file
162
plugins/dice_tool.cpp
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
#include "./dice_tool.hpp"
|
||||||
|
|
||||||
|
#include <solanaceae/contact/components.hpp>
|
||||||
|
|
||||||
|
#include <imgui.h>
|
||||||
|
|
||||||
|
#include <entt/container/dense_set.hpp>
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
DiceTool::DiceTool(P2PRNGI& p2prng, Contact3Registry& cr) : _p2prng(p2prng), _cr(cr) {
|
||||||
|
p2prng.subscribe(this, P2PRNG_Event::init);
|
||||||
|
p2prng.subscribe(this, P2PRNG_Event::hmac);
|
||||||
|
p2prng.subscribe(this, P2PRNG_Event::secret);
|
||||||
|
p2prng.subscribe(this, P2PRNG_Event::done);
|
||||||
|
p2prng.subscribe(this, P2PRNG_Event::val_error);
|
||||||
|
}
|
||||||
|
|
||||||
|
DiceTool::~DiceTool(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
float DiceTool::render(float) {
|
||||||
|
if (ImGui::Begin("DiceTool")) {
|
||||||
|
// header with values for new roll
|
||||||
|
|
||||||
|
ImGui::TextUnformatted("sides:");
|
||||||
|
ImGui::SameLine();
|
||||||
|
static uint16_t g_sides {6};
|
||||||
|
ImGui::InputScalar("##sides", ImGuiDataType_U16, &g_sides);
|
||||||
|
|
||||||
|
static entt::dense_set<Contact3> peers;
|
||||||
|
|
||||||
|
if (ImGui::CollapsingHeader("peers")) {
|
||||||
|
ImGui::Indent();
|
||||||
|
// list with peers participating
|
||||||
|
|
||||||
|
for (auto it = peers.begin(); it != peers.end();) {
|
||||||
|
ImGui::PushID(entt::to_integral(*it));
|
||||||
|
if (ImGui::SmallButton("-")) {
|
||||||
|
it = peers.erase(it);
|
||||||
|
ImGui::PopID();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Contact3Handle c {_cr, *it};
|
||||||
|
|
||||||
|
const char* str_ptr = "<unk>";
|
||||||
|
if (const auto* name_ptr = c.try_get<Contact::Components::Name>(); name_ptr != nullptr && !name_ptr->name.empty()) {
|
||||||
|
str_ptr = name_ptr->name.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::TextUnformatted(str_ptr);
|
||||||
|
|
||||||
|
ImGui::PopID();
|
||||||
|
it++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ImGui::Button("add")) {
|
||||||
|
ImGui::OpenPopup("peer selector");
|
||||||
|
}
|
||||||
|
if (ImGui::BeginPopup("peer selector")) {
|
||||||
|
for (const auto& [cv] : _cr.view<Contact::Components::TagBig>().each()) {
|
||||||
|
Contact3Handle c {_cr, cv};
|
||||||
|
|
||||||
|
if (peers.contains(c)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* str_ptr = "<unk>";
|
||||||
|
if (const auto* name_ptr = c.try_get<Contact::Components::Name>(); name_ptr != nullptr && !name_ptr->name.empty()) {
|
||||||
|
str_ptr = name_ptr->name.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c.all_of<Contact::Components::TagGroup, Contact::Components::ParentOf>()) {
|
||||||
|
if (ImGui::BeginMenu(str_ptr)) {
|
||||||
|
for (const Contact3 child_cv : c.get<Contact::Components::ParentOf>().subs) {
|
||||||
|
Contact3Handle child_c {_cr, child_cv};
|
||||||
|
|
||||||
|
if (peers.contains(child_c)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* child_str_ptr = "<unk>";
|
||||||
|
if (const auto* name_ptr = child_c.try_get<Contact::Components::Name>(); name_ptr != nullptr && !name_ptr->name.empty()) {
|
||||||
|
child_str_ptr = name_ptr->name.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ImGui::MenuItem(child_str_ptr)) {
|
||||||
|
peers.emplace(child_c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (ImGui::MenuItem(str_ptr)) {
|
||||||
|
peers.emplace(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ImGui::EndPopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button("clear")) {
|
||||||
|
peers.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::Unindent();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ImGui::Button("roll")) {
|
||||||
|
//std::vector<Contact3Handle> c_vec{peers.cbegin(), peers.cend()};
|
||||||
|
std::vector<Contact3Handle> c_vec;
|
||||||
|
for (const auto cv : peers) {
|
||||||
|
c_vec.emplace_back(_cr, cv);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto new_id = _p2prng.newGernationPeers(c_vec, ByteSpan{reinterpret_cast<uint8_t*>(&g_sides), sizeof(g_sides)});
|
||||||
|
if (!new_id.empty()) {
|
||||||
|
auto& new_roll = _rolls.emplace_back();
|
||||||
|
new_roll.id = new_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::SeparatorText("Rolls");
|
||||||
|
|
||||||
|
// list of past rolls and their state
|
||||||
|
//ImGui::CollapsingHeader("d");
|
||||||
|
ImGui::Text("d6 [?] hmac 4/6");
|
||||||
|
ImGui::Text("d6 [?] secret 1/3");
|
||||||
|
ImGui::Text("d6 [1]");
|
||||||
|
}
|
||||||
|
ImGui::End();
|
||||||
|
|
||||||
|
return 10.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DiceTool::onEvent(const P2PRNG::Events::Init&) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DiceTool::onEvent(const P2PRNG::Events::HMAC&) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DiceTool::onEvent(const P2PRNG::Events::Secret&) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DiceTool::onEvent(const P2PRNG::Events::Done&) {
|
||||||
|
std::cout << "got a done!!!!!!!!!!!!!!!!!!\n";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DiceTool::onEvent(const P2PRNG::Events::ValError&) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
36
plugins/dice_tool.hpp
Normal file
36
plugins/dice_tool.hpp
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <solanaceae/tox_p2prng/p2prng.hpp>
|
||||||
|
#include <solanaceae/contact/contact_model3.hpp>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class DiceTool : public P2PRNGEventI {
|
||||||
|
P2PRNGI& _p2prng;
|
||||||
|
Contact3Registry& _cr;
|
||||||
|
|
||||||
|
struct Rolls {
|
||||||
|
std::vector<uint8_t> id;
|
||||||
|
|
||||||
|
P2PRNG::State state {P2PRNG::State::UNKNOWN};
|
||||||
|
uint16_t state_number_1{};
|
||||||
|
uint16_t state_number_2{};
|
||||||
|
|
||||||
|
uint16_t final_result{};
|
||||||
|
};
|
||||||
|
std::vector<Rolls> _rolls;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DiceTool(P2PRNGI& p2prng, Contact3Registry& cr);
|
||||||
|
~DiceTool(void);
|
||||||
|
|
||||||
|
float render(float time_delta);
|
||||||
|
|
||||||
|
protected: // p2prng
|
||||||
|
bool onEvent(const P2PRNG::Events::Init&) override;
|
||||||
|
bool onEvent(const P2PRNG::Events::HMAC&) override;
|
||||||
|
bool onEvent(const P2PRNG::Events::Secret&) override;
|
||||||
|
bool onEvent(const P2PRNG::Events::Done&) override;
|
||||||
|
bool onEvent(const P2PRNG::Events::ValError&) override;
|
||||||
|
};
|
||||||
|
|
79
plugins/plugin_dice_tool.cpp
Normal file
79
plugins/plugin_dice_tool.cpp
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
#include <solanaceae/plugin/solana_plugin_v1.h>
|
||||||
|
|
||||||
|
#include "./dice_tool.hpp"
|
||||||
|
#include <imgui.h>
|
||||||
|
|
||||||
|
#include <entt/entt.hpp>
|
||||||
|
#include <entt/fwd.hpp>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <limits>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
static std::unique_ptr<DiceTool> g_dt = nullptr;
|
||||||
|
|
||||||
|
constexpr const char* plugin_name = "DiceTool";
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
SOLANA_PLUGIN_EXPORT const char* solana_plugin_get_name(void) {
|
||||||
|
return plugin_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
SOLANA_PLUGIN_EXPORT uint32_t solana_plugin_get_version(void) {
|
||||||
|
return SOLANA_PLUGIN_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
SOLANA_PLUGIN_EXPORT uint32_t solana_plugin_start(struct SolanaAPI* solana_api) {
|
||||||
|
std::cout << "PLUGIN " << plugin_name << " START()\n";
|
||||||
|
|
||||||
|
if (solana_api == nullptr) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
auto* p2prng_i = PLUG_RESOLVE_INSTANCE(P2PRNGI);
|
||||||
|
auto* cr = PLUG_RESOLVE_INSTANCE_VERSIONED(Contact3Registry, "1");
|
||||||
|
|
||||||
|
// static store, could be anywhere tho
|
||||||
|
// construct with fetched dependencies
|
||||||
|
g_dt = std::make_unique<DiceTool>(*p2prng_i, *cr);
|
||||||
|
|
||||||
|
auto* imguic = PLUG_RESOLVE_INSTANCE_VERSIONED(ImGuiContext, ImGui::GetVersion());
|
||||||
|
auto* imguimemaf = PLUG_RESOLVE_INSTANCE_VERSIONED(ImGuiMemAllocFunc, ImGui::GetVersion());
|
||||||
|
auto* imguimemff = PLUG_RESOLVE_INSTANCE_VERSIONED(ImGuiMemFreeFunc, ImGui::GetVersion());
|
||||||
|
// meh
|
||||||
|
auto* imguimemud = plug_resolveInstanceOptional<void*>(solana_api, "ImGuiMemUserData", ImGui::GetVersion());
|
||||||
|
|
||||||
|
ImGui::SetCurrentContext(imguic);
|
||||||
|
ImGui::SetAllocatorFunctions(imguimemaf, imguimemff, imguimemud);
|
||||||
|
|
||||||
|
// register types
|
||||||
|
PLUG_PROVIDE_INSTANCE(DiceTool, plugin_name, g_dt.get());
|
||||||
|
} catch (const ResolveException& e) {
|
||||||
|
std::cerr << "PLUGIN " << plugin_name << " " << e.what << "\n";
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SOLANA_PLUGIN_EXPORT void solana_plugin_stop(void) {
|
||||||
|
std::cout << "PLUGIN " << plugin_name << " STOP()\n";
|
||||||
|
|
||||||
|
g_dt.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
SOLANA_PLUGIN_EXPORT float solana_plugin_tick(float delta) {
|
||||||
|
(void)delta;
|
||||||
|
//g_dt->iterate();
|
||||||
|
|
||||||
|
return std::numeric_limits<float>::max();
|
||||||
|
}
|
||||||
|
|
||||||
|
SOLANA_PLUGIN_EXPORT float solana_plugin_render(float delta) {
|
||||||
|
return g_dt->render(delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // extern C
|
||||||
|
|
Loading…
Reference in New Issue
Block a user