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