From 65fec4f4a9ba9a25d40ef3c9e0f22cde421c356d Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 16 Jan 2025 05:59:43 +0300 Subject: [PATCH] introduce local player --- src/engine/Engine.cpp | 8 ++++---- src/engine/Engine.hpp | 8 +++++--- src/engine/Mainloop.cpp | 6 ++++-- src/engine/ServerMainloop.cpp | 2 +- src/frontend/debug_panel.cpp | 6 ++++++ src/frontend/screens/LevelScreen.cpp | 13 ++++++++----- src/frontend/screens/LevelScreen.hpp | 4 +++- src/logic/ChunksController.cpp | 6 ++++-- src/logic/EngineController.cpp | 16 +++++++++++----- src/logic/EngineController.hpp | 3 +++ src/logic/LevelController.cpp | 5 +++++ src/logic/PlayerController.cpp | 1 - src/logic/scripting/lua/libs/libcore.cpp | 6 ++++++ src/logic/scripting/lua/libs/libplayer.cpp | 13 +++++++++---- src/objects/Players.cpp | 13 +++++++++++-- src/objects/Players.hpp | 5 ++++- 16 files changed, 84 insertions(+), 31 deletions(-) diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index 9184fdd6..00382420 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -272,7 +272,7 @@ PacksManager Engine::createPacksManager(const fs::path& worldFolder) { return manager; } -void Engine::setLevelConsumer(consumer> levelConsumer) { +void Engine::setLevelConsumer(OnWorldOpen levelConsumer) { this->levelConsumer = std::move(levelConsumer); } @@ -446,14 +446,14 @@ void Engine::setLanguage(std::string locale) { langs::setup(paths.getResourcesFolder(), std::move(locale), contentPacks); } -void Engine::onWorldOpen(std::unique_ptr level) { +void Engine::onWorldOpen(std::unique_ptr level, int64_t localPlayer) { logger.info() << "world open"; - levelConsumer(std::move(level)); + levelConsumer(std::move(level), localPlayer); } void Engine::onWorldClosed() { logger.info() << "world closed"; - levelConsumer(nullptr); + levelConsumer(nullptr, -1); } void Engine::quit() { diff --git a/src/engine/Engine.hpp b/src/engine/Engine.hpp index af9f7fb9..406d420a 100644 --- a/src/engine/Engine.hpp +++ b/src/engine/Engine.hpp @@ -53,6 +53,8 @@ struct CoreParameters { std::filesystem::path scriptFile; }; +using OnWorldOpen = std::function, int64_t)>; + class Engine : public util::ObjectsKeeper { CoreParameters params; EngineSettings settings; @@ -71,7 +73,7 @@ class Engine : public util::ObjectsKeeper { std::unique_ptr gui; PostRunnables postRunnables; Time time; - consumer> levelConsumer; + OnWorldOpen levelConsumer; bool quitSignal = false; void loadControls(); @@ -134,7 +136,7 @@ public: /// @brief Get engine resource paths controller ResPaths* getResPaths(); - void onWorldOpen(std::unique_ptr level); + void onWorldOpen(std::unique_ptr level, int64_t localPlayer); void onWorldClosed(); void quit(); @@ -166,7 +168,7 @@ public: PacksManager createPacksManager(const fs::path& worldFolder); - void setLevelConsumer(consumer> levelConsumer); + void setLevelConsumer(OnWorldOpen levelConsumer); SettingsHandler& getSettingsHandler(); diff --git a/src/engine/Mainloop.cpp b/src/engine/Mainloop.cpp index e0e64d10..2de6291d 100644 --- a/src/engine/Mainloop.cpp +++ b/src/engine/Mainloop.cpp @@ -15,14 +15,16 @@ Mainloop::Mainloop(Engine& engine) : engine(engine) { void Mainloop::run() { auto& time = engine.getTime(); - engine.setLevelConsumer([this](auto level) { + engine.setLevelConsumer([this](auto level, int64_t localPlayer) { if (level == nullptr) { // destroy LevelScreen and run quit callbacks engine.setScreen(nullptr); // create and go to menu screen engine.setScreen(std::make_shared(engine)); } else { - engine.setScreen(std::make_shared(engine, std::move(level))); + engine.setScreen(std::make_shared( + engine, std::move(level), localPlayer + )); } }); diff --git a/src/engine/ServerMainloop.cpp b/src/engine/ServerMainloop.cpp index b97919be..954c2a11 100644 --- a/src/engine/ServerMainloop.cpp +++ b/src/engine/ServerMainloop.cpp @@ -30,7 +30,7 @@ void ServerMainloop::run() { logger.info() << "nothing to do"; return; } - engine.setLevelConsumer([this](auto level) { + engine.setLevelConsumer([this](auto level, auto) { setLevel(std::move(level)); }); diff --git a/src/frontend/debug_panel.cpp b/src/frontend/debug_panel.cpp index a234c38a..936c3b2e 100644 --- a/src/frontend/debug_panel.cpp +++ b/src/frontend/debug_panel.cpp @@ -14,6 +14,7 @@ #include "graphics/render/ChunksRenderer.hpp" #include "logic/scripting/scripting.hpp" #include "objects/Player.hpp" +#include "objects/Players.hpp" #include "objects/Entities.hpp" #include "objects/EntityDef.hpp" #include "physics/Hitbox.hpp" @@ -41,6 +42,7 @@ static std::shared_ptr