Создание объектов во время выполнения

Очень часто игры или приложения добавляют новые объекты во время выполнения, возможно, в ответ на действия пользователя или для создания визуального эффекта.

В Wonderland Engine вы можете создавать объекты из пользовательского компонента JavaScript, используя либо Scene.addObject, либо Scene.addObjects.

Добавление одного объекта 

Добавление одного объекта осуществляется с помощью Scene.addObject:

import {Component, Property} from '@wonderlandengine/api';

export class Spawner extends Component {
  static TypeName = 'spawner';
  static Properties = {
    mesh: Property.mesh(),
    material: Property.material(),
  };

  start() {
    /* Создать новый объект с this.object в качестве родителя */
    const o = this.engine.scene.addObject(this.object);

    /* Присоединить mesh */
    o.addComponent('mesh', {
      mesh: this.mesh,
      material: this.material,
    });
  }
}

Добавление множества объектов 

Для добавления множества объектов Scene.addObjects обеспечивает лучшую производительность:

import {Component, Property} from '@wonderlandengine/api';

export class BatchSpawner extends Component {
  static TypeName = 'batch-spawner';
  static Properties = {
    mesh: Property.mesh(),
    material: Property.material(),
    count: Property.int(10),
  };

  start() {
    /* Создать 'count' новых объектов с this.object в качестве родителя и
     * сообщить Wonderland Engine, что нам потребуется 'count' компонентов (по одному на объект) */
    const objs = this.engine.scene.addObjects(10, this.object, this.count);

    /* Присоединить mesh'и */
    for(let o of objs) {
      o.addComponent('mesh', {
        mesh: this.mesh,
        material: this.material,
      });
      /* Разместить объект в случайном месте в объеме 10x10x10 */
      o.translate([Math.random()*10, Math.random()*10, Math.random()*10]);
    }
  }
}