---
# System prepended metadata

title: Galaxy Boss Trooper decomposition

---

# Galaxy Boss Trooper decomposition

реф: https://docs.google.com/document/d/1oyDt_thKsnUrFPa-AnIgolQATqXaIur0aGqDh3jSbIg/edit#heading=h.6ujo4gxpjozf

Базовое ограничение: **на одну бонуску может быть только одна пуля**.
То есть нету возможности запустить например 2 сюрикена - или любую другую комбинацию для каждого дроида по одной.
Это должна быть одна пуля, коллайдером которой мы управляем.

---

Нужен новый `ExtraWeapon` с новым фаер компонентом - наследником `LongLifeExtraWeaponComponent`

Идея: *Это может быть сюрикен* - то есть пуля с путём
так решится проблема с синхронизацией, и не нужны пресеты

Внутри фаер компонента мы будем управлять коллайдером пули и визуалом
положение из пути приймем для правого дроида
для левого координаты будут (1920-x, 1080-y)

Если нужно инициализировать что-то при построении - `Shuriken::Fire` инкапсулирует логику выбора пути и вызывает `FishWorldManager::GenerateBulletWithPath() -> BuildersManager::GenerateGameObject()`, в который можно добавить свой билдер с переопределённым `InitializeVisual()` или `InitializeSpecificFeatures()`

Далее по примеру из `MeteorRainFireSystemWeaponComponent` - мы можем напрямую добавлять/удалять круги в коллайдер
Пуля доступна как `m_bullet`
```cpp=
m_bullet->GetBody()->AddShapeCircle(fishing_core::Circle(radius, pos));
m_bullet->GetBody()->PopShapeCircle();
m_bullet->GetBody()->ModifyShapeCirclePositionByInernalId(collider_id, new_pos);
m_bullet->GetBody()->RemoveShapeCircleByInernalId(collider_id);
```

ещё лучше - как в `DirectedMeteorFireComponent` - наложить коллайдеры `GameObjectComponent`-ом на пулю, и в этом эффекте управлять (по примеру от `DirectedMeteorRainEffect`)

как выделить общий случай?

в частном случае Galaxy будут 2 массива кругов
в `::Update()` мы будем получать у тела пули позицию, относительно неё рассчитывать позиции каждого круга, и вызывать `ModifyShapeCirclePositionByInernalId`

в этом же эффекте будут дроиды

По окончанию бонуски зарелизится `FireComponent`, но мы сможем красивую hide анимацию сделать - потому как эффект в пуле.