Анимации

InnerCore, в отличии от его предшественника CoreEngine, имеет встроенную поддержку анимаций. Это значит, что для того, чтобы в мире появилась какая-то моделька, не нужно создавать моба. Достаточно создать лишь простейшую анимацию. Всего существует три вида анимаций - базовые анимации, анимации предметов и анимации текста. Давайте рассмотрим их возможности подробнее:

Базовые анимации

Статичные анимации

Для создания базовой анимации используется класс Animation.Base, который создает новую анимацию на координатах x, y, z:

var animation = new Animation.Base(x, y, z);

Чтобы отобразить нашу модельку без анимации в мире, достаточно задать рендер анимации и загрузить её:

animation.describe({render: render.getId()});
animation.load();

Стоит отметить, что render может принимать любое значение нативного рендера, как кастомного (render.getId()), так и ванильного.

Динамичные анимации

Для создания динамичных анимаций используется функция loadCustom(callable). В качестве параметра эта функция принимает лишь функцию, в которой мы и будем производить наши изменения в модели. Чтобы изменить рендер, достаточно лишь изменить его объект Render и вызвать метод refresh(). Для изменения расположения будем использовать функцию setPos(x, y, z), которая устанавливает новые координаты объекта в мире. Поскольку часто возникает необходимость изменить координаты относительно текущих, текущие будем получать из объекта coords. Внимание! Не изменяйте объект coords, это не изменит реальное расположение анимации в мире!

И, конечно же, пример:

animation.loadCustom(function(){ 
    this.setPos(this.coords.x + 0.5, this.coords.y, this.coords.z - 0.5); 
    this.refresh(); 
});

Замечу, что thisвнутри функции обновления анимации будет указывать на саму анимацию, что и используется в этом примере. 

Прочие переменные и методы объекта Animation.Base

  • load() - создает анимацию в игре
  • loadCustom(callable) - создает динамичную анимацию в игре, используя функцию callable для изменения рендера и положения. 
  • setPos(x, y, z) - устанавливает положение анимации в мире.
  • coords - получает координаты анимации в мире.
  • getAge() - возвращает 0. Вдруг кому пригодится. 
  • refresh() - обновляет объект рендера анимации.
  • destroy() - уничтожает анимацию в мире.
  • describe(description) - задает настройки для анимации в следующем формате:
{
    render: render,
    skin: skin,
    scale: scale
}

При этом параметры skin и scale считаются устаревшими, поскольку являются частью объекта рендера, а не самой анимации. Их использовать не следует. 

Анимации предметов

Также можно создать изображение в мире предмета.

var ani_item = new Animation.Item(x, y, z);

В остальном эта анимация похожа на обычную, только настраивается она методом animation.describeItem

ani_item.describeItem({

     //Настраиваем характеристики отоюражаемого предмета

     id: 280,

     count: 1,

     data: 0,

     //Рендерим палку

     //Устанавливаем размер

     size: 1,

     //Устанавливаем выравнивание по оси x/y/z

     rotation: "x\y\z",

     //Убираем неровности, если отрисовывается несколько анимаций

     notRandomize: true

});

Текстовые анимации

Также в мире можно отображать в мире текст:

var ani_txt = new Animation.Text(x, y, z);

//Настроим отображаемый текст

ani_txt.setText(text);