Возвращась к нашей любимой
Bézier curve.
Сейчас ковыряюсь над конвертером, чтоб писал из scsp-файлов нового формата в json-файлы нового формата.
Попробовал скормить туда курву из 18ти флоатов. И триальный spine и веб-плеер скушали эту курву, но есть ньюанс: анимация выглядит, как если бы я решил ему скормить не файлы из spine v3, а конвертированные файлы из spine v2.

Дерганная и нелепая.
Сравнивая с демо-файликами с офф-сайта пришёл к выводу, что креативы (разрабы э7) ещё те креативщики.
По демо-файликам курва состоит обычно из четырёх float-значений:
1) первое чёткое время анимации объекта в секундах;
2) чёткое значение, на которое надо поменять на первом указанном времени;
3) последнее чёткое время анимации объекта в секундах;
4) чёткое значение, на которое надо поменять на последнем указанном времени.
Если нагляднее, то это типа такого:
Код:
"curve": [ 1.167, 1.96, 1.577, 0.38 ]
Читать как:
- когда наступит 1.167 секунда анимации объекта, объект должен быть повернут на 1.96 градусов по часовой стрелке относительно своего обычного состояния;
- когда наступит 1.577 секунда анимации объекта, объект должен быть повернут на 0.38 градусов по часовой стрелке относительно своего обычного состояния (то есть типа немножко дёрнулся в одну сторону, потом одумался и вернулся в зад).
Может быть 8 float-значений, если анимация затрагивает сразу два параметра, позицию объекта по осям "x" и "y", допустим. Тогда сначала идут 4 значения для одного параметра, потом 4 значения для второго.
Что мы видим в файлах э7 старого формата? Везде по 4 float:
1) первый %% прохождения отрезка времени до следующего фрейма (значение плавает от 0 до 1, где 0 = 0%, 0.75 = 75%, а 1 = 100%);
2) %% изменения значения этого фрейма до следующего фрейма, на которое надо поменять на первом %% прохождения времени;
3) последний %% прохождения отрезка времени до следующего фрейма (значение плавает от 0 до 1, где 0 = 0%, 0.75 = 75%, а 1 = 100%);
4) %% изменения значения этого фрейма до следующего фрейма, на которое надо поменять на последнем %% прохождения времени.
Если нагляднее, то это типа такого:
Код:
"curve": [ 0.382, 0.57, 0.735, 1 ]
Читать как:
- когда пройдёт 38.2% времени до перехода на следующий фрейм, изменить значение параметра "y" до 57% относительно ожидаемого на следующем фрейме;
- когда пройдёт 73.5% времени до перехода на следующий фрейм, изменить значение параметра "y" до 100% относительно ожидаемого на следующем фрейме.
Прикол в том, что они решили сохранять курву для новых моделей из spine v.3.8 не в новом формате (см. выше), а в "расширенном старом самописном". Теперь они там хранят 9 (ДЕВЯТЬ) позиций для курвы. Чтоб ваааааааааще плавно всё анимировалось по милисекундам.
Код:
"curve": [
0.082, 0.028,
0.176, 0.104,
0.279, 0.216,
0.388, 0.352,
0.5, 0.5,
0.612, 0.648,
0.721, 0.784,
0.824, 0.896,
0.918, 0.972
]
Если я прав в своей мысли, то для меня самое простое будет:
- выдрать из этих 18 float-значений два из первой части и два из конца;
- прикрутить арифметику перевода процентов в реальные значения;
- сохранить в итоге высчитанные значения в свой вариант курвы, согласно формата spine v3.8 (или v4? я уже сам не знаю, что за формат раскуриваю).
Добавлено через 8 минут
Кстати, если я прав, то это означает, что я смогу таки конвертнуть без потерь старые модельки в новый формат, даже эту курву. И смогу избавиться от e7herder наследия, юзать только официальный spine-плеер без всяких костырей и бубнов.