diff options
Diffstat (limited to 'game/prefab')
-rw-r--r-- | game/prefab/ZapperObject.cpp | 2 | ||||
-rw-r--r-- | game/prefab/ZapperPoolScript.cpp | 12 | ||||
-rw-r--r-- | game/prefab/ZapperPoolScript.h | 3 | ||||
-rw-r--r-- | game/prefab/ZapperPoolSubScene.cpp | 2 |
4 files changed, 13 insertions, 6 deletions
diff --git a/game/prefab/ZapperObject.cpp b/game/prefab/ZapperObject.cpp index 712eca9..0a290e0 100644 --- a/game/prefab/ZapperObject.cpp +++ b/game/prefab/ZapperObject.cpp @@ -100,8 +100,6 @@ void ZapperObject::place(const crepe::vec2 & position, float rotation, float len this->sprite.beam.data.size.x = length; this->collider.dimensions = offset.rotate(rotation) * 2 + vec2(30, 30) * SCALE; - - this->set_active(true); } void ZapperObject::set_active(bool active) { diff --git a/game/prefab/ZapperPoolScript.cpp b/game/prefab/ZapperPoolScript.cpp index 812024b..e201149 100644 --- a/game/prefab/ZapperPoolScript.cpp +++ b/game/prefab/ZapperPoolScript.cpp @@ -23,10 +23,11 @@ void ZapperPoolScript::init() { } void ZapperPoolScript::fixed_update(crepe::duration_t) { + float threshold = camera_transform->position.x - camera_camera->viewport_size.x / 2 - OFFSCREEN_MARGIN; for (ZapperObject & zapper : this->pool) { if (!zapper.active) continue; - if (zapper.transform.position.x < camera_transform->position.x) + if (zapper.transform.position.x < threshold) zapper.set_active(false); } @@ -40,11 +41,16 @@ void ZapperPoolScript::spawn_random() { if (!zapper) return; // pool exhausted vec2 pos = { - .x = camera_transform->position.x + camera_camera->viewport_size.x / 2, + .x = camera_transform->position.x + camera_camera->viewport_size.x / 2 + OFFSCREEN_MARGIN, .y = Random::f(0.5, -0.5) * HALLWAY_HEIGHT, }; - zapper->place(pos, 0, Random::f(400, 200)); + bool horizontal = Random::b(); + float rotation = 90.0 * horizontal; + float length = horizontal ? Random::f(400, 200) : Random::f(200, 50); + + zapper->place(pos, rotation, length); + zapper->set_active(true); } OptionalRef<ZapperObject> ZapperPoolScript::get_next_zapper() { diff --git a/game/prefab/ZapperPoolScript.h b/game/prefab/ZapperPoolScript.h index 5daba79..6aee8b2 100644 --- a/game/prefab/ZapperPoolScript.h +++ b/game/prefab/ZapperPoolScript.h @@ -26,5 +26,8 @@ private: private: void spawn_random(); + +private: + static constexpr float OFFSCREEN_MARGIN = 40; }; diff --git a/game/prefab/ZapperPoolSubScene.cpp b/game/prefab/ZapperPoolSubScene.cpp index 923ed57..e341090 100644 --- a/game/prefab/ZapperPoolSubScene.cpp +++ b/game/prefab/ZapperPoolSubScene.cpp @@ -12,7 +12,7 @@ ZapperPoolSubScene::ZapperPoolSubScene(Scene & scene) Log::logf(Log::DEBUG, "Building zapper pool..."); vector<ZapperObject> pool; for (size_t i = 0; i < this->POOL_SIZE; i++) - pool.emplace_back(scene.new_object("zapper")); + pool.emplace_back(scene.new_object("zapper", "zapper")); BehaviorScript & behavior = this->controller.add_component<BehaviorScript>(); behavior.set_script<ZapperPoolScript>(std::move(pool)); } |