summaryrefslogtreecommitdiff
path: root/sim/src/RandomSpawner.cpp
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-12-03 00:44:07 +0100
committerAki <please@ignore.pl>2022-12-03 00:44:07 +0100
commit18a763bcb19c5ece4b7b7d079dab07a1d915deb6 (patch)
tree137278522c98f5cb5cf4067886444b20b3eaf82d /sim/src/RandomSpawner.cpp
parent18eba7f30381c05ee1c03bec5f537ec7d4dc9815 (diff)
downloadkurator-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.cpp42
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