Сделал кое-чего в Иколайси, но выход v0.8 будет ещё не скоро, надо ввести аж 16 фич!
Я понял то, что нужен ещё один слой обработки кода. Процессирование парсенного, чтобы в нём генерировать функции из темплейтов и всего такого, а то из байткода очень костыльно получается!
Ещё я раздумывал над библиотеками, в частности на ГУИ и загрузкой картинок, аудио и другого.
Из загрузок картинок и аудио я понял, что они должны идти не разными либами, а одной. Ведь что картинка, что аудио это по сути тензор. Картинка это 2D-тензор 1-4 канальных элементов (Можно представит как 3D-тензор). Воксельная 3D-модель это вообще 4D-тензор и каналов там может быть больше чем 4 цвета (металличность, спекулярность и что там ещё). При этом они все растровые. Но главное, что объединение позволит объеденить загрузку ауидо и видео из видеофайла, например, mkv. Были бы там либы audio и video, так пришлось бы audio.LoadFile(path) и video.LoadFile(path), а обе эти либы обращались бы к другой либе для загрузки такого медиаконтейнера и файл читался бы 2 раза.
Хотя есть же ещё субтитры...
А из ГУИ я понял то, что функции для лейаута не дожны быть исключительно частью ГУИ, ведь в лейауты надо вставлять и другие объекты. Например, полочки, предметы на полочках, сектора круга, элементы прикреплённые к октодеревьям (ахах).
Если вы не поняли, то лейаут это простая система, которая выравнивает положение элементов, имеющих размеры, по некоторым правилам (паддинг, например). Вот горизонтальный лейаут может превратить ███ в █ █ ██ ППП ███. В первом варианте всё рисовалось начиная с (0,0), а во втором варианте нарисовалось 5 элементов шириной : 1 1 2 3 3 через паддинг 1.
Да и вообще, всё это смахивает на ECS, виджеты это вроде бы хорошо, всё скачет и кликает, бликает и мерцает, но что если я хочу ввести это не в ГУИ, а в произвольные объекты? Например, модельку кита.
Тут и получается, что надо разделять на ECS. Отдельные сущности имеют разные компоненты и их обработкой занимаются системой. В данном случае расположением предметов может заниматься лейаутинг ГУИ.
А вообще, что-то типа ECS можно было реализовать что в Лайси (в будущем), что в C, если создать внутреннюю динамическую типизацию как в питоне. В питоне же есть объекты, а у объектов есть аттрибуты. И питон работает на интерпретаторе, написанном на C. Для ECS можно сделать более хардкодно и создать просто структуру с хешмапами. И вот берём мы ассет. Ассет это сериализованная (переведённая в байты) сущность, в ней есть хешмапа с сериализованными данными. Тип можно не указывать, так как система сама поймёт, что за тип она использует. Загружаем ассет и программный объект, один компонент — 3D-моделька для графического движка, 3D-моделька-коллайдер для физического движка, несколько вариантов 3D-моделек для LOD (level of detail)-движка, чтоб не покоробило некрасиво, всякие игровые данные (ID, хп, XП, мп, инвентарь) и для каждого типа данных своя система модифицирует и изменяет компоненты.
Поэтому и надо движки разделять. Даже если это движок лейаутинга.
Кстати, я решил устроить ЮНИТ-ТЕСТЫ! Только единственный юнит это Иколайси, а тесты в директории tests. А то я так часто изрезаю Иколайси, что всё ломается. Надо проверять тестингом. Сейчас я заново ввожу импорт (который сломался после dapapy) и тесты буксуются ет.