summaryrefslogtreecommitdiff
path: root/battles/src/RandomSpawner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'battles/src/RandomSpawner.cpp')
-rw-r--r--battles/src/RandomSpawner.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/battles/src/RandomSpawner.cpp b/battles/src/RandomSpawner.cpp
new file mode 100644
index 0000000..a81a18c
--- /dev/null
+++ b/battles/src/RandomSpawner.cpp
@@ -0,0 +1,38 @@
+#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 angle = angle_step * team + distribution_a(device);
+ const Point position {
+ distance * std::cos(angle),
+ distance * std::sin(angle),
+ };
+ return {position, {}};
+}
+
+
+} // namespace battles
+} // namespace kurator