From 8bf856bd6fc2dfbb857edf59b71583dad1e62a5a Mon Sep 17 00:00:00 2001 From: Chewico Date: Sat, 10 Oct 2026 21:40:59 +0200 Subject: [PATCH] Refactor for simpler engine --- deerith_engine_client/CMakeLists.txt | 2 + .../include/deerith/universe.h | 4 +- deerith_engine_client/src/engine.cpp | 2 +- deerith_engine_client/src/network/network.cpp | 22 +++++-- .../src/universe/universe.cpp | 38 +++++------ .../src/universe/universe_render.cpp | 5 ++ .../include/deerith/core/universe.h | 6 ++ deerith_engine_core/include/deerith/engine.h | 7 +- .../deerith/universe/universe_definition.h | 9 --- .../include/deerith/universe/user.h | 24 ------- deerith_engine_core/src/server_execution.cpp | 4 +- deerith_engine_core/src/user.cpp | 22 ------- .../include/deerith/universe.h | 3 +- deerith_engine_server/src/core.cpp | 2 +- deerith_engine_server/src/universe.cpp | 23 ++++--- imgui.ini | 8 --- sandbox/src/client/window.cpp | 65 ------------------- sandbox/src/client/window.h | 3 - sandbox/src/runtime/main.cpp | 45 ++++++++----- sandbox/src/runtime/user_definition.cpp | 20 ------ sandbox/src/runtime/user_definition.h | 10 --- sandbox/src/server/server.cpp | 11 ---- sandbox/src/server/server.h | 3 - 23 files changed, 102 insertions(+), 236 deletions(-) create mode 100644 deerith_engine_client/src/universe/universe_render.cpp create mode 100644 deerith_engine_core/include/deerith/core/universe.h delete mode 100644 deerith_engine_core/include/deerith/universe/universe_definition.h delete mode 100644 deerith_engine_core/include/deerith/universe/user.h delete mode 100644 deerith_engine_core/src/user.cpp delete mode 100644 imgui.ini delete mode 100644 sandbox/src/client/window.cpp delete mode 100644 sandbox/src/client/window.h delete mode 100644 sandbox/src/runtime/user_definition.cpp delete mode 100644 sandbox/src/runtime/user_definition.h delete mode 100644 sandbox/src/server/server.cpp delete mode 100644 sandbox/src/server/server.h diff --git a/deerith_engine_client/CMakeLists.txt b/deerith_engine_client/CMakeLists.txt index 61aa723..b9c37e4 100644 --- a/deerith_engine_client/CMakeLists.txt +++ b/deerith_engine_client/CMakeLists.txt @@ -18,6 +18,8 @@ target_sources(DeerithClient ) target_include_directories(DeerithClient + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${IMGUI_INCLUDE_DIRS} diff --git a/deerith_engine_client/include/deerith/universe.h b/deerith_engine_client/include/deerith/universe.h index a9b8ff5..92719c3 100644 --- a/deerith_engine_client/include/deerith/universe.h +++ b/deerith_engine_client/include/deerith/universe.h @@ -1,9 +1,11 @@ #pragma once +#include namespace deerith { - void begin_connection_to_universe(const char *address, int port); + bool connect_to_universe(const char *address, int port); void shutdown_universe(); bool is_universe_running(); + void render_universe(); } \ No newline at end of file diff --git a/deerith_engine_client/src/engine.cpp b/deerith_engine_client/src/engine.cpp index e7f68ee..5cc82f6 100644 --- a/deerith_engine_client/src/engine.cpp +++ b/deerith_engine_client/src/engine.cpp @@ -17,7 +17,7 @@ void deerith::init_engine() deerith_trace("init engine"); } -void deerith::shutdown_enigne() +void deerith::shutdown_engine() { shutdown_executing_servers(); shutdown_network(); diff --git a/deerith_engine_client/src/network/network.cpp b/deerith_engine_client/src/network/network.cpp index d611292..7bfacaa 100644 --- a/deerith_engine_client/src/network/network.cpp +++ b/deerith_engine_client/src/network/network.cpp @@ -49,24 +49,34 @@ void deerith::flush_network_events() ENetEvent event; while (enet_host_service(client, &event, 0) > 0) { + switch (event.type) + { + case ENET_EVENT_TYPE_DISCONNECT: + event.peer->data = NULL; + break; + + case ENET_EVENT_TYPE_RECEIVE: + enet_packet_destroy(event.packet); + break; + + case ENET_EVENT_TYPE_NONE: + break; + } } } bool deerith::wait_till_connected_to_server() { ENetEvent event; - if (enet_host_service(client, &event, 5000) > 0 && - event.type == ENET_EVENT_TYPE_CONNECT) + if (enet_host_service(client, &event, 5000) > 0 && event.type == ENET_EVENT_TYPE_CONNECT) { - deerith_trace("Connected to server"); - + deerith_trace("connected to server"); return true; } - else { enet_peer_reset(client_peer); - deerith_error("Failed to connect to server"); + deerith_error("failed to connect to server"); return false; } } \ No newline at end of file diff --git a/deerith_engine_client/src/universe/universe.cpp b/deerith_engine_client/src/universe/universe.cpp index b0e84ed..cd6c987 100644 --- a/deerith_engine_client/src/universe/universe.cpp +++ b/deerith_engine_client/src/universe/universe.cpp @@ -1,33 +1,36 @@ +#include #include -#include #include -#include "../network/network_internals.h" +#include "network/network_internals.h" #include #include namespace deerith { - std::unique_ptr universe_thread = {}; + std::unique_ptr universe_thread; std::atomic universe_running = false; void universe_simulation(); } -void deerith::begin_connection_to_universe(const char *address, int port) +bool deerith::connect_to_universe(const char *address, int port) { - deerith_assert(!universe_running, "begin_connection_to_universe failed because there is a current running universe"); - - if (universe_thread && universe_thread->joinable()) - universe_thread->join(); - - universe_thread.reset(); + deerith_assert(!universe_running, "connect_to_universe failed because there is a current running universe"); + shutdown_universe(); connect_to_server(address, port); + if (!wait_till_connected_to_server()) + { + deerith_error("engine was not able to connect to server"); + return false; + } + universe_running = true; universe_thread = std::make_unique(universe_simulation); + return true; } bool deerith::is_universe_running() @@ -37,20 +40,15 @@ bool deerith::is_universe_running() void deerith::universe_simulation() { - bool connected = wait_till_connected_to_server(); - - if (connected) + while (universe_running) { - while (universe_running) - { - flush_network_events(); + flush_network_events(); - wait_for_tick(); - } + wait_for_tick(); } - deerith_trace("Universe stop"); universe_running = false; + deerith_trace("universe shutdown"); } void deerith::shutdown_universe() @@ -59,4 +57,4 @@ void deerith::shutdown_universe() if (universe_thread && universe_thread->joinable()) universe_thread->join(); universe_thread.reset(); -} \ No newline at end of file +} diff --git a/deerith_engine_client/src/universe/universe_render.cpp b/deerith_engine_client/src/universe/universe_render.cpp new file mode 100644 index 0000000..ed0257c --- /dev/null +++ b/deerith_engine_client/src/universe/universe_render.cpp @@ -0,0 +1,5 @@ +#include + +void deerith::render_universe() +{ +} \ No newline at end of file diff --git a/deerith_engine_core/include/deerith/core/universe.h b/deerith_engine_core/include/deerith/core/universe.h new file mode 100644 index 0000000..03ef1dc --- /dev/null +++ b/deerith_engine_core/include/deerith/core/universe.h @@ -0,0 +1,6 @@ +#pragma once + +namespace deerith +{ + +} \ No newline at end of file diff --git a/deerith_engine_core/include/deerith/engine.h b/deerith_engine_core/include/deerith/engine.h index 4766732..87e264f 100644 --- a/deerith_engine_core/include/deerith/engine.h +++ b/deerith_engine_core/include/deerith/engine.h @@ -1,7 +1,8 @@ #pragma once #include +#include +#include -// At #define UNIVERSE_SIMULATION_TICK_FREQ 50 #define NETWORK_RELATIVE_TICK 2 #define NETWORK_DELAY 10 @@ -9,8 +10,8 @@ namespace deerith { void init_engine(); - void shutdown_enigne(); + void shutdown_engine(); - void execute_server(const char *server_executable_path, int port); + bool execute_server(const char *server_executable_path, int port); void shutdown_executing_servers(); } \ No newline at end of file diff --git a/deerith_engine_core/include/deerith/universe/universe_definition.h b/deerith_engine_core/include/deerith/universe/universe_definition.h deleted file mode 100644 index 8699817..0000000 --- a/deerith_engine_core/include/deerith/universe/universe_definition.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once -#include -#include - -namespace deerith -{ - - void define_client_callback(std::function); -} \ No newline at end of file diff --git a/deerith_engine_core/include/deerith/universe/user.h b/deerith_engine_core/include/deerith/universe/user.h deleted file mode 100644 index 43fb238..0000000 --- a/deerith_engine_core/include/deerith/universe/user.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once -#include - -#include -#include - -namespace deerith -{ - class user_t - { - public: - void *user_data = nullptr; - - void register_sync_variable(sync_variable_base_t *var); - - private: - std::vector buffers; - }; - - using user_registration_function = std::function; - - void register_user_sync_variables_init_callback(user_registration_function); - void register_user_sync_variables_shutdown_callback(user_registration_function); -} diff --git a/deerith_engine_core/src/server_execution.cpp b/deerith_engine_core/src/server_execution.cpp index 3789643..5719606 100644 --- a/deerith_engine_core/src/server_execution.cpp +++ b/deerith_engine_core/src/server_execution.cpp @@ -12,19 +12,21 @@ namespace deerith std::vector executing_servers; } -void deerith::execute_server(const char *server_executable_path, int port) +bool deerith::execute_server(const char *server_executable_path, int port) { pid_t pid = fork(); if (pid < 0) { deerith_error("execute_server fatal error"); + return false; } if (pid > 0) { executing_servers.push_back(pid); deerith_trace("server created"); + return true; } else { diff --git a/deerith_engine_core/src/user.cpp b/deerith_engine_core/src/user.cpp deleted file mode 100644 index 53b5017..0000000 --- a/deerith_engine_core/src/user.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include - -namespace deerith -{ - user_registration_function user_sync_variables_init_function; - user_registration_function user_sync_variables_shutdown_function; -} - -void deerith::register_user_sync_variables_init_callback(user_registration_function fn) -{ - user_sync_variables_init_function = fn; -} - -void deerith::register_user_sync_variables_shutdown_callback(user_registration_function fn) -{ - user_sync_variables_shutdown_function = fn; -} - -void deerith::user_t::register_sync_variable(sync_variable_base_t *var) -{ - buffers.push_back(var); -} \ No newline at end of file diff --git a/deerith_engine_server/include/deerith/universe.h b/deerith_engine_server/include/deerith/universe.h index f611377..4822678 100644 --- a/deerith_engine_server/include/deerith/universe.h +++ b/deerith_engine_server/include/deerith/universe.h @@ -1,8 +1,9 @@ #pragma once +#include namespace deerith { - void begin_universe(int port); + void run_universe(int port); void shutdown_universe(); bool is_universe_running(); diff --git a/deerith_engine_server/src/core.cpp b/deerith_engine_server/src/core.cpp index 15fb508..ca941e8 100644 --- a/deerith_engine_server/src/core.cpp +++ b/deerith_engine_server/src/core.cpp @@ -18,7 +18,7 @@ void deerith::init_engine() deerith_trace("init server engine"); } -void deerith::shutdown_enigne() +void deerith::shutdown_engine() { shutdown_network(); diff --git a/deerith_engine_server/src/universe.cpp b/deerith_engine_server/src/universe.cpp index 3b1fdcd..d8e6430 100644 --- a/deerith_engine_server/src/universe.cpp +++ b/deerith_engine_server/src/universe.cpp @@ -24,34 +24,33 @@ void deerith::handle_signal(int signal) running = false; } -void deerith::begin_universe(int port) +void deerith::run_universe(int port) { std::signal(SIGTERM, handle_signal); - bool init_result = init_server(port); - - if (init_result) + if (init_server(port)) { + deerith_trace("server init on port {}", port); while (running) { universe_simulation(); } } + else + { + deerith_error("could not init server"); + } } void deerith::universe_simulation() { - if (universe_tick % 2 == 0) - { - flush_network_events(); + flush_network_events(); - for (ENetPeer *new_client : get_new_clients()) - { - create_client(new_client); - } + for (ENetPeer *new_client : get_new_clients()) + { + create_client(new_client); } - universe_tick++; wait_for_tick(); } diff --git a/imgui.ini b/imgui.ini deleted file mode 100644 index 5d5c181..0000000 --- a/imgui.ini +++ /dev/null @@ -1,8 +0,0 @@ -[Window][Debug##Default] -Pos=60,60 -Size=400,400 - -[Window][Context] -Pos=60,60 -Size=483,321 - diff --git a/sandbox/src/client/window.cpp b/sandbox/src/client/window.cpp deleted file mode 100644 index d2fa3d8..0000000 --- a/sandbox/src/client/window.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include "client/window.h" -#include - -#include -#include -#include -#include -#include - -#include - -glm::vec2 player_pos(5, 5); -char net_address[16] = "127.0.0.1"; -int port = 8080; -float vel = 1; - -void start_window_loop() -{ - deerith_assert(deerith::init_window() == 0, "Failed to init_window"); - - while (deerith::begin_window_display()) - { - deerith::define_primitive_viewspace(glm::vec2(0, 0), glm::vec2(10 * deerith::get_window_aspect_ratio(), 10)); - - player_pos += deerith::get_joystick_axes(0, 0) * (vel / 60.0f); - - deerith::define_primitive_color(glm::vec4(0.4f, 0.7f, 1.0f, 1)); - deerith::draw_primitive_rectangle(player_pos - glm::vec2(0.5f, 0.5f), player_pos + glm::vec2(0.5f, 0.5f)); - - if (ImGui::Begin("Context")) - { - ImGui::SliderFloat("Velocity", &vel, 0, 4); - - if (deerith::is_universe_running()) - { - ImGui::Text("Universe running"); - } - else - { - ImGui::InputText("Net Address", net_address, 16); - ImGui::InputInt("Net port", &port); - - if (ImGui::Button("Connect")) - { - deerith::begin_connection_to_universe(net_address, port); - } - - if (ImGui::Button("Create server")) - { - deerith::execute_server("./SandboxServer", 8080); - } - - if (ImGui::Button("Close all servers")) - { - deerith::shutdown_executing_servers(); - } - } - } - ImGui::End(); - - deerith::finish_window_display(); - } - - deerith::shutdown_window(); -} \ No newline at end of file diff --git a/sandbox/src/client/window.h b/sandbox/src/client/window.h deleted file mode 100644 index f4878e2..0000000 --- a/sandbox/src/client/window.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -void start_window_loop(); \ No newline at end of file diff --git a/sandbox/src/runtime/main.cpp b/sandbox/src/runtime/main.cpp index 3c94dcb..1b535bf 100644 --- a/sandbox/src/runtime/main.cpp +++ b/sandbox/src/runtime/main.cpp @@ -1,29 +1,44 @@ #include - -#include "runtime/user_definition.h" +#include +#include #ifdef DEERITH_CLIENT -#include "client/window.h" -#endif - -#ifdef DEERITH_SERVER -#include "server/server.h" +#include #endif int main(int args_count, const char **args) { deerith::init_engine(); - deerith::register_user_sync_variables_init_callback(user_sync_variables_init); - deerith::register_user_sync_variables_shutdown_callback(user_sync_variables_init); +#ifdef DEERITH_SERVER + deerith::run_universe(8080); +#endif #ifdef DEERITH_CLIENT - start_window_loop(); + if (!deerith::execute_server("./SandboxServer", 8080)) + { + deerith_error("could not start server"); + deerith::shutdown_engine(); + return 1; + } + + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + + if (deerith::connect_to_universe("127.0.0.1", 8080)) + { + deerith_assert(deerith::init_window() == 0, "Failed to init_window"); + + while (deerith::begin_window_display()) + { + deerith::render_universe(); + + deerith::finish_window_display(); + } + + deerith::shutdown_window(); + } #endif -#ifdef DEERITH_SERVER - init_server(); -#endif - - deerith::shutdown_enigne(); + deerith::shutdown_executing_servers(); + deerith::shutdown_engine(); } \ No newline at end of file diff --git a/sandbox/src/runtime/user_definition.cpp b/sandbox/src/runtime/user_definition.cpp deleted file mode 100644 index 6c86777..0000000 --- a/sandbox/src/runtime/user_definition.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "runtime/user_definition.h" - -#include -#include - -void user_sync_variables_init(deerith::user_t &user) -{ - deerith_trace("removing user data to new user"); - sandbox_user_data_t *sandbox_user_data = new sandbox_user_data_t(); - - user.user_data = sandbox_user_data; - user.register_sync_variable(&sandbox_user_data->position_sync); -} - -void user_sync_variables_shutdown(deerith::user_t &user) -{ - deerith_trace("removing user"); - delete ((sandbox_user_data_t *)user.user_data); - user.user_data = nullptr; -} diff --git a/sandbox/src/runtime/user_definition.h b/sandbox/src/runtime/user_definition.h deleted file mode 100644 index e291e2b..0000000 --- a/sandbox/src/runtime/user_definition.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -#include - -struct sandbox_user_data_t -{ - deerith::sync_variable_t position_sync; -}; - -void user_sync_variables_init(deerith::user_t &user); -void user_sync_variables_shutdown(deerith::user_t &user); diff --git a/sandbox/src/server/server.cpp b/sandbox/src/server/server.cpp deleted file mode 100644 index 41f30fc..0000000 --- a/sandbox/src/server/server.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "server/server.h" - -namespace deerith -{ -} - -void init_server() -{ - deerith::begin_universe(8085); -} \ No newline at end of file diff --git a/sandbox/src/server/server.h b/sandbox/src/server/server.h deleted file mode 100644 index a63183d..0000000 --- a/sandbox/src/server/server.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -void init_server(); \ No newline at end of file