Была реализована новая крутая фича для проекта — собственный язык выражений.
Что это?
Это маленький скриптовый язык, который живёт прямо в JSON-конфигах и позволяет нам описывать поведение анимаций, частиц, рендер-контроллеров формулами:
"если игрок в воде — согни ему руки",
"поворачивай голову моба на угол между текущим и целевым по y" и т.д.
Зачем это нужно?
✔️ Системы нужна для нескольких важных вещей:
Быстрое создание контента и проверка его через нейронку — нейронки намного проще работать с таким форматом, по сути тут все строится на выражениях и математике, сам формат очень хорошо читаем и предсказуем, за счет чего нейронка может выдать крутые результаты (которые я покажу в следующих постах)
✔️ Моддинг — с помощью данной системы легко расширять функциноал, все описывается в файлах, не требует не единой строчки кода, это дает большие возможности для модификаций и подгрузки контента удаленно
Как устроен язык
В основе — неймспейсы (обращение к данным через точку):
1 -
query.* (короткая форма q.*) — читает состояние игры/сущности: query.is_sprinting, query.is_walk, query.target_distance2 -
variable.* (короткая форма v.*) — переменные, которые можно менять и объявлять прямо в формулах: variable.zombie_pose = 03 -
math.* — математика: math.sin, math.cos, math.clamp, math.lerp, math.pow, math.random_integer и т.д.4 -
this — ссылка на себя же в некоторых контекстахдополнительно:
5 - арифметика:
+ - * /6 - сравнения:
== != < > <= >=7 - логика:
&& || !8 - тернарник:
условие ? тогда : иначеГде уже используется и будет использоваться
✔️ Анимации — вся система стейт-машин анимаций построена на выражениях: условия переходов между стейтами, присваивания переменных, блендинг между клипами
✔️ Частицы — планируем полностью формат частиц, где через выражения описывается всё: скорость, цвет со временем, форма эмиттера, коллизии с воксельным миром
✔️ Условия в behavior tree мобов — вместо жёстко захардкоженных C#-условий ("здоровье < 20%", "враг ближе 5 блоков") — гибкие выражения прямо в JSON дерева поведения
📌 Прикрепил примеры из анимации, в них хорошо видно что переходы идут по условию (идем, бежим и т.д), так же видна работа переменных, когда мы выбираем клип по значению переменной, а сама переменная при входе в состояние, присваивает рандомное значение. Это дает эффект проигрывание рандомного клипа каждый раз при входе в состояние
#blockworld #devlog #gamedev


