SashegDev 54dcd2078a feat(molehole): teleporting hole pairs, state machine and visuals
Первый этап из одиннадцати: дыры, парность, таймер, погружение, телепорт,
визуал и разбор координат. Мир пустоты ещё не трогаем — этого этапа ничего
не ломает в существующей игре.

Поток ровно как задумано:
  ПКМ            -> входная дыра, состояние WAITING_COORDS, таймера нет
  ввод "x, y, z" -> ответная дыра, PAIRED, -100% TP, кулдаун 30с, таймер 5с
  истёк 5с      -> обе дыры исчезают

Ключевые решения, которые стоит знать при доработке:

1. Повторный ввод координат в состоянии PAIRED ЗАБЛОКИРОВЕН. Иначе можно было
   бы переставлять ответную дыру и продлевать себе окно, то есть 5 секунд
   перестали бы быть 5 секундами. В WAITING_COORDS повторять можно сколько
   угодно: ошибся — передвинул.

2. TP и кулдаун списываются в момент создания ПАРЫ, а не прыжка. Значит пару
   можно создать и уйти не воспользовавшись — потрачено.

3. Порядок действий фиксированный: ПКМ, потом координаты. Раньше в описании
   было «порядок не важен», но раз координаты вводятся только после ПКМ,
   обратный порядок физически невозможен.

4. Парсер координат: три числа это x,y,z, два числа это x,z и Y берётся
   верхним блоком колонки. Формата «x, y» без Z не существует: двусмысленно,
   и читать его как две координаты безопаснее. Разбор ведётся только в
   WAITING_COORDS; всё остальное уходит в чат нетронутым — перехватчик не
   имеет права глотать переписку.

5. Проверка места дыры: блок точки обязан быть воздухом, над ним свободно,
   под ним опора. Иначе в дыру невозможно встать, а висящая в воздухе дыра
   бессмысленна.

6. Визуал идёт под одной задачей, как StarFx. Дыр может быть много одновременно
   у разных игроков, и задача на каждую сущность дала бы десятки записей в
   планировщике. Осколки: чёрное стекло, чёрный бетон и чёрный бетонный порошок,
   поднимаются и одновременно уменьшаются.

7. Погружение телепортацией на доли блока, а не скоростью. Скорость смешалась бы
   с сущностями в дыре, телепорт даёт ровное smoothstep-движение. По достижении
   -0.5 телепорт в ответную дыру с тем же смещением по Y.

Задел на будущее: Session уже несёт флаги fromVoid и owner под правило
«дыра из пустоты — только для открывшего», и поля entranceTo/exitTo под
механику острого предмета. Логика их пока не читает.
2026-10-15 21:06:48 +00:00
S
Description
BlackKnife plugin - DeltaMine
611 KiB
Languages
Java 100%