summaryrefslogtreecommitdiff
path: root/src/map_settings_manager.h
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2016-06-24 18:15:56 -0400
committerkwolekr <kwolekr@minetest.net>2016-07-03 15:38:36 -0400
commit3c63c3044d5e4ca36c2649c530f31622581d90fd (patch)
treeb7924100f14f5626c11d534e2ad3602e269ac1df /src/map_settings_manager.h
parent92705306bfb4994107a43514f29997cea15d48dc (diff)
downloadminetest-3c63c3044d5e4ca36c2649c530f31622581d90fd.tar.gz
minetest-3c63c3044d5e4ca36c2649c530f31622581d90fd.tar.bz2
minetest-3c63c3044d5e4ca36c2649c530f31622581d90fd.zip
Add MapSettingsManager and new mapgen setting script API functions
This commit refactors the majority of the Mapgen settings system. - MapgenParams is now owned by MapSettingsManager, itself a part of ServerMap, instead of the EmergeManager. - New Script API functions added: core.get_mapgen_setting core.get_mapgen_setting_noiseparams, core.set_mapgen_setting, and core.set_mapgen_setting_noiseparams. - minetest.get/set_mapgen_params are deprecated by the above new functions. - It is now possible to view and modify any arbitrary mapgen setting from a mod, rather than the base MapgenParams structure. - MapgenSpecificParams has been removed.
Diffstat (limited to 'src/map_settings_manager.h')
-rw-r--r--src/map_settings_manager.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/map_settings_manager.h b/src/map_settings_manager.h
new file mode 100644
index 000000000..9f766f1f0
--- /dev/null
+++ b/src/map_settings_manager.h
@@ -0,0 +1,79 @@
+/*
+Minetest
+Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#ifndef MAP_SETTINGS_MANAGER_HEADER
+#define MAP_SETTINGS_MANAGER_HEADER
+
+#include <string>
+
+class Settings;
+struct NoiseParams;
+struct MapgenParams;
+
+/*
+ MapSettingsManager is a centralized object for management (creating,
+ loading, storing, saving, etc.) of config settings related to the Map.
+
+ It has two phases: the initial r/w "gather and modify settings" state, and
+ the final r/o "read and save settings" state.
+
+ The typical use case is, in order, as follows:
+ - Create a MapSettingsManager object
+ - Try to load map metadata into it from the metadata file
+ - Manually view and modify the current configuration as desired through a
+ Settings-like interface
+ - When all modifications are finished, create a 'Parameters' object
+ containing the finalized, active parameters. This could be passed along
+ to whichever Map-related objects that may require it.
+ - Save these active settings to the metadata file when requested
+*/
+class MapSettingsManager {
+public:
+ // Finalized map generation parameters
+ MapgenParams *mapgen_params;
+
+ MapSettingsManager(Settings *user_settings,
+ const std::string &map_meta_path);
+ ~MapSettingsManager();
+
+ bool getMapSetting(const std::string &name, std::string *value_out);
+
+ bool getMapSettingNoiseParams(
+ const std::string &name, NoiseParams *value_out);
+
+ // Note: Map config becomes read-only after makeMapgenParams() gets called
+ // (i.e. mapgen_params is non-NULL). Attempts to set map config after
+ // params have been finalized will result in failure.
+ bool setMapSetting(const std::string &name,
+ const std::string &value, bool override_meta = false);
+
+ bool setMapSettingNoiseParams(const std::string &name,
+ const NoiseParams *value, bool override_meta = false);
+
+ bool loadMapMeta();
+ bool saveMapMeta();
+ MapgenParams *makeMapgenParams();
+
+private:
+ std::string m_map_meta_path;
+ Settings *m_map_settings;
+ Settings *m_user_settings;
+};
+
+#endif