diff --git a/ecs-refactoring.md b/ecs-refactoring.md new file mode 100644 index 0000000..f66fb65 --- /dev/null +++ b/ecs-refactoring.md @@ -0,0 +1,33 @@ +# ECS рефакторинг — план + +## Суть + +Вместо классов врагов/снарядов с методами update() и draw() — единый контейнер сущностей, где каждая сущность это набор компонентов (позиция, скорость, тип, слово и т.д.). Логика вынесена в отдельные функции-системы, которые каждую итерацию проходят по нужным подмножествам сущностей и обновляют их. + +## Компоненты + +Позиция и скорость — общие для всех движущихся сущностей. Тип врага и данные слова — только для врагов. Ссылка на цель — только для снарядов. Броня и босс-данные — для усиленных и босс-врагов. Пустой маркер — чтобы система знала, что сущность является снарядом. + +## Системы (по порядку за кадр) + +1. Система волн — считает таймеры, решает когда спавнить нового врага и какого типа, создаёт сущность в контейнере. +2. Система ввода — получает слово, ищет лучшего врага (точное совпадение > более позднее слово > частичное), создаёт снаряд с ссылкой на цель. +3. Система движения — для всех сущностей с позицией и скоростью: позиция += скорость. +4. Система наведения — для снарядов с целью: вычисляет расстояние, если рядом — помечает попадание, если цель исчезла — удаляет снаряд, иначе двигает к цели. +5. Система урона — для снарядов с пометкой попадания: проверяет броню (если есть и не ноль — снимает), проверяет босс-данные (считает убитые слова в слое, если слой пройден — переключает), если враг умер — удаляет и вызывает callback. +6. Система рендера — берёт все враги, сортирует по высоте, рисует форму/слово/планку брони. Отдельно рисует снаряды. Отрисовка HUD отдельно от ECS. +7. Система очистки — удаляет из контейнера все сущности с пометкой "мёртвый". + +## Что остаётся за пределами ECS + +Волны, ввод, рендер HUD, очистка — это системы, но не entity. Жизни/счёт/номер волны — простые переменные, не сущности. Частицы — не сущности, рисуются как визуальный эффект по времени от взрыва. + +## Порядок миграции + +1. Контейнер сущностей — замена глобальных массивов. +2. Система движения — самая простая, проверка что всё работает. +3. Система наведения и урона — core gameplay. +4. Система волн — спавн. +5. Система ввода — поиск цели + создание снаряда. +6. Система рендера — вся отрисовка. +7. Остальное — очистка, game loop, удаление старых классов.