LINUXTALKS.CO

Wrecksmith - физическая песочница

 ,

L


0

1

Какое-то время назад я начал писать 3D физический движок на C#. С нуля. Без игрового движка, без физических библиотек. Только твёрдые тела, столкновения и рендер поверх голого OpenGL.

Это задумывалось как учебный проект. Потом я добавил соединения. Потом разрушение. Потом рэгдоллы, машины, взрывы и материалы, которые ломаются по-разному.

В какой-то момент это перестало быть демкой движка и стало похоже на игру.

Так что теперь я двигаюсь в эту сторону. Получается песочница про то, как строить и разрушать. Всё в ней по-прежнему написано руками, и этим я тихо горжусь.

Сейчас оформляю всё в Steam. Дальше будет больше.

Ответ на: комментарий от kevlarbeaver

Провёл большую работу под капотом. Визуально это мало на что повлияло, но фактически я перелопатил всю программу.

Цель этапа была - собрать всё это в Native AOT (нужно для нормальной сборки под Steam: один нативный exe, без рантайма, быстрый старт). По дороге пришлось убрать два главных блокера.

Первый - сериализация сцен. Был рефлексивный System.Text.Json, перевёл на source-generated JsonSerializerContext.

Второй и большой - System.Drawing/GDI+. Он не AOT-совместим и тянул за собой WinForms. Использовался в трёх местах: декодирование PNG-иконок, загрузка текстур и запекание атласа шрифта. Всё переписал на прямые P/Invoke к плоскому API gdiplus.dll

После этого выключил UseWindowsForms, выкинул зависимость от Windows Desktop framework, DPI-awareness выставил сам через SetProcessDpiAwarenessContext, и поставил PublishAot=true.

Итог: dotnet publish -c Release -r win-x64 собирает один нативный exe, .NET ставить не нужно, внешних зависимостей ноль.

kevlarbeaver    
★★
Windows / Chrome (DE)