X-Git-Url: http://git.treefish.org/~alex/seamulator.git/blobdiff_plain/1f181535dc46342c079b13e35547673e570a099b..b23099025e3db2682b0260c0cef3a807fad136a8:/src/seamulator.cpp?ds=inline diff --git a/src/seamulator.cpp b/src/seamulator.cpp index c5f7936..98e92df 100644 --- a/src/seamulator.cpp +++ b/src/seamulator.cpp @@ -1,20 +1,19 @@ #include #include +#include #include +#include #include #include "sea.h" #include "seaview.h" #include "watersurface.h" -const int LATTICE_SIZE{128}; -const double LATTICE_EXTEND{10}; const int INIT_WINDOW_POS_X{50}; const int INIT_WINDOW_POS_Y{50}; const int INIT_WINDOW_WIDTH{800}; const int INIT_WINDOW_HEIGHT{600}; -const double INIT_VIEW_DISTANCE{LATTICE_EXTEND * 1.5}; const double INIT_VIEW_AZIMUTH{0}; const double INIT_VIEW_ALTITUDE{M_PI / 4}; const char WINDOW_TITLE[]{"seamulator"}; @@ -23,18 +22,44 @@ SeaPtr sea; WaterSurfacePtr surface; std::unique_ptr seaView; +struct Settings { + double windSpeed; + int latticeSize; + double latticeExtend; + double amplitudeFactor; +}; + +namespace po = boost::program_options; + void glDisplayFunc(); void glReshapeFunc(int width, int height); void glMouseFunc(int button, int state, int x, int y); void glMotionFunc(int x, int y); +Settings parseArguments(int argc, char** argv, po::options_description desc); int main(int argc, char** argv) { - std::srand(std::time(0)); + po::options_description desc("Available options"); + desc.add_options() + ("help,h", "produce help message") + ("windspeed,w", po::value()->default_value(10), + "wind speed given in m/s") + ("size,s", po::value()->default_value("small"), + "lattice size (small/large)") + ("amplitude,a", po::value()->default_value(1), + "amplitude multiplicator") + ; + + Settings settings = parseArguments(argc, argv, desc); - surface = std::make_shared(LATTICE_SIZE, LATTICE_EXTEND); - sea = std::make_shared(surface); - seaView = std::make_unique(INIT_VIEW_DISTANCE, INIT_VIEW_AZIMUTH, + std::srand(std::time(0)); + surface = std::make_shared(settings.latticeSize, + settings.latticeExtend); + sea = std::make_shared(surface, + settings.windSpeed, + settings.amplitudeFactor); + seaView = std::make_unique(settings.latticeExtend * 1.5, + INIT_VIEW_AZIMUTH, INIT_VIEW_ALTITUDE); glutInit(&argc, argv); @@ -54,6 +79,35 @@ int main(int argc, char** argv) return 0; } +Settings parseArguments(int argc, char** argv, po::options_description desc) +{ + po::variables_map vm; + po::store(po::parse_command_line(argc, argv, desc), vm); + po::notify(vm); + + if (vm.count("help")) { + std::cout << desc << "\n"; + exit(1); + } + + Settings settings; + + settings.windSpeed = vm["windspeed"].as(); + + if (vm["size"].as() == "large") { + settings.latticeSize = 256; + settings.latticeExtend = 20; + settings.amplitudeFactor = vm["amplitude"].as() * 0.00000004; + } + else { + settings.latticeSize = 128; + settings.latticeExtend = 10; + settings.amplitudeFactor = vm["amplitude"].as() * 0.0000001; + } + + return settings; +} + void glDisplayFunc() { glClear(GL_COLOR_BUFFER_BIT);