// // settings.h // // Store application settings // // Copyright (C) J. Belson 2000.02.27 // // $Author: jon $ : $Date: 2003/07/26 17:01:33 $ // #ifndef _SETTINGS_H_ #define _SETTINGS_H_ #include #include #include "fcolour.h" #define LIGHTING "lighting" #define HAZE_COLOUR "haze_colour" #define HAZE_INTENSITY "haze_intensity" #define CAMERA_COORDS "camera_coords" #define CAMERA_ANGLE "camera_angle" #define CAMERA_ROTATION "camera_rotation" #define CAMERA_LIFT "camera_lift" #define CAMERA_POSITION "camera_position" #define TARGET_POSITION "target_position" // Fractal generation #define PERLIN_ITERATIONS "perlin_iterations" #define PERLIN_SCALE "perlin_scale" #define PERLIN_PERSISTENCE "perlin_persistence" #define PERLIN2_OCTAVES "perlin2_octaves" #define PERLIN2_FD "perlin2_fd" #define PERLIN2_SCALE "perlin2_scale" #define PERLIN2_LACUNARITY "perlin2_lacunarity" #define MULTIFRACTAL_SCALE "multi_scale" #define MULTIFRACTAL_FD "multi_fd" #define MULTIFRACTAL_ITERATIONS "multi_iterations" #define MULTIFRACTAL_LACUNARITY "multi_lacunarity" #define RIDGED_SCALE "ridged_scale" #define RIDGED_FD "ridged_fd" #define RIDGED_GAIN "ridged_gain" #define RIDGED_LACUNARITY "ridged_lacunarity" #define RIDGED_ITERATIONS "ridged_iterations" #define PREVIEW_SEED "preview_seed" #define SUBDIVISION_FD "subdivision_fd" #define SYNTHESIS_FD "synthesis_fd" #define PREVIEW_HF_TYPE "preview_hf_type" #define SYNTHESIS_ITERATIONS "preview_synthesis_iterations" #define RENDER_DETAIL "render_detail" #define RENDER_BACKFACE_CULL "render_backface_cull" #define RENDER_FRUSTRUM_CULL "render_frustrum_cull" #define PREVIEW_DETAIL "preview_detail" #define ATMOSPHERICS "atmospherics" #define AMBIENT_COLOUR "ambient_colour" #define AMBIENT_INTENSITY "ambient_intensity" #define DIRECT_COLOUR "direct_colour" #define DIRECT_INTENSITY "direct_intensity" #define LIGHT_RAY_VECTOR "light_ray_vector" #define CLOUD_COLOUR "cloud_colour" #define CLOUD_PERSISTENCE "cloud_persistence" #define CLOUD_PRESENCE "cloud_presence" #define CLOUD_COVER "cloud_cover" #define CLOUD_SCALE "cloud_scale" #define CLOUD_SEED "cloud_seed" #define WATER_COLOUR "water_colour" #define WATER_REFLECTIVITY "water_reflectivity" #define WAVE_HEIGHT "wave_height" #define WAVE_SCALE "wave_scale" #define WATER_LEVEL "water_level" #define SKY_ZENITH_COLOUR "sky_zenith_colour" #define SKY_HORIZON_COLOUR "sky_horizon_colour" #define SKY_REALISTIC "sky_realistic" // Whether a window is open #define WINDOW_RENDER "window_render" #define WINDOW_PREVIEW "window_preview" #define WINDOW_SETTINGS "window_settings" // Window positions #define WINDOW_POS_MAIN "window_pos_main" #define WINDOW_POS_RENDER "window_pos_render" #define WINDOW_POS_RENDER_OUTPUT "window_pos_render_output" #define WINDOW_POS_PREVIEW "window_pos_preview" #define WINDOW_POS_PREVIEW_OUTPUT "window_pos_preview_output" #define WINDOW_POS_SETTINGS "window_pos_settings" // Should not be saved #define IMAGE_TO_SAVE "image_to_save" // Debug settings #define DEBUG_SHOW_NORMALS "debug_show_normals" #define DEBUG_SHOW_ENV_MAPS "debug_show_env_maps" #define DEBUG_UNCONSTRAINED_CAMERA "debug_unconstrained_camera" struct triplet { float a, b, c; }; enum hf_type { HF_PERLIN, HF_PERLIN2, HF_MULTIFRACTAL, HF_RIDGED_PERLIN, HF_SKYDOME, // Used to generate the skydome HF_TEST_FLAT // Plain flat landscape }; enum pref_type { eINT, eFLOAT, eBOOL, eINT2, eINT3, eFLOAT3, eCOLOUR }; struct int2 { int a, b, c; }; struct int3 { int a, b, c; }; struct float3 { float a, b, c; }; // Instance of a preference struct pref { pref_type type; union { int i; float f; bool b; float3 f3; int3 i3; } u; }; // Categories of preference enum pref_category { catWATER, catATMOSPHERICS, catLIGHTING, catSKY, catCLOUDS, catTREES, catTEXTURES, catDEBUG }; /** * Singleton pattern to store settings */ class settings { private: std::map pref_list; std::string filename; static const std::string settings_name; // Load settings from stream void load_settings(std::istream& str); // Save current settings void save_settings(std::ostream& str); // Check lookup was successful, else give error void check(bool b, std::string name, std::string type); // Reset to defaults for each category void load_defaults_water(void); void load_defaults_atmospherics(void); void load_defaults_lighting(void); void load_defaults_sky(void); void load_defaults_clouds(void); void load_defaults_trees(void); void load_defaults_textures(void); void load_defaults_debug(void); protected: settings(); public: ~settings(); bool get_float(std::string name, float* f); void set_float(std::string name, float f); bool get_int(std::string name, int* i); void set_int(std::string name, int i); bool get_bool(std::string name, bool* i); void set_bool(std::string name, bool i); bool get_float3(std::string name, float* x, float* y, float* z); void set_float3(std::string name, float x, float y, float z); bool get_int2(std::string name, int* x, int* y); void set_int2(std::string name, int x, int y); bool get_int3(std::string name, int* x, int* y, int* z); void set_int3(std::string name, int x, int y, int z); bool get_colour(std::string name, fcolour* col); void set_colour(std::string name, const fcolour& col); // Load app defaults void load_defaults(enum pref_category); static settings* get_instance(void); }; #endif // _SETTINGS_H_