const { v1: uuidv1, v3: uuidv3, v4: uuidv4, v5: uuidv5 } = require('uuid'); const util = require("../util/common"); class Entity { constructor(base) { this.uid = uuidv4(); this.base = base; this.animaPath = new Map(); this.userEvent = new Map(); this.eventFunc = new Map(); } getUID() { return this.uid; } getBase() { return this.base; } init() { } insertAnimaPath(t, point) { this.animaPath.set(t, point); } sortAnimaPath() { const sortMap = new Map([...this.animaPath].sort((a, b) => a[0] - b[0])); this.animaPath = sortMap; } clearAnimaPath() { this.animaPath.clear(); } updateAnimaPath(t) { if (this.animaPath.size > 0) { const keysArray = [...this.animaPath.keys()]; var indexKey = util.lower_bound(keysArray, t); if (indexKey < keysArray.length) { let point = {}; var second = keysArray[indexKey]; if (indexKey == 0) { if (second <= t) { point = this.animaPath.get(second); } } else { var first = keysArray[indexKey - 1]; var delta_time = second - first; if (delta_time == 0.0) { point = this.animaPath.get(first); } else { var pointfirst = this.animaPath.get(first); var pointsecond = this.animaPath.get(second); point["空速"] = util.interpolate( (t - first) / delta_time, pointfirst["空速"], pointsecond["空速"]); point["升降率"] = util.interpolate( (t - first) / delta_time, pointfirst["升降率"], pointsecond["升降率"]); point["过载"] = util.interpolate( (t - first) / delta_time, pointfirst["过载"], pointsecond["过载"]); point["马赫数"] = util.interpolate( (t - first) / delta_time, pointfirst["马赫数"], pointsecond["马赫数"]); point["经度"] = util.interpolate( (t - first) / delta_time, pointfirst["经度"], pointsecond["经度"]); point["纬度"] = util.interpolate( (t - first) / delta_time, pointfirst["纬度"], pointsecond["纬度"]); point["海拔"] = util.interpolate( (t - first) / delta_time, pointfirst["海拔"], pointsecond["海拔"]); point["航向角"] = util.interpolate( (t - first) / delta_time, pointfirst["航向角"], pointsecond["航向角"]); point["俯仰角"] = util.interpolate( (t - first) / delta_time, pointfirst["俯仰角"], pointsecond["俯仰角"]); point["倾斜角"] = util.interpolate( (t - first) / delta_time, pointfirst["倾斜角"], pointsecond["倾斜角"]); } } return point; } } } insertUserEvent(t, event) { event["执行"] = 0; this.userEvent.set(t, event); } clearUserEvent() { this.userEvent.clear(); } removeUserEvent(t) { this.userEvent.delete(t); } removeUserEvent(eventname, eventtype) { for (const [key, value] of this.userEvent) { let time = key; let name = value["事件"]; let type = value["类型"]; if (name == eventname && type == eventtype) { this.userEvent.delete(time); } } } bindUserEventFun(event, callback) { let name = event["事件"]; let type = event["类型"]; let strKey = name + ";" + type; this.eventFunc.set(strKey, callback); } updateUserEvent(t) { if (this.userEvent.size > 0) { const tArray = [...this.userEvent.keys()]; var indexT = util.lower_bound(tArray, t); if (indexT < tArray.length) { var second = tArray[indexT]; if (second <= t) { let event = this.userEvent.get(second); if (event["执行"] == 0) { event["执行"] = 1; //this.userEvent.set(second, event); let name = event["事件"]; let type = event["类型"]; let para = event["参数"]; let callback = this.eventFunc.get(name + ";" + type); if (callback) { callback(para); } return event; } } } } } } module.exports = Entity;