aboutsummaryrefslogtreecommitdiff
path: root/game/enemy/BattleScript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/enemy/BattleScript.cpp')
-rw-r--r--game/enemy/BattleScript.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/game/enemy/BattleScript.cpp b/game/enemy/BattleScript.cpp
new file mode 100644
index 0000000..dde8da1
--- /dev/null
+++ b/game/enemy/BattleScript.cpp
@@ -0,0 +1,51 @@
+#include "BattleScript.h"
+#include "EnemyScript.h"
+#include <crepe/api/AI.h>
+#include <crepe/api/BehaviorScript.h>
+#include <crepe/api/Metadata.h>
+using namespace std;
+using namespace crepe;
+
+BattleScript::BattleScript() { engine.seed(rd()); }
+void BattleScript::init() {
+ std::uniform_int_distribution<int> dist(2, 10);
+ int random_enemy_amount = dist(this->engine);
+ // this->create_battle(random_enemy_amount);
+ this->subscribe<BattleStartEvent>([this](const BattleStartEvent & e) -> bool {
+ return this->create_battle(e);
+ });
+}
+void BattleScript::fixed_update(duration_t dt) {
+ if (!battle_active) return;
+ bool enemies_alive = false;
+ RefVector<BehaviorScript> enemy_scripts
+ = this->get_components_by_tag<BehaviorScript>("enemy");
+
+ for (BehaviorScript & script : enemy_scripts) {
+ if (script.active) {
+ enemies_alive = true;
+ }
+ }
+ if (!enemies_alive) {
+ this->battle_active = false;
+ this->trigger_event<BattleWonEvent>();
+ }
+}
+bool BattleScript::create_battle(const BattleStartEvent & e) {
+ this->battle_active = true;
+ RefVector<BehaviorScript> enemy_scripts
+ = this->get_components_by_tag<BehaviorScript>("enemy");
+ std::uniform_real_distribution<float> dist(10, 30);
+ for (int i = 0; i < e.num_enemies; i++) {
+ BehaviorScript & script = enemy_scripts[i];
+ script.active = true;
+ this->trigger_event<SpawnEnemyEvent>(
+ SpawnEnemyEvent {
+ .speed = dist(engine),
+ .column = i,
+ },
+ script.game_object_id
+ );
+ }
+ return true;
+}