aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/api/Config.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/api/Config.h')
-rw-r--r--src/crepe/api/Config.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/crepe/api/Config.h b/src/crepe/api/Config.h
new file mode 100644
index 0000000..6b9e3ca
--- /dev/null
+++ b/src/crepe/api/Config.h
@@ -0,0 +1,103 @@
+#pragma once
+
+#include <string>
+
+#include "../util/Log.h"
+
+#include "types.h"
+
+namespace crepe {
+
+/**
+ * \brief Global configuration interface
+ *
+ * This class stores engine default settings. Properties on this class are only supposed to be
+ * modified *before* execution is handed over from the game programmer to the engine (i.e. the
+ * main loop is started).
+ */
+struct Config final {
+ //! Retrieve handle to global Config instance
+ static Config & get_instance();
+
+ //! Logging-related settings
+ struct {
+ /**
+ * \brief Log level
+ *
+ * Only messages with equal or higher priority than this value will be logged.
+ */
+ Log::Level level = Log::Level::INFO;
+ /**
+ * \brief Colored log output
+ *
+ * Enables log coloring using ANSI escape codes.
+ */
+ bool color = true;
+ } log;
+
+ //! Save manager
+ struct {
+ /**
+ * \brief Save file location
+ *
+ * This location is used by the constructor of SaveManager, and should be set before save
+ * manager functionality is attempted to be used.
+ */
+ std::string location = "save.crepe.db";
+ } savemgr;
+
+ //! physics-related settings
+ struct {
+ /**
+ * \brief gravity value of physics system
+ *
+ * Gravity value of game.
+ */
+ float gravity = 10;
+ } physics;
+
+ //! default window settings
+ struct {
+ //! default screen size in pixels
+ ivec2 default_size = {1280, 720};
+ std::string window_title = "Jetpack joyride clone";
+ } window_settings;
+
+ //! Asset loading options
+ struct {
+ /**
+ * \brief Pattern to match for Asset base directory
+ *
+ * All non-absolute paths resolved using \c Asset will be made relative to
+ * the first parent directory relative to the calling executable where
+ * appending this pattern results in a path that exists. If this string is
+ * empty, path resolution is disabled, and Asset will return all paths
+ * as-is.
+ */
+ std::string root_pattern = ".crepe-root";
+ } asset;
+ //! Default font options
+ struct {
+ /**
+ * \brief Default font size
+ *
+ * Using the SDL_ttf library the font size needs to be set when loading the font.
+ * This config option is the font size at which all fonts will be loaded initially.
+ *
+ */
+ unsigned int size = 16;
+ } font;
+ //! Configuration for click tolerance.
+ struct {
+ //! The maximum number of pixels the mouse can move between MouseDown and MouseUp events to be considered a click.
+ int click_tolerance = 5;
+ } input;
+
+ //! Audio system settings
+ struct {
+ //! Max amount of simultanious voices
+ unsigned int voices = 32;
+ } audio;
+};
+
+} // namespace crepe