🧠 Система выражений (Expressions) в Blockworld!
Была реализована новая крутая фича для проекта — собственный язык выражений.
Что это?
Это маленький скриптовый язык, который живёт прямо в JSON-конфигах и позволяет нам описывать поведение анимаций, частиц, рендер-контроллеров формулами:
"если игрок в воде — согни ему руки",
"поворачивай голову моба на угол между текущим и целевым по y" и т.д.
Зачем это нужно?
✔️ Системы нужна для нескольких важных вещей:
Быстрое создание контента и проверка его через нейронку — нейронки намного проще работать с таким форматом, по сути тут все строится на выражениях и математике, сам формат очень хорошо читаем и предсказуем, за счет чего нейронка может выдать крутые результаты (которые я покажу в следующих постах)
✔️ Моддинг — с помощью данной системы легко расширять функциноал, все описывается в файлах, не требует не единой строчки кода, это дает большие возможности для модификаций и подгрузки контента удаленно
Как устроен язык
В основе — неймспейсы (обращение к данным через точку):
1 - query.* (короткая форма q.*) — читает состояние игры/сущности: query.is_sprinting, query.is_walk, query.target_distance
2 - variable.* (короткая форма v.*) — переменные, которые можно менять и объявлять прямо в формулах: variable.zombie_pose = 0
3 - 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
Была реализована новая крутая фича для проекта — собственный язык выражений.
Что это?
Это маленький скриптовый язык, который живёт прямо в JSON-конфигах и позволяет нам описывать поведение анимаций, частиц, рендер-контроллеров формулами:
"если игрок в воде — согни ему руки",
"поворачивай голову моба на угол между текущим и целевым по y" и т.д.
Зачем это нужно?
✔️ Системы нужна для нескольких важных вещей:
Быстрое создание контента и проверка его через нейронку — нейронки намного проще работать с таким форматом, по сути тут все строится на выражениях и математике, сам формат очень хорошо читаем и предсказуем, за счет чего нейронка может выдать крутые результаты (которые я покажу в следующих постах)
✔️ Моддинг — с помощью данной системы легко расширять функциноал, все описывается в файлах, не требует не единой строчки кода, это дает большие возможности для модификаций и подгрузки контента удаленно
Как устроен язык
В основе — неймспейсы (обращение к данным через точку):
1 - query.* (короткая форма q.*) — читает состояние игры/сущности: query.is_sprinting, query.is_walk, query.target_distance
2 - variable.* (короткая форма v.*) — переменные, которые можно менять и объявлять прямо в формулах: variable.zombie_pose = 0
3 - 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