Сделал масштабный перепил архитектуры:
- Вынес рендер в игровую библиотеку. Что это значит? То, что в самом движке остался лишь базовый функционал в виде RenderAPI (рисование примитивов, текста, изображений), а вот для мира и игровых объектов необходимо писать полностью кастомный рендер. К счастью, в игровой библиотеке уже есть дефолтный, перепиленный до новых требований. В первую очередь это дает гораздо большую свободу для разработки кастомных эффектов, типа grayscale и т.д, так как движок просто последовательно запускает три стадии рендеринга - препроцесс, сам рендеринг и постпроцесс. Также это означает избавление от лишней конкретики на уровне ядра, что дает больший уровень абстракции, а значит и возможность адаптировать движок под большее количество задумок.
- Также в игровую библиотеку вынесен функционал Time, а старый класс Time преобразован в чисто технический Timer, отсчитывающий время с начала запуска процесса игры. Все остальное - секунды, минуты, часы, дни и т.д. - теперь полностью на усмотрение авторов игры. В демке, разумеется, этот функционал есть.
- Полностью переделан механизм сортировки спрайтов. Добавлены слои и их менеджер. Это позволило добиться гораздо более прозрачной работы с сортировкой и отрисовкой таких эффектов как освещение и тени. Слоям можно задавать имя, что делает работу с ними еще более удобной.
- В классе World оставлен лишь базовый функционал, который по сути можно было раскидать по другим классам, но удобнее все же держать его там.
- Убран ненужный уже метод getRegion из текстуры.
- В класс шейдера добавлена возможность задавать цвет через setUniform(String name, Color value).
- Также различный мелкий рефракторинг, исправления и улучшения.
Учтите, что теперь для правильного понимания, как работать с движком, ознакомление с кодом демки - обязательно
AfterEngine GitHubAfterEngine Demo GitHub