* refactor(editor): 建立Clean Architecture领域模型层 * refactor(editor): 实现应用层架构 - 命令模式、用例和状态管理 * refactor(editor): 实现展示层核心Hooks * refactor(editor): 实现基础设施层和展示层组件 * refactor(editor): 迁移画布和连接渲染到 Clean Architecture 组件 * feat(editor): 集成应用层架构和命令模式,实现撤销/重做功能 * refactor(editor): UI组件拆分 * refactor(editor): 提取快速创建菜单逻辑 * refactor(editor): 重构BehaviorTreeEditor,提取组件和Hook * refactor(editor): 提取端口连接和键盘事件Hook * refactor(editor): 提取拖放处理Hook * refactor(editor): 提取画布交互Hook和工具函数 * refactor(editor): 完成核心重构 * fix(editor): 修复节点无法创建和连接 * refactor(behavior-tree,editor): 重构节点子节点约束系统,实现元数据驱动的架构
73 lines
1.5 KiB
TypeScript
73 lines
1.5 KiB
TypeScript
/**
|
|
* 位置值对象
|
|
* 表示二维空间中的坐标点
|
|
*/
|
|
export class Position {
|
|
private readonly _x: number;
|
|
private readonly _y: number;
|
|
|
|
constructor(x: number, y: number) {
|
|
this._x = x;
|
|
this._y = y;
|
|
}
|
|
|
|
get x(): number {
|
|
return this._x;
|
|
}
|
|
|
|
get y(): number {
|
|
return this._y;
|
|
}
|
|
|
|
/**
|
|
* 创建新的位置,加上偏移量
|
|
*/
|
|
add(offset: Position): Position {
|
|
return new Position(this._x + offset._x, this._y + offset._y);
|
|
}
|
|
|
|
/**
|
|
* 创建新的位置,减去偏移量
|
|
*/
|
|
subtract(other: Position): Position {
|
|
return new Position(this._x - other._x, this._y - other._y);
|
|
}
|
|
|
|
/**
|
|
* 计算到另一个位置的距离
|
|
*/
|
|
distanceTo(other: Position): number {
|
|
const dx = this._x - other._x;
|
|
const dy = this._y - other._y;
|
|
return Math.sqrt(dx * dx + dy * dy);
|
|
}
|
|
|
|
/**
|
|
* 值对象相等性比较
|
|
*/
|
|
equals(other: Position): boolean {
|
|
return this._x === other._x && this._y === other._y;
|
|
}
|
|
|
|
/**
|
|
* 转换为普通对象
|
|
*/
|
|
toObject(): { x: number; y: number } {
|
|
return { x: this._x, y: this._y };
|
|
}
|
|
|
|
/**
|
|
* 从普通对象创建
|
|
*/
|
|
static fromObject(obj: { x: number; y: number }): Position {
|
|
return new Position(obj.x, obj.y);
|
|
}
|
|
|
|
/**
|
|
* 创建零位置
|
|
*/
|
|
static zero(): Position {
|
|
return new Position(0, 0);
|
|
}
|
|
}
|