1 /**************************************************************************/ 2 /* Copyright 2009 Tim Day */ 3 /* */ 4 /* This file is part of Fracplanet */ 5 /* */ 6 /* Fracplanet is free software: you can redistribute it and/or modify */ 7 /* it under the terms of the GNU General Public License as published by */ 8 /* the Free Software Foundation, either version 3 of the License, or */ 9 /* (at your option) any later version. */ 10 /* */ 11 /* Fracplanet is distributed in the hope that it will be useful, */ 12 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ 13 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ 14 /* GNU General Public License for more details. */ 15 /* */ 16 /* You should have received a copy of the GNU General Public License */ 17 /* along with Fracplanet. If not, see <http://www.gnu.org/licenses/>. */ 18 /**************************************************************************/ 19 20 /*! \file 21 \brief Interface for class ControlTerrain. 22 */ 23 24 #ifndef _control_terrain_h_ 25 #define _control_terrain_h_ 26 27 #include "common.h" 28 #include "control.h" 29 #include "parameters_terrain.h" 30 #include "parameters_cloud.h" 31 #include "qtcommon.h" 32 33 class FracplanetMain; 34 35 //! Encapsulates controls for setting terrain generation parameters 36 /*! \todo: Way too much stuff in this classes .h file. Shift it to the .cpp! 37 */ 38 class ControlTerrain : public Control 39 { 40 private: 41 42 Q_OBJECT; 43 44 public: 45 46 ControlTerrain(FracplanetMain* tgt,ParametersTerrain* param_terrain,ParametersCloud* param_cloud); 47 ~ControlTerrain()48 ~ControlTerrain() 49 {} 50 51 public slots: 52 setObjectType(int id)53 void setObjectType(int id) 54 { 55 parameters_terrain->object_type=static_cast<ParametersObject::ObjectType>(id); 56 parameters_cloud->object_type=static_cast<ParametersObject::ObjectType>(id); 57 } setTerrainSeed(int v)58 void setTerrainSeed(int v) 59 { 60 parameters_terrain->seed=v; 61 } setTerrainSubdivisions(int v)62 void setTerrainSubdivisions(int v) 63 { 64 parameters_terrain->subdivisions=v; 65 } setCloudSubdivisions(int v)66 void setCloudSubdivisions(int v) 67 { 68 parameters_cloud->subdivisions=v; 69 } setSubdivisionsUnperturbed(int v)70 void setSubdivisionsUnperturbed(int v) 71 { 72 parameters_terrain->subdivisions_unperturbed=v; 73 } setVariationVertical(int v)74 void setVariationVertical(int v) 75 { 76 parameters_terrain->variation.z=v/100.0; 77 } setVariationHorizontal(int v)78 void setVariationHorizontal(int v) 79 { 80 parameters_terrain->variation.x=v/100.0; 81 parameters_terrain->variation.y=v/100.0; 82 } setNoiseTerms(int v)83 void setNoiseTerms(int v) 84 { 85 parameters_terrain->noise.terms=v; 86 } setNoiseFrequency(int v)87 void setNoiseFrequency(int v) 88 { 89 parameters_terrain->noise.frequency=v/100.0; 90 } setNoiseAmplitude(int v)91 void setNoiseAmplitude(int v) 92 { 93 parameters_terrain->noise.amplitude=v/100.0; 94 } setNoiseAmplitudeDecay(int v)95 void setNoiseAmplitudeDecay(int v) 96 { 97 parameters_terrain->noise.amplitude_decay=v/100.0; 98 } setBaseHeight(int v)99 void setBaseHeight(int v) 100 { 101 parameters_terrain->base_height=v/100.0; 102 } setPowerLaw(int v)103 void setPowerLaw(int v) 104 { 105 parameters_terrain->power_law=v/100.0; 106 } setSnowlineEquator(int v)107 void setSnowlineEquator(int v) 108 { 109 parameters_terrain->snowline_equator=v/100.0; 110 } setSnowlinePole(int v)111 void setSnowlinePole(int v) 112 { 113 parameters_terrain->snowline_pole=v/100.0; 114 } setSnowlinePowerLaw(int v)115 void setSnowlinePowerLaw(int v) 116 { 117 parameters_terrain->snowline_power_law=v/100.0; 118 } setSnowlineSlopeEffect(int v)119 void setSnowlineSlopeEffect(int v) 120 { 121 parameters_terrain->snowline_slope_effect=v/100.0; 122 } setSnowlineGlacierEffect(int v)123 void setSnowlineGlacierEffect(int v) 124 { 125 parameters_terrain->snowline_glacier_effect=v/100.0; 126 } setRivers(int v)127 void setRivers(int v) 128 { 129 parameters_terrain->rivers=v; 130 } setRiversSeed(int v)131 void setRiversSeed(int v) 132 { 133 parameters_terrain->rivers_seed=v; 134 } setLakeBecomesSea(int v)135 void setLakeBecomesSea(int v) 136 { 137 parameters_terrain->lake_becomes_sea=v/100.0; 138 } setOceansAndRiversEmissive(int v)139 void setOceansAndRiversEmissive(int v) 140 { 141 parameters_terrain->oceans_and_rivers_emissive=v/100.0; 142 } pickColourOcean()143 void pickColourOcean() 144 { 145 emit pickColour(colour_ocean_button,parameters_terrain->colour_ocean); 146 } pickColourShoreline()147 void pickColourShoreline() 148 { 149 emit pickColour(colour_shoreline_button,parameters_terrain->colour_shoreline); 150 } pickColourLow()151 void pickColourLow() 152 { 153 emit pickColour(colour_low_button,parameters_terrain->colour_low); 154 } pickColourRiver()155 void pickColourRiver() 156 { 157 emit pickColour(colour_river_button,parameters_terrain->colour_river); 158 } pickColourSnow()159 void pickColourSnow() 160 { 161 emit pickColour(colour_snow_button,parameters_terrain->colour_snow); 162 } pickColourHigh()163 void pickColourHigh() 164 { 165 emit pickColour(colour_high_button,parameters_terrain->colour_high); 166 } pickColourCloud()167 void pickColourCloud() 168 { 169 emit pickColour(colour_cloud_button,parameters_cloud->colour); 170 } setCloudsSubdivisionsUnlocked(bool f)171 void setCloudsSubdivisionsUnlocked(bool f) 172 { 173 if (f) 174 { 175 disconnect( 176 subdivisions_spinbox,SIGNAL(valueChanged(int)), 177 clouds_subdivisions_spinbox,SLOT(setValue(int)) 178 ); 179 } 180 else 181 { 182 clouds_subdivisions_spinbox->setValue(parameters_terrain->subdivisions); 183 connect( 184 subdivisions_spinbox,SIGNAL(valueChanged(int)), 185 clouds_subdivisions_spinbox,SLOT(setValue(int)) 186 ); 187 188 } 189 } 190 setCloudsEnabled(bool f)191 void setCloudsEnabled(bool f) 192 { 193 parameters_cloud->enabled=f; 194 } setCloudbase(int v)195 void setCloudbase(int v) 196 { 197 parameters_cloud->cloudbase=v/100.0f; 198 } setWeatherSystems(int v)199 void setWeatherSystems(int v) 200 { 201 parameters_cloud->weather_systems=v; 202 } 203 204 void regenerate_with_new_terrain_seed(); 205 void regenerate_with_new_rivers_seed(); 206 void regenerate_with_new_clouds_seed(); 207 208 private: 209 210 //! Pointer to the terrain parameters we control. 211 ParametersTerrain*const parameters_terrain; 212 213 //! Pointer to the cloud parameters we control. 214 ParametersCloud*const parameters_cloud; 215 216 //! Requests to regenerate terrain are forwarded to the top level GUI widget. 217 FracplanetMain* regenerate_target; 218 219 QComboBox* object_type_combo_box; 220 221 QLabel* base_height_label; 222 QSpinBox* base_height_spinbox; 223 224 QLabel* terrain_seed_label; 225 QSpinBox* terrain_seed_spinbox; 226 QLabel* subdivisions_label; 227 QSpinBox* subdivisions_spinbox; 228 QLabel* subdivisions_unperturbed_label; 229 QSpinBox* subdivisions_unperturbed_spinbox; 230 231 QLabel* variation_vertical_label; 232 QSpinBox* variation_vertical_spinbox; 233 QLabel* variation_horizontal_label; 234 QSpinBox* variation_horizontal_spinbox; 235 236 QLabel* noise_terms_label; 237 QSpinBox* noise_terms_spinbox; 238 QLabel* noise_frequency_label; 239 QSpinBox* noise_frequency_spinbox; 240 QLabel* noise_amplitude_label; 241 QSpinBox* noise_amplitude_spinbox; 242 QLabel* noise_amplitude_decay_label; 243 QSpinBox* noise_amplitude_decay_spinbox; 244 245 QLabel* power_law_label; 246 QSpinBox* power_law_spinbox; 247 248 QLabel* snowline_equator_label; 249 QSpinBox* snowline_equator_spinbox; 250 QLabel* snowline_pole_label; 251 QSpinBox* snowline_pole_spinbox; 252 QLabel* snowline_power_law_label; 253 QSpinBox* snowline_power_law_spinbox; 254 QLabel* snowline_slope_effect_label; 255 QSpinBox* snowline_slope_effect_spinbox; 256 QLabel* snowline_glacier_effect_label; 257 QSpinBox* snowline_glacier_effect_spinbox; 258 259 QLabel* rivers_label; 260 QSpinBox* rivers_spinbox; 261 QLabel* rivers_seed_label; 262 QSpinBox* rivers_seed_spinbox; 263 QLabel* lake_becomes_sea_label; 264 QSpinBox* lake_becomes_sea_spinbox; 265 266 QSpinBox* oceans_and_rivers_emissive_spinbox; 267 268 QLabel* clouds_seed_label; 269 QSpinBox* clouds_seed_spinbox; 270 271 QLabel* colour_label; 272 QPushButton* colour_ocean_button; 273 QPushButton* colour_shoreline_button; 274 QPushButton* colour_low_button; 275 QPushButton* colour_river_button; 276 QPushButton* colour_snow_button; 277 QPushButton* colour_high_button; 278 QPushButton* colour_cloud_button; 279 280 QCheckBox* clouds_subdivisions_unlock_checkbox; 281 QSpinBox* clouds_subdivisions_spinbox; 282 283 QPushButton* regenerate_button; 284 QPushButton* regenerate_with_new_terrain_seed_button; 285 QPushButton* regenerate_with_new_rivers_seed_button; 286 QPushButton* regenerate_with_new_clouds_seed_button; 287 288 QWidget* padding; 289 }; 290 291 #endif 292