From b29a42719cd32bcf3af4725aa2b3f97d8ebc5107 Mon Sep 17 00:00:00 2001 From: Benau Date: Fri, 6 Dec 2019 14:10:45 +0800 Subject: [PATCH] Expose item manager random seed (synchronized in online too) in scripting --- src/items/item_manager.cpp | 1 + src/items/item_manager.hpp | 9 +++++++++ src/scriptengine/script_track.cpp | 10 ++++++++++ 3 files changed, 20 insertions(+) diff --git a/src/items/item_manager.cpp b/src/items/item_manager.cpp index 1fab147ff..e55947b02 100644 --- a/src/items/item_manager.cpp +++ b/src/items/item_manager.cpp @@ -50,6 +50,7 @@ std::vector ItemManager::m_glow_color; bool ItemManager::m_disable_item_collection = false; std::shared_ptr ItemManager::m_item_manager; std::mt19937 ItemManager::m_random_engine; +uint32_t ItemManager::m_random_seed = 0; //----------------------------------------------------------------------------- /** Creates one instance of the item manager. */ diff --git a/src/items/item_manager.hpp b/src/items/item_manager.hpp index 985b7a5dc..10da49e05 100644 --- a/src/items/item_manager.hpp +++ b/src/items/item_manager.hpp @@ -54,6 +54,8 @@ private: static bool m_disable_item_collection; static std::mt19937 m_random_engine; + + static uint32_t m_random_seed; protected: /** The instance of ItemManager while a race is on. */ static std::shared_ptr m_item_manager; @@ -66,7 +68,14 @@ public: static void updateRandomSeed(uint32_t seed_number) { m_random_engine.seed(seed_number); + m_random_seed = seed_number; } // updateRandomSeed + // ------------------------------------------------------------------------ + static uint32_t getRandomSeed() + { + return m_random_seed; + } // getRandomSeed + // ------------------------------------------------------------------------ /** Disable item collection, useful to test client mispreditions or diff --git a/src/scriptengine/script_track.cpp b/src/scriptengine/script_track.cpp index 7b05e407d..3d6d4ceef 100644 --- a/src/scriptengine/script_track.cpp +++ b/src/scriptengine/script_track.cpp @@ -28,6 +28,7 @@ #include "input/device_manager.hpp" #include "input/input_device.hpp" #include "input/input_manager.hpp" +#include "items/item_manager.hpp" #include "modes/world.hpp" #include "scriptengine/property_animator.hpp" #include "scriptengine/aswrappedcall.hpp" @@ -185,6 +186,11 @@ namespace Scripting return ::Track::getCurrentTrack()->getIsDuringDay(); } + uint32_t getItemManagerRandomSeed() + { + return ItemManager::getRandomSeed(); + } + void setFog(float maxDensity, float start, float end, int r, int g, int b, float duration) { PropertyAnimator* animator = PropertyAnimator::get(); @@ -557,6 +563,10 @@ namespace Scripting mp ? WRAP_FN(getMajorRaceMode) : asFUNCTION(getMajorRaceMode), call_conv); assert(r >= 0); + r = engine->RegisterGlobalFunction("uint getItemManagerRandomSeed()", + mp ? WRAP_FN(getItemManagerRandomSeed) : asFUNCTION(getItemManagerRandomSeed), + call_conv); assert(r >= 0); + r = engine->RegisterGlobalFunction("int getMinorRaceMode()", mp ? WRAP_FN(getMinorRaceMode) : asFUNCTION(getMinorRaceMode), call_conv); assert(r >= 0);