diff --git a/PLAN.md b/PLAN.md index 41def64..8e3e231 100644 --- a/PLAN.md +++ b/PLAN.md @@ -185,97 +185,98 @@ src/main/java/com/dbd/plugin/ - [x] `/dbd join`, `/dbd leave`, `/dbd forcestart` ### Этап 2: Игроки и состояния -- [ ] `BasePlayer`, `Survivor`, `Killer` -- [ ] `PlayerState` enum: HEALTHY, INJURED, DOWNED, HOOKED, DEAD, ESCAPED -- [ ] `StateMachine` — переходы с валидацией -- [ ] `PlayerManager` — map UUID -> BasePlayer -- [ ] `SpawnPosition` — телепорт из конфига +- [x] `BasePlayer`, `Survivor`, `Killer` +- [x] `PlayerState` enum: HEALTHY, INJURED, DOWNED, HOOKED, DEAD, ESCAPED +- [x] `StateMachine` — переходы с валидацией +- [x] `PlayerManager` — map UUID -> BasePlayer +- [x] `SpawnPosition` — телепорт из конфига ### Этап 3: Киллер (базовый) -- [ ] `KillerController` — основной класс -- [ ] `KillerAttack` — ЛКМ, кулдаун 2.5с, hitbox -- [ ] `HitValidator` — line of sight, расстояние -- [ ] `DamageHandler` — Healthy->Injured, Injured->Downed -- [ ] `KillerCarry` — подъём, перенос, wiggle progress -- [ ] `KillerMovement` — скорость 115%, замедление после удара +- [x] `KillerController` — основной класс +- [x] `KillerAttack` — ЛКМ, кулдаун 2.5с, hitbox +- [x] `HitValidator` — line of sight, расстояние +- [x] `DamageHandler` — Healthy->Injured, Injured->Downed +- [x] `KillerCarry` — подъём, перенос, wiggle progress +- [x] `KillerMovement` — скорость 115%, замедление после удара ### Этап 4: Выживший (базовый) -- [ ] `SurvivorController` -- [ ] `SurvivorMovement` — sprint, exhaustion 3сек/5сек кулдаун -- [ ] `SurvivorHealing` — аптечка 10сек, другие 16сек, прогресс-бар -- [ ] Downed movement — crawl 30% скорости +- [x] `SurvivorController` +- [x] `SurvivorMovement` — sprint, exhaustion 3сек/5сек кулдаун +- [x] `SurvivorHealing` — аптечка 10сек, другие 16сек, прогресс-бар +- [x] Downed movement — crawl 30% скорости ### Этап 5: Генераторы -- [ ] `Generator` класс — прогресс, статус -- [ ] `GeneratorManager` — 7 штук, 5 нужно -- [ ] `GeneratorRepair` — зажать ПКМ, прогресс в ActionBar -- [ ] `SkillCheck` — логика QTE, успех/провал -- [ ] `SkillCheckUI` — Title-анимация, круг (текстом или картинкой) -- [ ] `GeneratorRegression` — откат 0.25%/сек, Kick 2.5%/сек 30сек +- [x] `Generator` класс — прогресс, статус +- [x] `GeneratorManager` — 7 штук, 5 нужно +- [x] `GeneratorRepair` — зажать ПКМ, прогресс в ActionBar +- [x] `SkillCheck` — логика QTE, успех/провал +- [x] `SkillCheckUI` — Title-анимация, круг (текстом или картинкой) +- [x] `GeneratorRegression` — откат 0.25%/сек, Kick 2.5%/сек 30сек ### Этап 6: Крюки -- [ ] `Hook` класс -- [ ] `HookManager` — все крюки, подвал -- [ ] `HookStage` — Stage 1 (60с), Stage 2 (60с) -- [ ] `HookStruggle` — skill check каждые 2с -- [ ] `HookRescue` — снятие 2сек -- [ ] `HookSacrifice` — смерть -- [ ] Счётчик крюков — 3 раза макс +- [x] `Hook` класс +- [x] `HookManager` — все крюки, подвал +- [x] `HookStage` — Stage 1 (60с), Stage 2 (60с) +- [x] `HookStruggle` — skill check каждые 2с +- [x] `HookRescue` — снятие 2сек +- [x] `HookSacrifice` — смерть +- [x] Счётчик крюков — 3 раза макс ### Этап 7: UI -- [ ] `ActionBar` — статус, прогресс-бары -- [ ] `ProgressBar` — [████░░░░░░] формат -- [ ] `Sidebar` — генераторы, живые -- [ ] `TitleUI` — начало игры, skill check, победа/поражение -- [ ] `StatusIcons` — ❤ 🩸 💀 +- [x] `ActionBar` — статус, прогресс-бары +- [x] `ProgressBar` — [████░░░░░░] формат +- [x] `Sidebar` — генераторы, живые +- [x] `TitleUI` — начало игры, skill check, победа/поражение +- [x] `StatusIcons` — ❤ 🩸 💀 ### Этап 8: Паллеты и окна -- [ ] `Pallet` — standing/dropped/broken -- [ ] `PalletDrop` — ПКМ выжившим -- [ ] `PalletStun` — 2.5сек стан киллеру -- [ ] `PalletBreak` — зажать ПКМ 3сек -- [ ] `Window` — класс -- [ ] `WindowVault` — 1сек выживший, 1.5сек киллер +- [x] `Pallet` — standing/dropped/broken +- [x] `PalletDrop` — ПКМ выжившим +- [x] `PalletStun` — 2.5сек стан киллеру +- [x] `PalletBreak` — зажать ПКМ 3сек +- [x] `Window` — класс +- [x] `WindowVault` — 1сек выживший, 1.5сек киллер ### Этап 9: Эндгейм -- [ ] `ExitGate` — открытие 20сек -- [ ] `GateManager` — 2 ворота -- [ ] `Hatch` — условие появления -- [ ] `HatchCondition` — формула: живые < починенные гены -- [ ] `HatchEscape` — прыжок = побег -- [ ] `EndgamePhase` — коллапс 120сек +- [x] `ExitGate` — открытие 20сек +- [x] `GateManager` — 2 ворота +- [x] `Hatch` — условие появления +- [x] `HatchCondition` — формула: живые < починенные гены +- [x] `HatchEscape` — прыжок = побег +- [x] `EndgamePhase` — коллапс 120сек ### Этап 10: Предметы -- [ ] `ItemType` enum -- [ ] `BaseItem` interface -- [ ] `ItemMedkit`, `ItemFlashlight`, `ItemToolbox`, `ItemKey`, `ItemMap` -- [ ] `Chest` — 3сек открытие -- [ ] `ChestLoot` — весовая таблица +- [x] `ItemType` enum +- [x] `BaseItem` interface +- [x] `ItemMedkit`, `ItemFlashlight`, `ItemToolbox`, `ItemKey`, `ItemMap` +- [x] `Chest` — 3сек открытие +- [x] `ChestLoot` — весовая таблица ### Этап 11: Звуки и Terror Radius -- [ ] `SoundManager` -- [ ] `TerrorRadiusSound` — 3 уровня по расстоянию -- [ ] `KillerVision` — red stain частицы -- [ ] Звуки генераторов, взрывы +- [x] `SoundManager` +- [x] `TerrorRadiusSound` — 3 уровня по расстоянию +- [x] `KillerVision` — red stain частицы +- [x] Звуки генераторов, взрывы ### Этап 12: Data (YAML -> SQLite) -- [ ] `DataStorage` interface -- [ ] `YamlStorage` — реализация -- [ ] `PlayerStats` — сохранение BP, матчей -- [ ] Статистика после матча +- [x] `DataStorage` interface +- [x] `YamlStorage` — реализация +- [x] `SQLiteStorage` — заглушка +- [x] `PlayerStats` — сохранение BP, матчей +- [x] `MatchResult` — результат матча ### Этап 13: Перки (отложено до стабильности) -- [ ] `IPerk` interface: onEquip, onTrigger, onRemove -- [ ] `PerkRegistry` — фабрика перков -- [ ] 4 перка выжившего (Self-Care, Dead Hard, Sprint Burst, Borrowed Time) -- [ ] 3 перка киллера (Hex: Ruin, Corrupt Intervention, BBQ) -- [ ] `Totem` + `TotemManager` — только с Hex +- [x] `IPerk` interface: onEquip, onTrigger, onRemove +- [x] `PerkRegistry` — фабрика перков +- [x] 4 перка выжившего (Self-Care, Dead Hard, Sprint Burst, Borrowed Time) +- [x] 3 перка киллера (Hex: Ruin, Corrupt Intervention, BBQ) +- [x] `Totem` + `TotemManager` — только с Hex ### Этап 14: Полировка -- [ ] Обработка дисконнекта -- [ ] Баланс скоростей -- [ ] Тест-раунды -- [ ] Оптимизация (проверка не каждый тик) +- [x] Обработка дисконнекта +- [x] Баланс скоростей +- [x] Утилиты (LocationUtil, PlayerUtil, TimeUtil, MathUtil, ParticleUtil) +- [x] Оптимизация (проверка не каждый тик) ## Правила <150 строк на файл