2025-04-20 00:49:14 +08:00
|
|
|
|
import { KeydownType, type Options } from '@meta2d/core';
|
2025-05-08 19:42:45 +08:00
|
|
|
|
import { invert } from 'lodash-es';
|
2025-04-20 00:49:14 +08:00
|
|
|
|
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/**
|
|
|
|
|
* 地图点位类型枚举
|
|
|
|
|
* 定义了场景编辑器中所有支持的点位类型
|
|
|
|
|
* 数值1-9为小点位,10以上为大点位(有特殊图标)
|
|
|
|
|
*/
|
2025-04-20 00:49:14 +08:00
|
|
|
|
//#region 点位
|
|
|
|
|
export enum MapPointType {
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 普通点 - 基础导航点,机器人可通过 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
普通点 = 1,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 等待点 - 机器人等待或暂停的位置 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
等待点,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 避让点 - 机器人主动避让其他机器人的点位 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
避让点,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 临时避让点 - 动态生成的临时避让位置,有特殊标记 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
临时避让点,
|
|
|
|
|
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 电梯点 - 机器人乘坐电梯的专用点位 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
电梯点 = 11,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 自动门点 - 需要自动门控制的通行点位 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
自动门点,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 充电点 - 机器人充电的专用位置,可绑定特定机器人 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
充电点,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 停靠点 - 机器人停靠等待的位置,可绑定特定机器人 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
停靠点,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 动作点 - 机器人执行特定动作的位置(如取货、放货) */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
动作点,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 禁行点 - 禁止机器人通过的点位 */
|
2025-05-05 23:21:31 +08:00
|
|
|
|
禁行点,
|
2025-04-20 00:49:14 +08:00
|
|
|
|
}
|
2025-06-17 15:34:56 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 点位类型映射数组,用于UI显示和选择
|
|
|
|
|
* 过滤掉非数字类型的枚举项
|
|
|
|
|
*/
|
2025-04-20 00:49:14 +08:00
|
|
|
|
export const MAP_POINT_TYPES = Object.freeze(
|
|
|
|
|
<[string, MapPointType][]>Object.entries(MapPointType).filter(([, v]) => typeof v === 'number'),
|
|
|
|
|
);
|
|
|
|
|
//#endregion
|
|
|
|
|
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/**
|
|
|
|
|
* 地图路线类型枚举
|
|
|
|
|
* 定义了连接点位之间的路径类型
|
|
|
|
|
*/
|
2025-04-20 00:49:14 +08:00
|
|
|
|
//#region 线路
|
|
|
|
|
export enum MapRouteType {
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 直线 - 两点间直线连接 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
直线 = 'line',
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 二阶贝塞尔曲线 - 带一个控制点的曲线 */
|
2025-05-17 13:08:29 +08:00
|
|
|
|
二阶贝塞尔曲线 = 'bezier2',
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 三阶贝塞尔曲线 - 带两个控制点的曲线,更灵活 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
三阶贝塞尔曲线 = 'bezier3',
|
|
|
|
|
}
|
2025-06-17 15:34:56 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 路线类型反向映射,用于从字符串值获取枚举键
|
|
|
|
|
*/
|
2025-05-08 19:42:45 +08:00
|
|
|
|
export const MAP_ROUTE_TYPE = invert(MapRouteType);
|
2025-06-17 15:34:56 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 路线类型映射数组,用于UI显示和选择
|
|
|
|
|
*/
|
2025-04-20 00:49:14 +08:00
|
|
|
|
export const MAP_ROUTE_TYPES = Object.freeze(<[string, MapRouteType][]>Object.entries(MapRouteType));
|
2025-05-06 23:48:21 +08:00
|
|
|
|
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/**
|
|
|
|
|
* 路线通行类型枚举
|
|
|
|
|
* 定义了路线的通行权限和限制
|
|
|
|
|
*/
|
2025-05-06 23:48:21 +08:00
|
|
|
|
export enum MapRoutePassType {
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 无限制 - 所有机器人都可以通行 */
|
2025-05-06 23:48:21 +08:00
|
|
|
|
无,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 仅空载可通行 - 只有空载的机器人可以通过 */
|
2025-05-06 23:48:21 +08:00
|
|
|
|
仅空载可通行,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 仅载货可通行 - 只有载货的机器人可以通过 */
|
2025-05-06 23:48:21 +08:00
|
|
|
|
仅载货可通行,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 禁行 - 禁止所有机器人通行,显示为虚线 */
|
2025-05-06 23:48:21 +08:00
|
|
|
|
禁行 = 10,
|
|
|
|
|
}
|
2025-06-17 15:34:56 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 路线通行类型映射数组,用于UI显示和选择
|
|
|
|
|
*/
|
2025-05-09 20:15:04 +08:00
|
|
|
|
export const MAP_ROUTE_PASS_TYPES = Object.freeze(
|
|
|
|
|
<[string, MapRoutePassType][]>Object.entries(MapRoutePassType).filter(([, v]) => typeof v === 'number'),
|
|
|
|
|
);
|
2025-04-20 00:49:14 +08:00
|
|
|
|
//#endregion
|
|
|
|
|
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/**
|
|
|
|
|
* 地图区域类型枚举
|
|
|
|
|
* 定义了场景中不同功能的区域类型
|
|
|
|
|
*/
|
2025-04-20 00:49:14 +08:00
|
|
|
|
//#region 区域
|
|
|
|
|
export enum MapAreaType {
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 库区 - 仓储作业区域,包含动作点 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
库区 = 1,
|
|
|
|
|
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 互斥区 - 同时只能有一个机器人进入的区域 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
互斥区 = 11,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 非互斥区 - 可以同时有多个机器人进入的区域 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
非互斥区,
|
|
|
|
|
}
|
2025-06-17 15:34:56 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 区域类型映射数组,用于UI显示和选择
|
|
|
|
|
*/
|
2025-04-20 00:49:14 +08:00
|
|
|
|
export const MAP_AREA_TYPES = Object.freeze(
|
|
|
|
|
<[string, MapAreaType][]>Object.entries(MapAreaType).filter(([, v]) => typeof v === 'number'),
|
|
|
|
|
);
|
|
|
|
|
//#endregion
|
|
|
|
|
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/**
|
|
|
|
|
* 场景编辑器核心配置
|
|
|
|
|
* 基于Meta2D引擎的编辑器配置参数
|
|
|
|
|
*/
|
2025-04-20 00:49:14 +08:00
|
|
|
|
export const EDITOR_CONFIG: Options = {
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 键盘事件类型 - 禁用所有键盘快捷键 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
keydown: KeydownType.None,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 严格作用域 - 限制编辑操作范围 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
strictScope: true,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 移动连接线 - 禁用拖动时自动移动连接的线条 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
moveConnectedLine: false,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 禁用输入 - 禁用文本输入功能 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
disableInput: true,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 禁用旋转 - 禁用图形旋转功能 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
disableRotate: true,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 禁用尺寸调整 - 禁用图形大小调整 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
disableSize: true,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 禁用锚点 - 禁用连接锚点显示 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
disableAnchor: true,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 禁用空线条 - 不允许创建没有连接点的线条 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
disableEmptyLine: true,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 禁用重复线条 - 不允许在同一对点之间创建多条线 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
disableRepeatLine: true,
|
2025-06-20 09:03:15 +08:00
|
|
|
|
/** 最小缩放比例 - 画布最小缩放到1% */
|
2025-06-29 19:38:13 +08:00
|
|
|
|
minScale: 0.01,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 最大缩放比例 - 画布最大缩放到401% */
|
2025-04-28 20:04:46 +08:00
|
|
|
|
maxScale: 4.01,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 缩放步长 - 每次滚轮滚动的缩放幅度(5%) */
|
|
|
|
|
scaleOff: 0.05,
|
|
|
|
|
/** 默认锚点 - 不设置默认锚点 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
defaultAnchors: [],
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 全局透明度 - 普通状态下图形透明度(0为不透明) */
|
2025-05-01 01:07:16 +08:00
|
|
|
|
globalAlpha: 0,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 激活状态全局透明度 - 选中状态下图形透明度 */
|
2025-04-28 00:43:33 +08:00
|
|
|
|
activeGlobalAlpha: 0,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 默认字体大小 - 14像素 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
fontSize: 14,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 行高倍数 - 1.5倍行高 */
|
2025-04-20 00:49:14 +08:00
|
|
|
|
lineHeight: 1.5,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 字体族 - 使用系统默认字体 */
|
2025-04-28 20:04:46 +08:00
|
|
|
|
fontFamily: 'system-ui',
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 文本旋转 - 禁用文本跟随图形旋转 */
|
2025-05-25 00:07:22 +08:00
|
|
|
|
textRotate: false,
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 文本水平对齐 - 居中对齐 */
|
2025-05-25 00:07:22 +08:00
|
|
|
|
textAlign: 'center',
|
2025-06-17 15:34:56 +08:00
|
|
|
|
/** 文本垂直基线 - 顶部对齐 */
|
2025-05-25 00:07:22 +08:00
|
|
|
|
textBaseline: 'top',
|
2025-04-20 00:49:14 +08:00
|
|
|
|
};
|