From cde2a7f6f24f638421238ead4e61b155322fefc8 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sat, 25 Jan 2020 16:56:54 +0100 Subject: Settings: Add get_flags API for mapgen flags (mg_flags, mgv6_spflags, ...) (#9284) Unified flags handling in C++ and Lua Settings API -> Reading only, for now. Writing can be implemented later, if needed. API function to read the currently active flags -> was impossible from Lua Co-authored-by: Wuzzy --- src/settings.h | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'src/settings.h') diff --git a/src/settings.h b/src/settings.h index 329a61140..b42e36d10 100644 --- a/src/settings.h +++ b/src/settings.h @@ -174,10 +174,12 @@ public: bool getFloatNoEx(const std::string &name, float &val) const; bool getV2FNoEx(const std::string &name, v2f &val) const; bool getV3FNoEx(const std::string &name, v3f &val) const; - // N.B. getFlagStrNoEx() does not set val, but merely modifies it. Thus, - // val must be initialized before using getFlagStrNoEx(). The intention of - // this is to simplify modifying a flags field from a default value. - bool getFlagStrNoEx(const std::string &name, u32 &val, FlagDesc *flagdesc) const; + + // Like other getters, but handling each flag individualy: + // 1) Read default flags (or 0) + // 2) Override using user-defined flags + bool getFlagStrNoEx(const std::string &name, u32 &val, + const FlagDesc *flagdesc) const; /*********** @@ -201,7 +203,7 @@ public: bool setV2F(const std::string &name, v2f value); bool setV3F(const std::string &name, v3f value); bool setFlagStr(const std::string &name, u32 flags, - const FlagDesc *flagdesc, u32 flagmask); + const FlagDesc *flagdesc = nullptr, u32 flagmask = U32_MAX); bool setNoiseParams(const std::string &name, const NoiseParams &np, bool set_default=false); // N.B. if setStruct() is used to write a non-POD aggregate type, @@ -215,6 +217,13 @@ public: void updateValue(const Settings &other, const std::string &name); void update(const Settings &other); + /************** + * Miscellany * + **************/ + + void setDefault(const std::string &name, const FlagDesc *flagdesc, u32 flags); + const FlagDesc *getFlagDescFallback(const std::string &name) const; + void registerChangedCallback(const std::string &name, SettingsChangedCallback cbf, void *userdata = NULL); void deregisterChangedCallback(const std::string &name, @@ -229,6 +238,7 @@ private: SettingEntries m_settings; SettingEntries m_defaults; + std::unordered_map m_flags; SettingsCallbackMap m_callbacks; -- cgit v1.2.3