Home Reference Source

src/components/Shape.js

import Component from '../systems/EntitySystem/Component';

export default class Shape extends Component {

  static factory() {
    return new Shape();
  }

  static get propsTypes() {
    return {
      layers: 'array(string)'
    };
  }

  get layers() {
    return [ ...this._layers ];
  }

  set layers(value) {
    if (!value) {
      this._layers = null;
      return;
    }

    if (!(value instanceof Array)) {
      throw new Error('`value` is not type of Array!');
    }
    for (let i = 0, c = value.length; i < c; ++i) {
      if (typeof value[i] !== 'string') {
        throw new Error(`\`value\` item #${i} is not type of String!`);
      }
    }

    this._layers = [ ...value ];
  }

  constructor() {
    super();

    this._layers = null;
  }

  dispose() {
    super.dispose();

    this._layers = null;
  }

  acceptsLayer(name) {
    if (typeof name !== 'string') {
      throw new Error('`name` is not type of String!');
    }

    const { _layers } = this;
    return !!_layers || _layers.indexOf(name) >= 0;
  }

  containsPoint(globalPoint, layer = null) {
    throw new Error('Not implemented!');
  }

  containsPointInChildren(globalPoint, layer = null) {
    let result = false;
    this.entity.performOnComponents(null, c => {
      if (!result && c instanceof Shape && c.containsPoint(globalPoint, layer)) {
        result = true;
      }
    });
    return result;
  }

}