]> git.lizzy.rs Git - minetest.git/blobdiff - src/settings.h
Settings: Add get_flags API for mapgen flags (mg_flags, mgv6_spflags, ...) (#9284)
[minetest.git] / src / settings.h
index 329a611408cc54800dcd2b147704958e27bde51b..b42e36d109bbe5026a208f563d974385bf853074 100644 (file)
@@ -174,10 +174,12 @@ class Settings {
        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 @@ class Settings {
        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 @@ class Settings {
        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 @@ class Settings {
 
        SettingEntries m_settings;
        SettingEntries m_defaults;
+       std::unordered_map<std::string, const FlagDesc *> m_flags;
 
        SettingsCallbackMap m_callbacks;