aboutsummaryrefslogtreecommitdiff
path: root/lib/factories/sumo.js
blob: b0e5416bf545f652fb82dcc9c95d4e05ce7f6fdf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { Entity } from '@serpentity/serpentity';

import PositionComponent from '@serpentity/components.position';
import PixiContainerComponent from '../components/pixi_container';
import PixiFactory from '../factories/pixi';

/**
 * Factory object that contains many methods to create prefab entities.
 *
 * @type object
 * @name SumoFactory
 */
export default {

  /**
   * Creates a sumo entity and adds it to the engine. Can override
   * position in the config object
   *
   * @function createSumo
   * @memberof SumoFactory
   * @param {external:Serpentity} [engine] the serpentity engine to attach
   * to. If not sent, it will not be attached.
   * @param {object} [config] the config to override the entity, accepts
   * the key `position` as an object with an x and y property.
   * @return {external:Serpentity.Entity} the created entity
   */
  createSumo(engine, config = {}) {

    const entity = new Entity();

    entity.addComponent(new PositionComponent(config.position));

    const container = config.container || {
      container: PixiFactory.createSumo()
    };

    // Match the symbol position with the entity position on init
    // Otherwise it's up to systems
    const position = entity.getComponent(PositionComponent);
    container.container.position.x = position.x;
    container.container.position.y = position.y;

    entity.addComponent(new PixiContainerComponent(container));

    if (engine) {
      engine.addEntity(entity);
    }

    return entity;
  }
};