text: #pragma once
  
  #include <functional>
  #include <string>
  #include <vector>
  
  class PropertyFile
  {
  public:
  	class Property;
  };
  class ControllerType;
  class DebugHudOptions;
  class RealmsEnvironment;
  class OptionValueInterface;
  class DevConnectionQuality;
  
  class Options
  {
  public:
  	class Option
  	{
  	public:
  		Option()=default;
  		Option(int i,char*c)
  		{
  			type=i;
  			desc=c;
  		}
  		bool operator==(Option const&op)
  		{
  			return op.desc==this->desc;
  		}
  		static Option ANIMATE_TEXTURES;
  		static Option AUTO_JUMP;
  		static Option DESTROY_VIBRATION;
  		static Option DIFFICULTY;
  		static Option DPAD_SCALE;
  		static Option FANCY_SKIES;
  		static Option FIELD_OF_VIEW;
  		static Option FULLSCREEN;
  		static Option GAMEPAD_MAP;
  		static Option GAMMA;
  		static Option GRAPHICS;
  		static Option GUI_SCALE;
  		static Option HIDE_GUI;
  		static Option INVERT_MOUSE;
  		static Option KEYBOARD_LAYOUT;
  		static Option LEFT_HANDED;
  		static Option LIMIT_FRAMERATE;
  		static Option LIMIT_WORLD_SIZE;
  		static Option MULTIPLAYER_GAME;
  		static Option MUSIC;
  		static Option NAME;
  		static Option RENDER_BOUNDING_BOXES;
  		static Option RENDER_GOAL_STATE;
  		static Option RENDER_PATHS;
  		static Option RESET_CLIENT_ID;
  		static Option SENSITIVITY;
  		static Option SERVER_VISIBLE;
  		static Option SHOW_CHUNK_MAP;
  		static Option SOUND;
  		static Option SPLIT_CONTROLS;
  		static Option SWAP_JUMP_AND_SNEAK;
  		static Option THIRD_PERSON;
  		static Option USE_TOUCHSCREEN;
  		static Option VIEW_BOBBING;
  		static Option VIEW_DISTANCE;
  		static Option XBOX_LIVE_VISIBLE;
  
  	public:
  		int type;			// 0
  		const char *desc;	// 4
  
  	public:
  		~Option(){}
  	};
  
  	Options(std::string const&, bool, std::unique_ptr<OptionValueInterface, std::default_delete<OptionValueInterface> >, bool);
  	~Options();
  	int getTexelAA();
  	bool getVRTapTurn();
  	bool getVRRollTurning();
  	void getVRMirrorTexture();
  	void unregisterObserver(void*);
  	void registerBoolObserver(void*, Options::Option const&, std::function<void (bool)>);
  	int getVRTapTurningSensitivity();
  	int getVRRollTurningSensitivity();
  	bool getDevAchievmentsAlwaysEnabled();
  	int getMSAA();
  	int getVRMSAA();
  	bool getBobView() const;
  	bool getHideGui() const;
  	bool getAutoJump() const;
  	float getFlySpeed() const;
  	float getGuiScale() const;
  	std::string getLanguage() const;
  	float getDpadScale() const;
  	bool isLeftHanded() const;
  	int getDifficulty() const;
  	bool getFancySkies() const;
  	bool getFullscreen() const;
  	bool getVRHudAtTop() const;
  	float getCameraSpeed() const;
  	int getFieldOfView() const;
  	bool getFixedCamera() const;
  	int getSensitivity() const;
  	bool getStutterTurn() const;
  	void getVRHudDrifts() const;
  	void getInvertYMouse() const;
  	bool getSmoothCamera() const;
  	bool getVRLinearJump() const;
  	bool getFancyGraphics() const;
  	bool getSplitControls() const;
  	int getVRHandPointer() const;
  	bool getLimitFramerate() const;
  	bool getLimitWorldSize() const;
  	bool getUseTouchScreen() const;
  	bool getVRHandsVisible() const;
  	bool getVRHeadSteering() const;
  	int getVRLinearMotion() const;
  	bool getVRStickyMining() const;
  	int getGameSensitivity() const;
  	bool getMultiPlayerGame() const;
  	void getStereoRendering() const;
  	bool getXboxLiveVisible() const;
  	float getDestroyVibration() const;
  	std::string getStutterTurnSound() const;
  	void getSwapJumpAndSneak() const;
  	bool getVRGazePitchBoost() const;
  	bool getTransparentLeaves() const;
  	void getVRHandControlsHUD() const;
  	bool getUseMouseForDigging() const;
  	bool getVRHandControlsItem() const;
  	int getViewDistanceChunks() const;
  	int getParticleViewDistance() const;
  	int getPlayerViewPerspective() const;
  	int getStutterConstantTimeMode() const;
  	void getVROptionsComfortControls() const;
  	void getVRShowComfortSelectScreen() const;
  	void getVRLivingRoomCursorCentered() const;
  	float getGamma() const;
  	bool getMusic() const;
  	bool getSound() const;
  	int getIntValue(Options::Option const*);
  	void setDifficulty(int);
  	void setRenderDebug(DebugHudOptions);
  	void unregisterLocks(void*);
  	void updateInputMode(InputMode);
  	float getProgressValue(Options::Option const*);
  	void setServerVisible(bool);
  	void checkVersionUpdate();
  	void registerOptionLock(void*, Options::Option const&, std::function<bool ()>);
  	void setDevShowChunkMap(bool);
  	void setMultiPlayerGame(bool);
  	void setXboxLiveVisible(bool);
  	void onScreenSizeChanged(int, int);
  	void registerIntObserver(void*, Options::Option const&, std::function<void (int)>);
  	void registerFloatObserver(void*, Options::Option const&, std::function<void (float)>);
  	void setCanUseCellularData(bool);
  	void setLastSeenPatchNotes(std::string const&);
  	void registerStringObserver(void*, Options::Option const&, std::function<void (std::string)>);
  	void setHasEverLoggedIntoXbl(bool);
  	void setPlayerViewPerspective(int);
  	void getChatTextToSpeechEnabled();
  	void getDevEnableProfilerOutput();
  	void setChatTextToSpeechEnabled(bool);
  	void setHasChosenNotToSignInToXbl(bool);
  	void set(Options::Option const*, std::string const&);
  	void set(Options::Option const*, bool);
  	void set(Options::Option const*, int);
  	void save();
  	void toggle(Options::Option const*, int);
  	float getValues(Options::Option const*);
  	std::string getUsername() const;
  	int getUIProfile() const;
  	void getDevLogTrace() const;
  	void getRenderDebug() const;
  	void getUseIPv6Only() const;
  	void getDevLogAppend() const;
  	void getServerVisible() const;
  	int getRealmsEndpoint() const;
  	void getUseLocalServer() const;
  	void getDevLogTimestamp() const;
  	void getDevShowChunkMap() const;
  	void getXboxLiveSandbox() const;
  	void getDevAutoLoadLevel() const;
  	void getDevLogAreaFilter() const;
  	void getDevResetClientId() const;
  	bool getCanUseCellularData() const;
  	int getLastSeenPatchNotes() const;
  	bool getRealmsRelyingParty() const;
  	void getDevConnectionQuality() const;
  	void getDevLogFlushImmediate() const;
  	void getDevLogPriorityFilter() const;
  	void getHasEverLoggedIntoXbl() const;
  	void getVRMouseUISensitivity() const;
  	void getMaxViewDistanceChunks() const;
  	void getRealmsEndpointPayment() const;
  	void getHasChosenNotToSignInToXbl() const;
  	void getRealmsRelyingPartyPayment() const;
  	void getVRLivingRoomMode() const;
  	float getProgressMax(Options::Option const*);
  	float getProgressMin(Options::Option const*);
  	bool getBooleanValue(Options::Option const*, InputMode);
  	float getProgressValue(Options::Option const*, InputMode);
  	void set(Options::Option const*, InputMode, bool);
  	void set(Options::Option const*, InputMode, float);
  	bool canModify(Options::Option const*);
  	void setShowRealmsTrialButtonFromPlayScreen(bool);
  	std::string getStringValue(Options::Option const*);
  	void set(Options::Option const*, float);
  	void setCreateRealmUpsellCount(int);
  	void getCreateRealmUpsellCount() const;
  	bool getShowRealmsTrialButtonFromPlayScreen() const;
  	bool getBooleanValue(Options::Option const*);
  	int getVRLivingRoomHintTime();
  	void setResetPlayerAlignment(bool);
  	void setVRLivingRoomHintTime(int);
  	void getVR180Turning();
  	bool getHideItemInHand() const;
  	void getDevUseFPSIndependentTurning() const;
  	void getVRJoystickAim() const;
  	void getResetPlayerAlignment() const;
  	void getVRRightStickDeadBand() const;
  	void getVRRightStickGazeAdjust() const;
  	void getVRRightStickPitchAssist() const;
  	void getVRRightStickPitchMaxAngle() const;
  	void getVRStickyMiningHandPointer() const;
  	void getVRRightStickPitchAssistSteppings() const;
  	void setVRLivingRoomMode(bool);
  	void setViewDistanceChunks(int);
  	void setHideGui(bool);
  	void setLanguage(std::string const&);
  	bool getKeyboardRemapping();
  	void setNumberOfOwnedRealms(int);
  	void setNumberOfFriendsRealms(int);
  	void getGamePadRemappingByType(ControllerType);
  	void setVROptionsComfortControls(bool);
  	void setRealmsInviteShowFriendsOption(bool);
  	void getRealmsEnvironment() const;
  	int getNumberOfOwnedRealms() const;
  	int getNumberOfFriendsRealms() const;
  	void getDevCreateRealmWithoutPurchase() const;
  	void getRealmsInviteShowFriendsOption() const;
  	void getMotionControllerRemapping();
  	void setDevLogTrace(bool);
  	void setDevLogAppend(bool);
  	void setDevLogTimestamp(bool);
  	void toggleDevLogAreaFilter(int);
  	void setDevLogFlushImmediate(bool);
  	void toggleDevLogPriorityFilter(int);
  	void _readFloat(std::string const&, float&);
  	std::string getMessage(Options::Option const*);
  	void hideOption(Options::Option const*);
  	void setBobView(bool);
  	void setTexelAA(bool);
  	void setAutoJump(bool, InputMode);
  	void setFlySpeed(float);
  	void setGuiScale(int);
  	void setIsFlying(bool);
  	void setUsername(std::string const&);
  	void setDpadScale(float);
  	void setVRTapTurn(bool);
  	void setFancySkies(bool);
  	void setFullscreen(bool);
  	void setVRHudAtTop(bool);
  	void _setDifficulty(int);
  	std::string getDescription(Options::Option const*, std::string);
  	void setCameraSpeed(float);
  	void setFieldOfView(float);
  	void setFixedCamera(bool);
  	void setHideScreens(bool);
  	void setSensitivity(float, InputMode);
  	void setStutterTurn(bool);
  	void setUseIPv6Only(bool);
  	void setVRHudDrifts(bool);
  	void setInvertYMouse(bool, InputMode);
  	void setIsLeftHanded(bool);
  	void setSmoothCamera(bool);
  	void setToggleCrouch(bool, InputMode);
  	void setVR180Turning(bool);
  	void setVRLinearJump(bool);
  	int getRecentSkinIds();
  	void setFancyGraphics(bool);
  	void setRecentSkinIds(std::vector<std::string, std::allocator<std::string> > const&);
  	void setSplitControls(bool);
  	void setVRHandPointer(bool);
  	void setVRJoystickAim(bool);
  	void setVRRollTurning(bool);
  	void _addInputAutoJump(std::vector<PropertyFile::Property, std::allocator<PropertyFile::Property> >&);
  	void setDevRenderPaths(bool);
  	void setHideItemInHand(bool);
  	void setLimitFramerate(bool);
  	void setLimitWorldSize(bool);
  	void setPpmDpadSizeOld(float);
  	void setRealmsEndpoint(std::string const&);
  	void setUseLocalServer(bool);
  	void setUseTouchScreen(bool);
  	void setVRHandsVisible(bool);
  	void setVRHeadSteering(bool);
  	void setVRLinearMotion(bool);
  	void setVRStickyMining(bool);
  	void _addInputInvertAim(std::vector<PropertyFile::Property, std::allocator<PropertyFile::Property> >&);
  	void _initDefaultValues(bool);
  	void _loadInputAutoJump(std::string const&, std::string const&);
  	void setFlatWorldLayers(std::string const&);
  	void setGameSensitivity(float);
  	void setLastBetaVersion(int);
  	void setStereoRendering(bool);
  	void setVRMirrorTexture(bool);
  	void _loadInputInvertAim(std::string const&, std::string const&);
  	void _readGamepadMapping(std::string const&, std::string const&);
  	void setDestroyVibration(bool, InputMode);
  	void setDevAutoLoadLevel(bool);
  	void setDevResetClientId(bool);
  	void setLastCustomSkinId(std::string const&);
  	void setLastMajorVersion(int);
  	void setLastMinorVersion(int);
  	void setLastPatchVersion(int);
  	void setStutterTurnSound(bool);
  	void setSwapJumpAndSneak(bool);
  	void setVRGazePitchBoost(bool);
  	void _addInputSensitivity(std::vector<PropertyFile::Property, std::allocator<PropertyFile::Property> >&);
  	void _readKeyboardMapping(std::string const&, std::string const&);
  	void setDevOffersUnlocked(bool);
  	void setRealmsEnvironment(RealmsEnvironment);
  	void setTransparentLeaves(bool);
  	void setVRHandControlsHUD(bool);
  	void _addInputToggleCrouch(std::vector<PropertyFile::Property, std::allocator<PropertyFile::Property> >&);
  	void _loadInputSensitivity(std::string const&, std::string const&);
  	void setDevRenderGoalState(bool);
  	void setRealmsRelyingParty(std::string const&);
  	void setUseMouseForDigging(bool);
  	void setVRHandControlsItem(bool);
  	void updateGameSensitivity();
  	void _loadInputToggleCrouch(std::string const&, std::string const&);
  	void setDevConnectionQuality(DevConnectionQuality);
  	void setDevDisableFileSystem(bool);
  	void setParticleViewDistance(float);
  	void setUseRetailXboxSandbox(bool);
  	void setVRJoystickAimInvertY(bool);
  	void setVRRightStickDeadBand(bool);
  	void setVRUIMouseSensitivity(float);
  	void setForceUseUnsortedPolys(bool);
  	void setRealmsEndpointPayment(std::string const&);
  	void setVRUsesNormalHitEffect(bool);
  	void setDevRenderBoundingBoxes(bool);
  	void setPreferPolyTessellation(bool);
  	void setVRRightStickGazeAdjust(bool);
  	void _addInputFeedbackVibration(std::vector<PropertyFile::Property, std::allocator<PropertyFile::Property> >&);
  	void setAdditionalHiddenOptions(std::vector<Options::Option const*, std::allocator<Options::Option const*> > const&);
  	void setDevEnableProfilerOutput(bool);
  	void setHMDPositionDisplacement(bool);
  	void setStutterConstantTimeMode(bool);
  	void setVRRightStickPitchAssist(bool);
  	void setVRTapTurningSensitivity(float);
  	void _loadInputFeedbackVibration(std::string const&, std::string const&);
  	void getGamepadKeymappingByIndex(ControllerType, int);
  	void setVRJoystickAimSensitivity(int);
  	void setVRRollTurningSensitivity(float);
  	void setAutomationServerRetryTime(float);
  	void setRealmsRelyingPartyPayment(std::string const&);
  	void setShowAdvancedVideoSettings(bool);
  	void setVRRightStickPitchMaxAngle(int);
  	void setVRShowComfortSelectScreen(bool);
  	void setVRStickyMiningHandPointer(bool);
  	void setHandObjectSortsWithTerrain(bool);
  	void setVRLivingRoomCursorCentered(bool);
  	void setVRUsesRedFlashForHitEffect(bool);
  	void setDevAchievmentsAlwaysEnabled(bool);
  	void setDevUseFPSIndependentTurning(bool);
  	void setDevCreateRealmWithoutPurchase(bool);
  	void setVRRightStickPitchAssistSteppings(int);
  	void _load();
  	void setMSAA(int);
  	void _readInt(std::string const&, int&);
  	void setGamma(float);
  	void setMusic(float);
  	void setSound(float);
  	bool _readBool(std::string const&, bool&);
  	void setSkinId(std::string const&);
  	void setVRMSAA(int);
  	void getAutoJump(InputMode) const;
  	bool getHideScreens() const;
  	int getSensitivity(InputMode) const;
  	int getInvertYMouse(InputMode) const;
  	void getToggleCrouch(InputMode) const;
  	void getDevRenderPaths() const;
  	void getPpmDpadSizeOld() const;
  	std::string getFlatWorldLayers() const;
  	void getLastBetaVersion() const;
  	void getDestroyVibration(InputMode) const;
  	std::string getLastCustomSkinId() const;
  	int getLastMajorVersion() const;
  	int getLastMinorVersion() const;
  	int getLastPatchVersion() const;
  	void getDevOffersUnlocked() const;
  	void getDevRenderGoalState() const;
  	int getDevDisableFileSystem() const;
  	void getNumGamePadRemappings(ControllerType) const;
  	void getUseRetailXboxSandbox() const;
  	void getVRJoystickAimInvertY() const;
  	void getForceUseUnsortedPolys() const;
  	void getVRUsesNormalHitEffect() const;
  	void getDevRenderBoundingBoxes() const;
  	void getPreferPolyTessellation() const;
  	void getHMDPositionDisplacement() const;
  	void getVRJoystickAimSensitivity() const;
  	void getAutomationServerRetryTime() const;
  	void getShowAdvancedVideoSettings() const;
  	bool getHandObjectSortsWithTerrain() const;
  	void getVRUsesRedFlashForHitEffect() const;
  	bool isFlying() const;
  	int getSkinId() const;
  public:
  	static Options * UI_PROFILES;
  	static Options * CAMERA_MODES;
  	static Options * MUSIC_MAX_VALUE;
  	static Options * MUSIC_MIN_VALUE;
  	static Options * SOUND_MAX_VALUE;
  	static Options * SOUND_MIN_VALUE;
  	static Options * DIFFICULTY_NAMES;
  	static Options * DIFFICULTY_LEVELS;
  	static Options * DPAD_SCALE_MAX_VALUE;
  	static Options * DPAD_SCALE_MIN_VALUE;
  	static Options * RENDER_DISTANCE_NAMES;
  	static Options * SENSITIVITY_MAX_VALUE;
  	static Options * SENSITIVITY_MIN_VALUE;
  	static Options * FIELD_OF_VIEW_MAX_VALUE;
  	static Options * FIELD_OF_VIEW_MIN_VALUE;
  	static Options * GUI_SCALE_OFFSET_VALUES;
  	static Options * TURN_RATE_MODIFIER_MAX_VALUE;
  	static Options * TURN_RATE_MODIFIER_MIN_VALUE;
  	static Options * GUI_SCALE_OFFSET_POCKET_VALUES;
  	static Options * PARTICLE_VIEW_DISTANCE_MAX_VALUE;
  	static Options * PARTICLE_VIEW_DISTANCE_MIN_VALUE;
  	static Options * VR_JOYSTICKAIM_SENSITIVITY_STEPS;
  	static Options * VR_TAP_TURN_SENSITIVITY_MAX_VALUE;
  	static Options * VR_TAP_TURN_SENSITIVITY_MIN_VALUE;
  	static Options * VR_UI_MOUSE_SENSITIVITY_MAX_VALUE;
  	static Options * VR_UI_MOUSE_SENSITIVITY_MIN_VALUE;
  	static Options * VR_ROLL_TURN_SENSITIVITY_MAX_VALUE;
  	static Options * VR_ROLL_TURN_SENSITIVITY_MIN_VALUE;
  	static Options * VR_RIGHTSTICK_PITCH_MAXANGLE_ANGLES;
  	static Options * VR_RIGHTSTICK_PITCHASSIST_STEPPINGS_DIVISORS;
  	static Options * GUI_SCALE;
  };
  
  