Source: map/map-core.js

/**
 * @classdesc
 *
 * Map class responsible for mapping game objects.
 *
 * @namespace Raycaster.Map
 * @class Raycaster.Map
 * @constructor
 * @since 0.6.0
 *
 * @param {object} options - Map specific configuration settings.
 * @param {Raycaster} [raycaster] - Parent raycaster object.
 */
export function Map(options, raycaster) {
    /**
    * Reference to parent Raycaster object.
    *
    * @name Raycaster.Map#_raycaster
    * @type {Raycaster}
    * @private
    * @since 0.9.0
    */
    this._raycaster = raycaster ? raycaster : false;
    /**
    * Mapped object's type
    *
    * @name Raycaster.Map#type
    * @type {string}
    * @readonly
    * @since 0.6.0
    */
    this.type;
    /**
    * If set true, map will be tested by ray. Otherwise it will be ignored.
    *
    * @name Raycaster.Map#active
    * @type {boolean}
    * @default true
    * @since 0.7.2
    */
    this.active;
    /**
    * If set true, map will be automatically updated on scene update event.
    *
    * @name Raycaster.Map_dynamic
    * @type {boolean}
    * @default false
    * @since 0.6.0
    */
    this._dynamic = false;
    /**
    * If set true, map will be treated by ray as circle. Set automaticalyy on map update.
    *
    * @name Raycaster.Map#circle
    * @type {boolean}
    * @default false
    * @since 0.9.0
    */
    this.circle = false;
    /**
    * Reference to mapped object.
    *
    * @name Raycaster.Map#object
    * @type {object}
    * @readonly
    * @since 0.6.0
    */
    this.object;
    /**
    * Array of mapped object's vertices used as rays targets.
    *
    * @name Raycaster.Map#_points
    * @type {array}
    * @private
    * @since 0.6.0
    */
    this._points = [];
    /**
    * Array of mapped object's segments used to test object's intersection with ray.
    *
    * @name Raycaster.Map#_segments
    * @type {array}
    * @private
    * @since 0.6.0
    */
    this._segments = [];
    /**
    * Get array of mapped object's vertices used as rays targets.
    *
    * @method Raycaster.Map#getPoints
    * @memberof Raycaster.Map
    * @instance
    * @since 0.6.0
    *
    * @param {Raycaster.Ray} [ray] - {@link Raycaster.Ray Raycaster.Ray} object used in some some types of maps.
    *
    * @return {Phaser.Geom.Point[]} Array of mapped object's vertices.
    */
    this.getPoints;
    /**
    * Get array of mapped object's segments used to test object's intersection with ray.
    *
    * @method Raycaster.Map#getSegments
    * @memberof Raycaster.Map
    * @instance
    * @since 0.6.0
    *
    * @param {Raycaster.Ray} [ray] - {@link Raycaster.Ray Raycaster.Ray} object used in some some types of maps.
    *
    * @return {Phaser.Geom.Line[]} Array of mapped object's segments.
    */
    this.getSegments;
    /**
    * Get mapped object's bounding box.
    *
    * @method Raycaster.Map#getBoundingBox
    * @memberof Raycaster.Map
    * @instance
    * @since 0.9.0
    *
    * @return {Phaser.Geom.Rectangle} Mapped object's bounding box.
    */
    this.getBoundingBox;
    /**
    * Update object's map of points and segments.
    *
    * @method Raycaster.Map#updateMap
    * @memberof Raycaster.Map
    * @instance
    * @since 0.6.0
    *
    * @return {Raycaster.Map} {@link Raycaster.Map Raycaster.Map} instance
    */
    this.updateMap;

    this.config(options);
    if(!this.notSupported)
        this.updateMap();

    return this;
};

Map.prototype = {
    config: require('./config.js').config,
    destroy: require('./destroy.js').destroy,
    get dynamic() {
        return this._dynamic;
    },
    set dynamic(dynamic) {
        if(this._dynamic == dynamic)
            return this;
    
        if(dynamic) {
            this._dynamic = true;
            
            //add object to raycaster's dynamic objects list
            if(this._raycaster) {
                this._raycaster.dynamicMappedObjects.push(this.object);
    
                this._raycaster._stats.mappedObjects.dynamic = this._raycaster.dynamicMappedObjects.length;
                this._raycaster._stats.mappedObjects.static = this._raycaster._stats.mappedObjects.total - this._raycaster._stats.mappedObjects.dynamic;
            }
        }
        else {
            this._dynamic = false;
            
            //remove object from reycasters' dynamic objects list
            if(this._raycaster) {
                let index = this._raycaster.dynamicMappedObjects.indexOf(this.object);
                if(index >= 0)
                    this._raycaster.dynamicMappedObjects.splice(index, 1);
    
                this._raycaster._stats.mappedObjects.dynamic = this._raycaster.dynamicMappedObjects.length;
                this._raycaster._stats.mappedObjects.static = this._raycaster._stats.mappedObjects.total - this._raycaster._stats.mappedObjects.dynamic;
            }
        }
    
        return this;
     }
};

Map.prototype.constructor = Map;