Прототип BUTTONS REFRESH 3.8
Теория:
Реализовать централизованный пошаговый обработчик, который за 0.01 сек передвигает каждый предмет действия который надо двигать по заданному отрезку, предварительно проверив каждое на валидность. Это и будет самопроверка на целостнось, такой подход полностью исключит рассинхронизацию предметов в пространстве
Рабочие заметки:
Думаю надо использовать массивы под кол-во оставшихся отрезков и рассчитанные координаты чтобы хранить расчеты, и потом в самом конце шаговика делать конкретно исполнение.
Вопросы возникают относительно правильной очередности исполнения, раз у нас есть возможность делать отрезки в той же очередности как это прописано в кеше кнопки, нужно попытаться реализовать именно так. Если использовать массивы под координаты и под оставшееся кол-во отрезков то в принципе не возникает вопросов. Просто цикл for и все, ну а в массивах ячейки нумеровать исходя из очередности.
Так же есть вопросы относительно того как сохранить коррекцию позиций игроков до а процедуры выполния действий по расчетам. Ведь на каждое медленное действие свои коррекции и их нужно соблюсти.
Дать игроку право выбирать нужно ли ему чтобы предметы двигались как один жестко связанный предмет например это выгодно для лифтов состоящих из множества предметов объединенных в одно целое ну например пол и кнопка, но в то же время это не нужно для раздвигающихся дверей, особенно если их много и кто-то решит постоять в одной, в таком случае действие таких дверей будет приостановленно до тех пор пока игрок не перестанет мешать и будет крайне глупо смотрется, поэтому точно нужно добавлять выбор в настройках кнопки. Там же можно кстати позволить игроку выбрать профиль предмета, лифт, раздвижная дверь и прочее что так же может лучше организовать процедуру перемещения в пространстве. Ведь мы будем понимать что делает кнопка и правильней выстраивать проверки.
Сделано:
В настройки кнопок добавлена опция, Тип медленного передвижения::
Асинхронный (по умолчанию)
Синхронный
Исправлен баг с очисткой защиты слота после конца раунда
Полностью реализовано асинхронное и синхронное движение (100% контроль над синхронностью)
Запользовать шаговик как форсировщик, это позволит реализовать повороты т.к. форсировщик больше не будет иметь риск сломать последовательность действий.
Восстановить работу сломанной проверки доступа которая ориентировалась на запущенный таймер.
Кеширование UUID предметов с которыми будем работать до запуска шаговика, поскольку это очень тяжелая операция и выполняется она при каждом шаге шаговика что прям таки зверзки грузит.из предиктивной проверки вырезана поддержка медленных действий т.к. пока не придумал как внедрить без траты лишних ресурсов.
в предиктивной проверке внедрены оптимизации из шаговика, к примеру по новой уже не берет координату под каждое из действий для одного предмета
кеширование UUID вне функций PredictCheckButtonActions и ProcessButtonActions, кое где это дает хорошую экономию т.к. избавляет от необходимости кешить два раза подряд, если идет предиктивная а потом исполнительная сразу же.
Исправлены утечки памяти появившиеся после прототипа 3.6
Все ранее неуправляемые таймеры анимации кнопок теперь заменены датаймерами и их работа контролируется во время форсировки медленных действий до снятия снимков.
Как оказалось предиктивная проверка всех отрезков работает неправильно при наличие более одного медленного действия над одним предметом, данный баг выявился когда тот же принцип я хотел использовать в шаговом обработчике, тоже придется исправлять.
Добавить медленные повороты
Выделить все нужные данные под медленные действия в отдельный кеш, туда войдет:
статус кнопки во время запуска медленных действий
кол-во оставшихся шагов
структура будет повторять структуру основного кеша кнопок но важно понимать тут только нужные данные, так мы избавивмся от ненужного мусора в основном кеше, а так же от проблем сброса статуса кнопки, когда мы по итогу не понимаем что делала кнопка до запуска форсировщика.
Исправлен баг при выполнении пуш кнопкой медленных действий сразу же по концу можно тут же прожать и скипнуть анимацию кнопки.
Полностью переписан форсировщик, теперь он не делает что-то за кнопки, а заставляет их таймеры выполнятся сразу после запуска форсировщика, это избавляет от тонн кода и багов.