diff options
author | Aki <please@ignore.pl> | 2022-12-03 00:44:07 +0100 |
---|---|---|
committer | Aki <please@ignore.pl> | 2022-12-03 00:44:07 +0100 |
commit | 18a763bcb19c5ece4b7b7d079dab07a1d915deb6 (patch) | |
tree | 137278522c98f5cb5cf4067886444b20b3eaf82d /sim/src/RandomSpawner.cpp | |
parent | 18eba7f30381c05ee1c03bec5f537ec7d4dc9815 (diff) | |
download | kurator-18a763bcb19c5ece4b7b7d079dab07a1d915deb6.zip kurator-18a763bcb19c5ece4b7b7d079dab07a1d915deb6.tar.gz kurator-18a763bcb19c5ece4b7b7d079dab07a1d915deb6.tar.bz2 |
Moved battles module files to sim
Diffstat (limited to 'sim/src/RandomSpawner.cpp')
-rw-r--r-- | sim/src/RandomSpawner.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/sim/src/RandomSpawner.cpp b/sim/src/RandomSpawner.cpp new file mode 100644 index 0000000..b85d140 --- /dev/null +++ b/sim/src/RandomSpawner.cpp @@ -0,0 +1,42 @@ +#include "RandomSpawner.h" + +#include <cmath> + +#include <kurator/battles/components.h> +#include <kurator/battles/Point.h> + + +namespace kurator +{ +namespace battles +{ + + +RandomSpawner::RandomSpawner(const int total_teams, const double distance, const double variation) : + angle_step {2.0 * M_PI / total_teams}, + device {}, + distribution_d {distance - distance * variation, distance + distance * variation}, + distribution_a {-variation * M_PI, variation * M_PI} +{ +} + + +Transform +RandomSpawner::get(const int team) +{ + const double distance = distribution_d(device); + const double clean_angle = angle_step * team; + const double angle = clean_angle + distribution_a(device); + double facing = clean_angle + M_PI; + if (facing > 2 * M_PI) + facing -= 2 * M_PI; + const Point position { + distance * std::cos(angle), + distance * std::sin(angle), + }; + return {position, facing}; +} + + +} // namespace battles +} // namespace kurator |