#ifndef NET_MINECRAFT_CLIENT__Options_H__ #define NET_MINECRAFT_CLIENT__Options_H__ #define SOUND_MIN_VALUE 0.0f #define SOUND_MAX_VALUE 1.0f #define MUSIC_MIN_VALUE 0.0f #define MUSIC_MAX_VALUE 1.0f #define SENSITIVITY_MIN_VALUE 0.0f #define SENSITIVITY_MAX_VALUE 1.0f #define PIXELS_PER_MILLIMETER_MIN_VALUE 3.0f #define PIXELS_PER_MILLIMETER_MAX_VALUE 4.0f //package net.minecraft.client; //#include "locale/Language.h" #include #include #include "../platform/input/Keyboard.h" #include "../util/StringUtils.h" #include "OptionsFile.h" #include "Option.h" #include enum OptionId { // General OPTIONS_DIFFICULTY, OPTIONS_HIDEGUI, OPTIONS_THIRD_PERSON_VIEW, OPTIONS_GUI_SCALE, OPTIONS_DESTROY_VIBRATION, OPTIONS_MUSIC_VOLUME, OPTIONS_SOUND_VOLUME, OPTIONS_SKIN, OPTIONS_USERNAME, OPTIONS_SERVER_VISIBLE, OPTIONS_BAR_ON_TOP, OPTIONS_ALLOW_SPRINT, OPTIONS_AUTOJUMP, // Graphics OPTIONS_RENDER_DEBUG, OPTIONS_SMOOTH_CAMERA, OPTIONS_FIXED_CAMERA, OPTIONS_VIEW_DISTANCE, OPTIONS_VIEW_BOBBING, OPTIONS_AMBIENT_OCCLUSION, OPTIONS_ANAGLYPH_3D, OPTIONS_LIMIT_FRAMERATE, OPTIONS_VSYNC, OPTIONS_FANCY_GRAPHICS, // Cheats / debug OPTIONS_FLY_SPEED, OPTIONS_CAMERA_SPEED, OPTIONS_IS_FLYING, // Control OPTIONS_USE_MOUSE_FOR_DIGGING, OPTIONS_IS_LEFT_HANDED, OPTIONS_IS_JOY_TOUCH_AREA, OPTIONS_SENSITIVITY, OPTIONS_INVERT_Y_MOUSE, OPTIONS_USE_TOUCHSCREEN, OPTIONS_KEY_FORWARD, OPTIONS_KEY_LEFT, OPTIONS_KEY_BACK, OPTIONS_KEY_RIGHT, OPTIONS_KEY_JUMP, OPTIONS_KEY_INVENTORY, OPTIONS_KEY_SNEAK, OPTIONS_KEY_DROP, OPTIONS_KEY_CHAT, OPTIONS_KEY_FOG, OPTIONS_KEY_USE, OPTIONS_KEY_MENU_NEXT, OPTIONS_KEY_MENU_PREV, OPTIONS_KEY_MENU_OK, OPTIONS_KEY_MENU_CANCEL, OPTIONS_FIRST_LAUNCH, OPTIONS_LAST_IP, // Should be last! OPTIONS_COUNT }; class Minecraft; typedef std::vector StringVector; class Options { public: static bool debugGl; Options(Minecraft* minecraft, const std::string& workingDirectory = "") : minecraft(minecraft) { // elements werent initialized so i was getting a garbage pointer and a crash m_options.fill(nullptr); initTable(); // load() is deferred to init() where path is configured correctly } void initTable(); int getIntValue(OptionId key) { auto option = opt(key); return (option)? option->get() : 0; } std::string getStringValue(OptionId key) { auto option = opt(key); return (option)? option->get() : ""; } float getProgressValue(OptionId key) { auto option = opt(key); return (option)? option->get() : 0.f; } bool getBooleanValue(OptionId key) { auto option = opt(key); return (option)? option->get() : false; } float getProgrssMin(OptionId key) { auto option = opt(key); return (option)? option->getMin() : 0.f; } float getProgrssMax(OptionId key) { auto option = opt(key); return (option)? option->getMax() : 0.f; } Option* getOpt(OptionId id) { return m_options[id]; } void load(); void save(); void set(OptionId key, int value); void set(OptionId key, float value); void set(OptionId key, const std::string& value); void setOptionsFilePath(const std::string& path); void toggle(OptionId key); void notifyOptionUpdate(OptionId key, bool value); void notifyOptionUpdate(OptionId key, float value); void notifyOptionUpdate(OptionId key, int value); void notifyOptionUpdate(OptionId key, const std::string& value) {} private: template T* opt(OptionId key) { if (m_options[key] == nullptr) return nullptr; return dynamic_cast(m_options[key]); } std::array m_options; OptionsFile optionsFile; Minecraft* minecraft; }; #endif /*NET_MINECRAFT_CLIENT__Options_H__*/