uno-info-sdk
Version:
1,117 lines (1,019 loc) • 27.3 kB
JavaScript
import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose";
import _extends from "@babel/runtime/helpers/extends";
import { check as checkType } from 'ts-running';
import cloneDeep from 'lodash/cloneDeep';
import { SDKBase } from 'uno-ws-client';
var defaultParser = function defaultParser(data) {
return data;
};
var protocol = [{
"name": "对象查看镜头",
"desc": "调用系统镜头对单一指定对象或指定位置进行查看",
"entity": "camera",
"category": "sequence",
"actionCode": "focus",
"params": [{
"name": "camera",
"type": "[number, number, number]",
"require": true,
"desc": "镜头的相机参数"
}, {
"name": "lookat",
"type": "[number, number, number]",
"require": true,
"desc": "镜头的视点参数"
}, {
"name": "layer",
"type": "string",
"require": false,
"desc": "对象的图层名"
}, {
"name": "target",
"type": "string",
"require": false,
"desc": "对象ID"
}],
"children": {
"toTarget": {
"name": "对象特写",
"fields": ["camera", "lookat", {
"target": true
}, {
"layer": true
}],
"desc": "调用镜头实现对任意位置的定点特写。如:对隧道口、匝道口做特写"
},
"fixed": {
"name": "定点特写",
"fields": ["camera", "lookat"],
"desc": "调用系统镜头实现对一个指定静态对象ID的定点特写,被特写对象会有外轮廓高亮。如:实现对某个杆子或路侧设备的特写"
}
}
}, {
"name": "多对象查看镜头",
"desc": "调用系统镜头对多个指定对象进行查看",
"entity": "camera",
"category": "sequence",
"actionCode": "show",
"params": [{
"name": "layer",
"type": "string",
"require": true,
"desc": "对象的图层名"
}, {
"name": "target",
"type": "[string]",
"require": true,
"desc": "对象ID数组"
}]
}, {
"name": "跟踪镜头",
"desc": "调用系统镜头实现对一个指定动态对象或不指定ID的任一对象实施动态跟踪,被跟踪对象会有外轮廓高亮",
"entity": "camera",
"category": "sequence",
"actionCode": "track",
"params": [{
"name": "layer",
"type": "string",
"require": true,
"desc": "对象的图层名"
}, {
"name": "target",
"type": "string",
"require": false,
"desc": "对象ID"
}, {
"name": "target_type",
"type": "string",
"require": false,
"desc": "对象类型"
}, {
"name": "continuously",
"type": "boolean",
"require": false,
"desc": "是否连续跟踪,即跟丢了再选同类的下一个对象"
}, {
"name": "location",
"type": "[number,number,number]",
"require": false,
"desc": "被跟踪对象的位置: 三维场景只加载当前范围内的车辆,如果被跟踪对象不在当前范围就找不到该对象,需要先让三维场景跳转到被跟踪对象的位置(location参数),加载新范围内的车辆再进行跟踪"
}, {
"name": "cameraMode",
"type": "string",
"require": false,
"desc": "跟踪视角(\"Car\"(车内), \"Drone\"(无人机跟车), \"Flight\"(高空俯视))"
}, {
"name": "cameraDistance",
"type": "[number,number]",
"require": false,
"desc": "镜头相对被跟踪对象的位置,默认值[3,2]"
}],
"children": {
"toTarget": {
"name": "指定对象(ID)跟踪",
"fields": ["layer", {
"target": true
}, {
"continuously": true
}, {
"location": true
}, {
"cameraMode": true
}, {
"cameraDistance": true
}],
"desc": "调用系统镜头实现对一个指定动态对象实施动态跟踪"
},
"noTarget": {
"name": "不指定对象(ID)跟踪",
"fields": ["layer", {
"continuously": true
}, {
"target_type": true
}, {
"cameraMode": true
}, {
"cameraDistance": true
}],
"desc": "调用系统镜头实现对不指定ID的任一对象实施动态跟踪"
},
"release": {
"name": "释放跟踪镜头",
"fields": ["layer", {
"target": true
}],
"desc": "取消跟踪"
}
}
}, {
"name": "预设镜头",
"desc": "调用预先编排好的一个镜头序列",
"entity": "camera",
"category": "sequence",
"actionCode": "call",
"params": [{
"name": "sequence",
"type": "[string]",
"require": true,
"desc": "预设镜头的数组"
}]
}, {
"name": "释放镜头",
"desc": "解锁原来的任何镜头",
"entity": "camera",
"category": "sequence",
"actionCode": "release",
"params": [{
"name": "cameraOffset",
"type": "[number,number,number]",
"require": true,
"desc": "释放后镜头相对最后位置的位移"
}]
}, {
"name": "切换跟踪视角",
"desc": "在对象跟踪镜头下切换跟踪视角",
"entity": "camera",
"category": "sequence",
"actionCode": "switchMode",
"params": [{
"name": "cameraMode",
"type": "string",
"require": true,
"desc": "跟踪视角(\"Car\"(车内), \"Drone\"(无人机跟车), \"Flight\"(高空俯视))"
}]
}, {
"name": "隐藏三维图层",
"desc": "隐藏三维图层",
"entity": "layer",
"category": "control",
"actionCode": "hide",
"params": [{
"name": "layer",
"type": "string",
"require": true,
"desc": "图层名"
}]
}, {
"name": "显示三维图层",
"desc": "显示三维图层",
"entity": "layer",
"category": "control",
"actionCode": "show",
"params": [{
"name": "layer",
"type": "string",
"require": true,
"desc": "图层名"
}]
}, {
"name": "隐藏面板图层",
"desc": "隐藏面板图层",
"entity": "billboard",
"category": "control",
"actionCode": "hide",
"params": [{
"name": "layer",
"type": "string",
"require": true,
"desc": "图层名"
}]
}, {
"name": "显示面板图层",
"desc": "显示面板图层",
"entity": "billboard",
"category": "control",
"actionCode": "show",
"params": [{
"name": "layer",
"type": "string",
"require": true,
"desc": "图层名"
}]
}, {
"name": "切换气象",
"desc": "切换场景中的天气、日照等状态",
"entity": "climate",
"category": "control",
"actionCode": "setup",
"params": [{
"name": "weather",
"type": "[string]",
"require": true,
"desc": "气象状态数组(foggy、rainy、snowy),数组为空即为晴天"
}, {
"name": "sunlight",
"type": "string",
"require": true,
"desc": "日夜切换,day/night"
}]
}, {
"name": "恢复气象",
"desc": "恢复场景中的天气和日照状态",
"entity": "climate",
"category": "control",
"actionCode": "reset",
"params": []
}, {
"name": "切换数据环境",
"desc": "切换场景中的数据环境,即车辆、事件等数据来源从实时模式切换为历史模式或仿真模式",
"entity": "env",
"category": "control",
"actionCode": "changeEnv",
"params": [{
"name": "env",
"type": "string",
"require": true,
"desc": "数据环境名称"
}, {
"name": "isPlaying",
"type": "boolean",
"require": true,
"desc": "是否播放"
}]
}, {
"name": "指定时间播放",
"desc": "在非实时环境下实现从指定日期指定时间开始播放",
"entity": "env",
"category": "control",
"actionCode": "play",
"params": [{
"name": "playTime",
"type": "string",
"require": true,
"desc": "开始播放的时间"
}, {
"name": "isPlaying",
"type": "true",
"require": true,
"desc": "播放"
}, {
"name": "uniqueId",
"type": "string",
"require": true,
"desc": "一次播放的ID"
}, {
"name": "env",
"type": "string",
"require": true,
"desc": "数据环境名称(playback历史数据, simulation仿真数据, release实时数据)"
}]
}, {
"name": "暂停播放",
"desc": "在非实时环境下实现暂停播放",
"entity": "env",
"category": "control",
"actionCode": "pause",
"params": [{
"name": "playTime",
"type": "string",
"require": true,
"desc": "停止播放的时间"
}, {
"name": "isPlaying",
"type": "false",
"require": true,
"desc": "暂停播放"
}, {
"name": "uniqueId",
"type": "string",
"require": true,
"desc": "一次播放的ID"
}, {
"name": "env",
"type": "string",
"require": true,
"desc": "数据环境名称(playback历史数据, simulation仿真数据, release实时数据)"
}]
}, {
"name": "请求地图同步",
"desc": "web端请求UE端发送地图位置信息,用于一些需要三维场景跳转到新位置之后再响应的web消息",
"entity": "map",
"category": "sync",
"actionCode": "request",
"params": [{
"name": "entity",
"type": "string",
"require": true,
"desc": "被同步对象为地图参数"
}]
}, {
"name": "监听地图同状态",
"desc": "UE端返回web端请求的地图位置信息(响应web的请求地图同步)",
"entity": "camera",
"category": "sequence",
"actionCode": "update",
"params": [{
"name": "position",
"type": "[number, number, number]",
"require": true,
"desc": "三维场景当前的位置"
}]
}, {
"name": "呼出web的跟车控制面板",
"desc": "UE找到车辆开始跟踪之后,控制web端打开/关闭web的跟车控制面板",
"entity": "layer",
"category": "control",
"actionCode": "switchCameraUI",
"params": [{
"name": "enable",
"type": "boolean",
"require": true,
"desc": "打开/关闭面板"
}]
}, {
"name": "孪生设备同步",
"desc": "UE端返回视频接力中当前设备视频流和下一路设备的视频流地址",
"entity": "layer",
"category": "control",
"actionCode": "update",
"params": [{
"name": "value",
"type": "{ this: string; next: string; }",
"require": true,
"desc": "视频接力中的当前视频流和下一个视频流"
}, {
"name": "entity",
"type": "string",
"require": true,
"desc": "被操作对象为图层"
}]
}, {
"name": "对象悬浮选择",
"desc": "UE端返回当前鼠标悬浮的对象",
"entity": "layer",
"category": "control",
"actionCode": "hover",
"params": [{
"name": "layer",
"type": "string",
"require": true,
"desc": "被高亮对象的图层名"
}, {
"name": "target",
"type": "string",
"require": true,
"desc": "被高亮对象的ID"
}]
}, {
"name": "对象双击选择",
"desc": "UE端返回当前鼠标点击的对象",
"entity": "layer",
"category": "control",
"actionCode": "dclick",
"params": [{
"name": "layer",
"type": "string",
"require": true,
"desc": "被高亮对象的图层名"
}, {
"name": "target",
"type": "string",
"require": true,
"desc": "被高亮对象的ID"
}]
}];
var checkFun = function checkFun(msg) {
var data = msg.data || {};
var groupProto = protocol.find(function (o) {
return o.entity === msg.entity && o.actionCode === (data === null || data === void 0 ? void 0 : data.action);
});
var error = '';
if (groupProto) {
var params = cloneDeep(groupProto.params);
if (msg.sdk) {
var _groupProto$children, _sdkProto$fields;
var sdkProto = (_groupProto$children = groupProto.children) === null || _groupProto$children === void 0 ? void 0 : _groupProto$children[msg.sdk];
if (!sdkProto) return groupProto.entity + "." + groupProto.actionCode + "\u63A5\u6536\u7684\u6570\u636E\u7ED3\u6784\u9519\u8BEF\uFF0C\u534F\u8BAE\u4E2D\u4E0D\u5B58\u5728\u7684sdk\uFF1A" + msg.sdk;
params = (_sdkProto$fields = sdkProto.fields) === null || _sdkProto$fields === void 0 ? void 0 : _sdkProto$fields.map(function (o) {
var key = o;
var value;
if (typeof o === 'object') {
key = Object.keys(o)[0];
value = o[key];
}
var param = groupProto.params.find(function (c) {
return c.name === key;
});
if (!param) return null;
return _extends({}, param, typeof value === 'boolean' ? {
require: value
} : {});
}).filter(function (o) {
return o;
});
}
params.forEach(function (o) {
var msgItem = data[o.name]; // 必填校验
if (o.require && msgItem === undefined) {
error = groupProto.entity + "." + groupProto.actionCode + (msg.sdk ? "." + msg.sdk : '') + "\u63A5\u6536\u7684\u6570\u636E\u7ED3\u6784\u9519\u8BEF\uFF1A\u7F3A\u5C11" + o.name + "\u7684\u5185\u5BB9";
} // 内容类型校验
if (!error && msgItem && !checkType(o.type || 'any', msgItem)) {
error = groupProto.entity + "." + groupProto.actionCode + (msg.sdk ? "." + msg.sdk : '') + "\u63A5\u6536\u7684\u6570\u636E\u7ED3\u6784\u9519\u8BEF\uFF1A" + JSON.stringify(data[o.name]) + "\uFF0C\u9700\u8981\u7B26\u5408\u6570\u636E\u7C7B\u578B" + (o.type || 'any');
}
});
} else {
return "\u534F\u8BAE\u4E2D\u4E0D\u5B58\u5728\u7684\u6D88\u606F\u7ED3\u6784\uFF1A\u65E0\u6CD5\u89E3\u6790" + groupProto.entity + "." + groupProto.actionCode;
}
return error;
};
export var IndustrySDK = /*#__PURE__*/function (_SDKBase) {
_inheritsLoose(IndustrySDK, _SDKBase);
function IndustrySDK(props) {
var _this;
_this = _SDKBase.call(this, props) || this;
_this.types = ['UE'];
_this["camera"] = {
focus: function focus(params) {
var msg = {
event: 'sequence',
entity: 'camera',
data: {
action: 'focus',
camera: params['camera'],
lookat: params['lookat'],
layer: params['layer'],
target: params['target']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
show: function show(params) {
var msg = {
event: 'sequence',
entity: 'camera',
data: {
action: 'show',
layer: params['layer'],
target: params['target']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
track: function track(params) {
var msg = {
event: 'sequence',
entity: 'camera',
data: {
action: 'track',
layer: params['layer'],
target: params['target'],
target_type: params['target_type'],
continuously: params['continuously'],
location: params['location'],
cameraMode: params['cameraMode'],
cameraDistance: params['cameraDistance']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
call: function call(params) {
var msg = {
event: 'sequence',
entity: 'camera',
data: {
action: 'call',
sequence: params['sequence']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
release: function release(params) {
var msg = {
event: 'sequence',
entity: 'camera',
data: {
action: 'release',
cameraOffset: params['cameraOffset']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
switchMode: function switchMode(params) {
var msg = {
event: 'sequence',
entity: 'camera',
data: {
action: 'switchMode',
cameraMode: params['cameraMode']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
update: function update(params) {
var msg = {
event: 'sequence',
entity: 'camera',
data: {
action: 'update',
position: params['position']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
}
};
_this["layer"] = {
hide: function hide(params) {
var msg = {
event: 'control',
entity: 'layer',
data: {
action: 'hide',
layer: params['layer']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
show: function show(params) {
var msg = {
event: 'control',
entity: 'layer',
data: {
action: 'show',
layer: params['layer']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
switchCameraUI: function switchCameraUI(params) {
var msg = {
event: 'control',
entity: 'layer',
data: {
action: 'switchCameraUI',
enable: params['enable']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
update: function update(params) {
var msg = {
event: 'control',
entity: 'layer',
data: {
action: 'update',
value: params['value'],
entity: params['entity']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
hover: function hover(params) {
var msg = {
event: 'control',
entity: 'layer',
data: {
action: 'hover',
layer: params['layer'],
target: params['target']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
dclick: function dclick(params) {
var msg = {
event: 'control',
entity: 'layer',
data: {
action: 'dclick',
layer: params['layer'],
target: params['target']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
}
};
_this["billboard"] = {
hide: function hide(params) {
var msg = {
event: 'control',
entity: 'billboard',
data: {
action: 'hide',
layer: params['layer']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
show: function show(params) {
var msg = {
event: 'control',
entity: 'billboard',
data: {
action: 'show',
layer: params['layer']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
}
};
_this["climate"] = {
setup: function setup(params) {
var msg = {
event: 'control',
entity: 'climate',
data: {
action: 'setup',
weather: params['weather'],
sunlight: params['sunlight']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
reset: function reset() {
var msg = {
event: 'control',
entity: 'climate',
data: {
action: 'reset'
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
}
};
_this["env"] = {
changeEnv: function changeEnv(params) {
var msg = {
event: 'control',
entity: 'env',
data: {
action: 'changeEnv',
"production": params['env'],
isPlaying: params['isPlaying']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
play: function play(params) {
var msg = {
event: 'control',
entity: 'env',
data: {
action: 'play',
playTime: params['playTime'],
isPlaying: params['isPlaying'],
uniqueId: params['uniqueId'],
"production": params['env']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
},
pause: function pause(params) {
var msg = {
event: 'control',
entity: 'env',
data: {
action: 'pause',
playTime: params['playTime'],
isPlaying: params['isPlaying'],
uniqueId: params['uniqueId'],
"production": params['env']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
}
};
_this["map"] = {
request: function request(params) {
var msg = {
event: 'sync',
entity: 'map',
data: {
action: 'request',
entity: params['entity']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
}
};
_this.types = typeof props.type === 'string' ? [props.type] : props.type;
var eventList = {};
protocol.forEach(function (o) {
var group = o.entity + "." + o.actionCode;
eventList[group] = defaultParser;
Object.keys(o.children || {}).forEach(function (sdkName) {
var sdk = o.entity + "." + o.actionCode + "." + sdkName;
eventList[sdk] = defaultParser;
});
});
_this.eventList = eventList;
_this.camera.focus && (_this.camera.focus.toTarget = function (params) {
var msg = {
event: 'sequence',
entity: 'camera',
sdk: 'toTarget',
data: {
action: 'focus',
camera: params['camera'],
lookat: params['lookat'],
target: params['target'],
layer: params['layer']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
});
_this.camera.focus && (_this.camera.focus.fixed = function (params) {
var msg = {
event: 'sequence',
entity: 'camera',
sdk: 'fixed',
data: {
action: 'focus',
camera: params['camera'],
lookat: params['lookat']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
});
_this.camera.track && (_this.camera.track.toTarget = function (params) {
var msg = {
event: 'sequence',
entity: 'camera',
sdk: 'toTarget',
data: {
action: 'track',
layer: params['layer'],
target: params['target'],
continuously: params['continuously'],
location: params['location'],
cameraMode: params['cameraMode'],
cameraDistance: params['cameraDistance']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
});
_this.camera.track && (_this.camera.track.noTarget = function (params) {
var msg = {
event: 'sequence',
entity: 'camera',
sdk: 'noTarget',
data: {
action: 'track',
layer: params['layer'],
continuously: params['continuously'],
target_type: params['target_type'],
cameraMode: params['cameraMode'],
cameraDistance: params['cameraDistance']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
});
_this.camera.track && (_this.camera.track.release = function (params) {
var msg = {
event: 'sequence',
entity: 'camera',
sdk: 'release',
data: {
action: 'track',
layer: params['layer'],
target: params['target']
}
};
if (_this.checkSdk) {
var error = checkFun(msg);
if (error) {
console.error(error);
return;
}
}
_this.send(msg);
});
return _this;
}
var _proto = IndustrySDK.prototype;
_proto.sdkParser = function sdkParser(msg) {
var error = checkFun(msg);
var data = msg.data;
var sdk = msg.entity + "." + data.action + (msg.sdk ? "." + msg.sdk : '');
if (error) {
return new CustomEvent(sdk, {
detail: {
error: error,
data: msg
}
});
} else {
return new CustomEvent(sdk, {
detail: {
error: false,
data: msg
}
});
}
};
return IndustrySDK;
}(SDKBase);