summaryrefslogtreecommitdiff
path: root/sim/src/Builder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sim/src/Builder.cpp')
-rw-r--r--sim/src/Builder.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/sim/src/Builder.cpp b/sim/src/Builder.cpp
new file mode 100644
index 0000000..d7cc893
--- /dev/null
+++ b/sim/src/Builder.cpp
@@ -0,0 +1,57 @@
+#include "Builder.h"
+
+#include <entt/entity/registry.hpp>
+
+#include <kurator/battles/components.h>
+#include <kurator/battles/Point.h>
+#include <kurator/universe/ShipType.h>
+#include <kurator/universe/TurretType.h>
+
+#include "Spawner.h"
+
+
+namespace kurator
+{
+namespace battles
+{
+
+
+Builder::Builder(entt::registry& _registry, Spawner& _spawner) :
+ registry {_registry},
+ spawner {_spawner}
+{
+}
+
+
+entt::entity
+Builder::operator()(const universe::ShipType& ship_type, const int team) const
+{
+ const auto entity = registry.create();
+ registry.emplace<universe::ShipType>(entity, ship_type);
+ registry.emplace<Team>(entity, team);
+ registry.emplace<Transform>(entity, spawner.get(team));
+ registry.emplace<FloatingMovement>(
+ entity,
+ ship_type.max_speed,
+ ship_type.max_speed * 2.0,
+ ship_type.max_speed * 3.0,
+ 100.0);
+ registry.emplace<AIState>(entity, Point{0.0, 0.0});
+ registry.emplace<HitPoints>(entity, ship_type.base_health_points);
+ return entity;
+}
+
+
+entt::entity
+Builder::operator()(const universe::TurretType& turret_type, const entt::entity& owner) const
+{
+ const auto entity = registry.create();
+ registry.emplace<universe::TurretType>(entity, turret_type);
+ registry.emplace<TurretControl>(entity, 0.0, owner);
+ registry.emplace<Transform>(entity, Point{0.0, 0.0}, 0.0, owner);
+ return entity;
+}
+
+
+} // namespace battles
+} // namespace kurator