#include "ObjectsScheduler.h" #include "../Config.h" #include "../Random.h" #include "../enemy/EnemyScript.h" #include "../missile/SpawnEvent.h" #include "api/Rigidbody.h" #include "api/Transform.h" #include "enemy/BattleScript.h" #include "prefab/ZapperPoolSubScene.h" using namespace crepe; void ObjectsScheduler::preset_0() { trigger_event(MissileSpawnEvent {}); trigger_event(MissileSpawnEvent {}); this->trigger_event(BattleStartEvent { .num_enemies = Random::i(2, 0), .battle = false, }); } void ObjectsScheduler::preset_1() { trigger_event(MissileSpawnEvent {}); this->trigger_event(BattleStartEvent { .num_enemies = Random::i(2, 1), .battle = false, }); } void ObjectsScheduler::preset_2() { trigger_event(CreateZapperEvent {}); this->trigger_event(BattleStartEvent { .num_enemies = Random::i(2, 1), .battle = false, }); } void ObjectsScheduler::preset_3() { trigger_event(CreateZapperEvent {}); } void ObjectsScheduler::preset_4() {} void ObjectsScheduler::boss_fight_1() { this->get_components_by_name("camera").front().get().data.linear_velocity.x = 0; this->get_components_by_name("player").front().get().data.linear_velocity.x = 0; this->trigger_event(BattleStartEvent { .num_enemies = 5, .battle = true, }); RefVector rb_back_forest = this->get_components_by_tag("forest_background"); for (Rigidbody & rb : rb_back_forest) { rb.data.linear_velocity.x = 0; } } bool ObjectsScheduler::boss_fight_1_event() { this->get_components_by_name("camera").front().get().data.linear_velocity.x = PLAYER_SPEED * 0.02; this->get_components_by_name("player").front().get().data.linear_velocity.x = PLAYER_SPEED * 0.02; RefVector rb_back_forest = this->get_components_by_tag("forest_background"); rb_back_forest.front().get().data.linear_velocity.x = 30; rb_back_forest.back().get().data.linear_velocity.x = 40; return false; } void ObjectsScheduler::init() { this->obstacles.push_back([this]() { preset_0(); }); this->obstacles.push_back([this]() { preset_1(); }); this->obstacles.push_back([this]() { preset_2(); }); this->obstacles.push_back([this]() { preset_3(); }); this->obstacles.push_back([this]() { preset_4(); }); this->obstacles.push_back([this]() { boss_fight_1(); }); // subscribe to battlewonevent this->subscribe([this](const BattleWonEvent & ev) -> bool { return this->boss_fight_1_event(); }); } void ObjectsScheduler::fixed_update(duration_t dt) { int pos_x = (int) this->get_components_by_name("camera").front().get().position.x; int boss_check = (pos_x - this->start_offset) / this->boss_fight_interval; if (boss_check > this->last_boss_check) { this->obstacles.back()(); this->last_boss_check = boss_check; } int obstacle_check = (pos_x - this->start_offset) / this->obstacle_interval; if (obstacle_check > this->last_obstacle_check) { this->obstacles[Random::i(this->obstacles.size() - 1, 0)](); this->last_obstacle_check = obstacle_check; } }