Ironworks
Своя игра студии в жанре «построй завод»: от бура на рудном поле до производственных линий. Пишем на Swift без сторонних библиотек, здания рисуем через Blender.

Задача
Заводские стратегии на телефоне обычно либо упрощают механику, либо начинают тормозить, когда завод разрастается. Цель — полноценная симуляция, которая держит 120 кадров в секунду на экранах ProMotion.
Архитектура
Симуляция — чистый Swift без SpriteKit. Она идёт фиксированными шагами, 60 раз в секунду, и одинаково считается на любом устройстве. Отрисовка отдельно: SpriteKit рисует до 120 кадров и сглаживает движение между шагами.
Мир генерируется из зерна шумом GameplayKit и хранится чанками. У каждого чанка своя тайловая карта, поэтому на экране только то, что видно. Камера приближает от 0,25 до 2× с инерцией.
Что уже работает
Размещение и поворот зданий, инвентарь и ручной крафт, буры на топливе, ленты с двумя полосами, подземные ленты и разделители, манипуляторы и ящики. 112 автотестов и ноль предупреждений компилятора — это правило проекта. Следующие этапы — плавильни и сборочные машины.
Арт
Здания моделируются в Blender, рендерятся сверху и переводятся в пиксель-арт в палитре игры: охра, графит и бирюза.
Шаг симуляции и кадр отрисовки
Вся линия от бура до ящика движется от одного спускового колеса на 60 зубьев: это шаг симуляции. Маховик рядом крутится плавно, как отрисовка на 120 кадрах.
Экраны
Технически
- Фиксированный шаг 60 раз в секунду, отрисовка до 120 кадров на ProMotion.
- Бур выдаёт кусок руды за 150 шагов, полоса ленты везёт до 7 предметов в секунду, цикл манипулятора — 54 шага.
- Мир из зерна: шум GameplayKit, чанки с тайловыми картами, камера 0,25–2× с инерцией и щипком.
- Данные игры — в JSON: предметы, рецепты, здания и стартовый набор.
- Swift 6 и SpriteKit без сторонних зависимостей, 112 тестов на Swift Testing.
Swift 6 · SpriteKit · SwiftUI · GameplayKit · Blender