
Один простой механизм управляет практически всем в игре Cities: Skylines
PatientZero 5 минут назад Один простой механизм управляет практически всем в игре Cities: Skylines 16 мин 4 Алгоритмы * Игры и игровые консоли Разработка игр * Перевод Автор оригинала: James Monger Мне захотелось...
Значимый прорыв формирует отрасль ИИ: PatientZero 5 минут назад Один простой механизм управляет практически всем в игре Cities: Skylines 16 мин 4 Алгоритмы * Игры и игровые консоли Разработка игр * Перевод Автор оригинала: James Monger Мне захотелось узнать, как игра Cities: Skylines обеспечивает постоянное движение, которое мы видим в растущем городе — жители ищут работу, туристы посещают достопримечательности, мусоровозы ездят по своим маршрутам, люди находят себе пары, но не смог найти почти никакой информации. Поэтому я декомпилировал игру и решил разобраться сам. Выяснилось, что почти все взаимодействия в игре выполняются через простую, изящную систему: торги, напоминающие фондовый рынок.
ОсновыНа этом упрощённом фондовом рынке есть предложения «покупки» и «продажи», которые связывают посредники. Когда вы видите в Cities: Skylines человека или транспорт, перемещающийся из одной точки в другую, часто это связано с тем, что через TransferManager (наш «рынок») было передано предложение TransferOffer. Здания, транспорт и города могут создавать предложения «покупки»/«продажи» определённых вещей, а когда находится соответствие с другой стороны, результаты доставляются или собираются.
Технические детали
Предложения добавляются с TransferReason, приоритетом и количеством. Приоритет используется для ранжирования предложений. TransferReason может быть чем-то осязаемым наподобие Oil или Coal для промышленных зданий, но может быть и Fire для горящего здания, Crime, если требуется полиция, или даже Partner, когда сим ищет свою половинку.
Существует и множество других типов: катафалки, сбор мусора, школы и шоппинг. Информация для этого поста была получена при реверс-инжиниринге игры Cities: Skylines и чтении её декомпилированного кода. Фрагменты кода очень близки к тем, которые были выпущены в игре; для ясности я переименовал и удалил часть кода.
Если у вас есть эта игра и вы хотите изучить её самостоятельно, то хорошее введение можно найти в Cities: Skylines Modding Guide. Избавляемся от мусораЧтобы понять эту систему трансферов в общих чертах, давайте рассмотрим, как устроен сбор мусора. У класса CommonBuildingAI есть метод HandleCommonConsumption, вызываемый из SimulationStep здания; он контролирует электричество, мусор, потребление воды и так далее.
Отраслевые последствия
Мусор постепенно накапливается в m_garbageBuffer здания (скорость накопления — это просто число, получаемое, исходя из типа здания, уровня, правил района и некоторых других факторов). На каждом шаге симуляции выполняется проверка: если буфер достиг значения не менее 200 и на пятигранном кубике выпадет нужное число и игрок разблокировал сбор мусора, то здание решает выставить мусор для сбора. Мусор, ожидающий сбораПеред этим оно просматривает свои гостевые транспортные средства (m_guestVehicles) и добавляет свободное место для каждого, которое уже едет, чтобы собрать TransferReason.
Garbage, то есть для мусоровозов, которые уже находятся на маршруте, но пока не добрались до здания.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





