RoutesMaker/Public/ecma/Models/RouteModel.ecma.js

63 lines
1.4 KiB
JavaScript

"use strict";
import {DotModel} from "./DotModel.ecma.js";
import {Check} from "../Utils/Check.ecma.js";
/**
* @typedef {import("../Application/RoutesMaker.ecma.js").RoutesMaker} RoutesMaker
*/
/**
* @class
* @constructor
* @param {!RoutesMaker} routes_maker
* @param {!string} name
* @param {!string} key
* @returns {void}
* @access public
* @static
*/
export const RouteModel = (function(){
/**
* @constructs RouteModel
* @param {!RoutesMaker} routes_maker
* @param {!string} name
* @param {!string} key
* @returns {void}
* @access public
* @static
*/
const RouteModel = function(routes_maker, name, key){
/** @type {RouteModel} */
const self = this;
/** @type {RoutesMaker} */
this.routes_maker = routes_maker;
/** @type {Array.<DotModel>} */
this.dots = [];
/** @type {string} */
this.name = name;
/** @type {string} */
this.key = key;
/** @type {number} */
this.from = 0;
this.add_dot = (longitude, latitude) => {
const dot = new DotModel(self, longitude, latitude, self.dots.length);
self.dots.push(dot);
return dot;
};
this.get_distance = (...slice) => (
slice.length ? self.dots.slice(...slice) : self.dots
).reduce((distance, dot) => distance + dot.distance, 0);
};
return RouteModel;
})();