Cook 2.0.1

Вышел первый стабильный релиз Cook2 – программы сборки проектов на языке D. По сравнению с первой версией проекта, Cook2 перенес множество серьезных изменений и нововведений:

  • Полностью переделана система обработки параметров командной строки – теперь она работает с помощью std.getopt. Подробнее читайте в конольной справке (–help) и в документации по проекту.
  • Произведен рефакторинг парсера импортов. Появилась поддержка условий “version” и “debug” (в настоящее время других инструментов сборки для D с подобной функциональностью практически нет).
  • Появилась поддержка разрешения внешних зависимостей у проектов: в качестве таковых можно указать удаленные Git-репозитории или локальные каталоги в системе. Загрузка кода из репозиториев возможна с использованием HTTPS и SSH. Исходники зависимостей и соответствующие объектные файлы хранятся в специальной папке в домашнем каталоге пользователя (~/.cook2) и являются общими для всех проектов, которые объявляют эти зависимости.
  • Улучшена система конфигурации: так, в папке ~/.cook2 можно хранить файл глобальной конфигурации default.conf, который будет использован по умолчанию всеми проектами.
  • Исправлено множество багов – в частности, серьезный баг с отслеживанием обратных зависимостей у модулей D.

Скачать Cook 2.0.1
Репозиторий Cook2 на GitHub

Raycast

В физическом движке dmech реализована поддержка пересечения тел с лучом (raycast). В качестве алгоритма для этого используется разновидность GJK. На данный момент есть возможность “стрелять” лучом в статические и динамические выпуклые тела, в ближайшем будущем появится также поддержка полигональных мешей.

Все изменения доступны в репозитории dmech на GitHub.

Угловое ограничение в dmech

В физическом движке dmech существенно улучшена реализация ограничений для тел (constraints):

  • Добавлено угловое ограничение (AngleConstraint), которое заставляет два тела принимать один и тот же поворот относительно друг друга;
  • Улучшено ограничение расстояния (DistanceConstraint), которое удерживает тела на определенном расстоянии друг от друга. Теперь можно ограничивать минимальное или максимальное расстояние между телами. Также этот вид ограничения может работать в качестве пружины с задаваемой жесткостью.
  • Комбинация углового и скользящего (Slider) соединений дает призматическое, которое позволяет двум телам скользить вдоль оси между ними, но не позволяет им вращаться относительно этой оси. Также возможны другие комбинации – в будущем в движке планируется реализовать класс составных ограничений.

Все изменения доступны в репозитории dmech на GitHub.

Поддержка мешей в dmech

В dmech возвращена поддержка статических полигональных мешей. Она существовала и ранее, но ее на долгое время пришлось убрать по причине несовместимости с нынешней архитектурой движка – сейчас, наконец-то, ее код удалось адаптировать.
Проверка столкновений с полигонами основана на все том же алгоритме MPR, но с оптимизацией за счет разбиения пространства (а именно, используется одна из разновидностей BVH – иерархии ограничивающих объемов).
Поддерживается проверка столкновений меша с любыми выпуклыми телами (включая боксы, цилиндры, конусы и т.д.) Единственное ограничение – в настоящее время полигональные меши могут быть только статичными телами.

Изменения доступны в репозитории dmech на GitHub.