mirror of
http://junepve.top:3000/chicrobot/CINC.git
synced 2026-10-30 05:21:29 +08:00
54 lines
2.3 KiB
JavaScript
54 lines
2.3 KiB
JavaScript
// 命令系统:处理玩家对游戏单位的各种命令(如移动、选择等)
|
|
|
|
// 从ControlMode.js导入当前激活的单位和选中的单位列表
|
|
import { activeUnit, selectedUnits } from './ControlMode.js';
|
|
|
|
// 导出CommandSystem类,用于创建命令系统实例
|
|
export class CommandSystem {
|
|
// 构造函数:初始化命令系统
|
|
constructor(scene) {
|
|
// 保存场景引用,用于访问游戏世界和发送事件
|
|
this.scene = scene;
|
|
|
|
// 监听场景中的移动相关事件
|
|
// 当'move-relative'事件触发时,调用onMoveRelative方法
|
|
scene.events.on('move-relative', this.onMoveRelative, this);
|
|
// 当'move-to-point'事件触发时,调用onMoveToPoint方法
|
|
scene.events.on('move-to-point', this.onMoveToPoint, this);
|
|
// 当'select-unit'事件触发时,调用onSelectUnit方法
|
|
scene.events.on('select-unit', this.onSelectUnit, this);
|
|
}
|
|
|
|
// 处理相对移动命令:根据方向向量移动单位
|
|
onMoveRelative(dir) {
|
|
// 确定移动目标单位:优先使用选中的单位列表,如果没有选中单位则使用当前激活的单位
|
|
const targets = selectedUnits.length > 0 ? selectedUnits : (activeUnit ? [activeUnit] : []);
|
|
|
|
// 遍历所有目标单位,调用它们的moveRelative方法进行相对移动
|
|
targets.forEach(unit => {
|
|
unit.moveRelative(dir.x, dir.y);
|
|
});
|
|
}
|
|
|
|
// 处理移动到指定点的命令
|
|
onMoveToPoint(x, y) {
|
|
// 确定移动目标单位:优先使用选中的单位列表,如果没有选中单位则使用当前激活的单位
|
|
const targets = selectedUnits.length > 0 ? selectedUnits : (activeUnit ? [activeUnit] : []);
|
|
|
|
// 遍历所有目标单位,调用它们的setTarget方法设置移动目标点
|
|
targets.forEach(unit => {
|
|
unit.setTarget(x, y); // ← 使用单位的新接口方法
|
|
});
|
|
}
|
|
|
|
// 处理选择单位的命令
|
|
onSelectUnit(unit) {
|
|
// 动态导入ControlMode.js模块,确保能够访问最新的模块内容
|
|
import('./ControlMode.js').then(mod => {
|
|
// 调用ControlMode模块的setActiveUnit方法设置当前激活的单位
|
|
mod.setActiveUnit(unit);
|
|
// 触发'unit-activated'事件,通知其他系统当前单位已激活
|
|
this.scene.events.emit('unit-activated', unit);
|
|
});
|
|
}
|
|
} |