Как я жидко обосрался, но вроде успеваю всё исправить до релиза.
Когда часто и много пишешь, надобность в промежуточном тестировании отпадает, потому, что код логичен и понятен, ты добавляешь новые алгоритмы и конструкции, которые полностью тебе понятны, код обрастает мясом, потом ещё и жирком, и вот ты пишешь новую подсистему которая поддерживает предудующую, но все равно не тестируешь, потому, что без полной картины это не будет работать по отдельности.
И вот проходит 10 часов, 20, 30, 40, 50, а ты все пишешь и пишешь, код реально разрастается. Но ты спокоен, потому, что твои скилы решают, нет ничего непонятного из того, что ты написал.
И вот приходит время запустить всю эту сложную конструкцию, вдохнуть жизнь в этого великана.
И ничего. Ну т.е. совсем ничего. Оно не работает, а времени остаётся очень мало. И начинается гонка со временем.
Сперва используешь альтернативные запасные варианты, которые откидывал, потому, что они казались менее гибкими - они работают, снова переходишь на основную логику, не работает.
Вся проблема заключается в том как автоматизировать генерацию ID для компонентов, чтобы пользователь не запаривался такими моментами, и как сделать так, чтобы она воспроизводилась раз за разом, с одними и теми же именами/путями/и прочим. Это довольно нетривиальная задача.
Ладно, но если даже у нас не совпадают ID компонентов, то компоненты должны пересоздаться. Вроде все логично, сидишь такой в десятый раз просматривает логику, код.
И вот вроде бы все заработало как нужно, и сохраняется и грузится, но вот такой подвох, что через раз компоненты удваиваются.
Так, а почему компоненты удваиваются, ведь по логике мы удаляем старый компонент если он был с неверным ID и восстанавливаем его из сохранения.
Вот собственно тут и была ошибка, скиллы конечно решают, но всегда есть куда расти, и невозможно знать, все паттерны поведения движка наизусть.
Оказывается нельзя просто так взять и удалить единственный компонент актера - даже не спрашивайте почему, просто примите как факт.
Нельзя.
Это не вызывает крах или ошибку, это просто игнорируется.(По крайней мере на этапе запуска из редактора)
Однако восстановление проходит. Т.е. восстановление проходит поверх неудаленного компонента.
В итоге пришлось отказаться от НОУВ системы поскольку она не применима к компонентам, хотя довольно хорошо показала себя в других плоскостях.
В итоге многие часы работы, куча структурок и методов пошли под нож. Использование альтернативного варианта оказалось проще и надёжнее. Мне хотелось вложить максимум в новую версию системы сохранений, чтобы пользователь мог легко интегрировать систему в свой проект, именно лёгкая интеграция и минимум действий это краеугольный камень всей философии системы сохранений.
Что ж, теперь конечно алгоритм будет немного проще, однако все заявленные ранее функции он будет выполнять.
Как минимум у меня есть ещё сутки, чтобы поспать и довести систему до релиза. Я постараюсь, но не думаю что успею 15 числа выпустить.
Каждый раз узнаю что-то новое, в этом и есть прелесть познания мира.
Спасибо, что дочитали до конца.