import { Angle, AnimationGroup, Axis, Mesh, MeshBuilder, Quaternion, Scene, SceneLoader, Space, TransformNode, Vector3 } from "@babylonjs/core"; import { Event_MarkInfoChange, MarkInfoChangeType } from "./event-manager/events/event-mark-info-change"; import { EventManager } from "./event-manager/event-manager"; import { ChildNodeData, MarkData, MarkType } from "../model/data/mark/mark-data"; import { ModelInfo_mark } from "../model/info/mark/model-info-mark"; export enum ArmActionState { Bi, Bi1, Bi2, Bi3, Bi4, Bi5, Bi6, Pentou, } export enum LTState { None, LU, LU1, LU2 } export class InputController { private targetPoint: Vector3 = null; public rotateSpeed: number = 1; // 旋转速度 public moveBiSpeed: number = 5;// 展臂速度 public animation: AnimationGroup; // 选中的对象 public selectedObject: Mesh = null; // Y轴旋转 // 选中的类型 private markType: MarkType = null; public Bi: Mesh = null; // Y轴旋转 public Bi1: Mesh = null;// X轴旋转 public Bi2: Mesh = null;// 伸臂 public Bi3: Mesh = null;// 伸臂 public Bi4: Mesh = null;// 伸臂 public Bi5: Mesh = null;// 伸臂 public Bi6: Mesh = null;// X轴旋转 public PingTai: Mesh = null;// 保持水平 public PT: Mesh = null;// X轴旋转 public BaShou: Mesh = null;// X轴旋转 public Arm: Mesh = null; public Light: Mesh = null; public Bi1Postion: Vector3 = null; public Bi1MaxAngle: number = -84; public Bi1MinAngle: number = -6; public LadderUp: TransformNode = null; public LadderUp1: TransformNode = null; public LadderUp2: TransformNode = null; // 最大臂长 public maxArmlength = 15; // 最小臂长 public minArmlength = 0; public L6Length = 3; public L15Length = 5; // Bi2 public Bi2Length = 0; // Bi3 public Bi3Length = 0; // Bi4 public Bi4Length = 0; // Bi5 public Bi5Length = 0; deltaTime: number = 0.005; private scene: Scene; // 自动举臂状态 private armActionState: ArmActionState = ArmActionState.Bi; private LTActionState: LTState = LTState.None; // data dataBi: ChildNodeData = null; dataBi1: ChildNodeData = null; dataBi2: ChildNodeData = null; dataBi3: ChildNodeData = null; dataBi4: ChildNodeData = null; dataBi5: ChildNodeData = null; dataBi6: ChildNodeData = null; dataPingTai: ChildNodeData = null; dataBaShou: ChildNodeData = null; dataPT: ChildNodeData = null; dataLadderUp: ChildNodeData = null; dataLadderUp1: ChildNodeData = null; dataLadderUp2: ChildNodeData = null; dataArm: ChildNodeData = null; dataLight: ChildNodeData = null; markData: MarkData = null; markInfo: ModelInfo_mark = null; waterPowerSpeed: number = 50; /** * */ constructor(scene: Scene) { this.scene = scene; //添加监听事件 EventManager.addListener(Event_MarkInfoChange, (eventData, eventState) => { this.markInfo = eventData.markInfo; if (eventData.markInfo == null) { console.trace("Event_MarkInfoChange===="); return; } this.markData = eventData.markInfo.markData; this.markType = eventData.markInfo.markData.type; switch (eventData.eventType) { case MarkInfoChangeType.Create: // 数据 this.dataBi = eventData.markInfo.getChildrenDataByName("Bi"); this.dataBi1 = eventData.markInfo.getChildrenDataByName("Bi1"); this.dataBi2 = eventData.markInfo.getChildrenDataByName("Bi2"); this.dataBi3 = eventData.markInfo.getChildrenDataByName("Bi3"); this.dataBi4 = eventData.markInfo.getChildrenDataByName("Bi4"); this.dataBi5 = eventData.markInfo.getChildrenDataByName("Bi5"); this.dataBi6 = eventData.markInfo.getChildrenDataByName("Bi6"); this.dataPingTai = eventData.markInfo.getChildrenDataByName("PingTai"); this.dataBaShou = eventData.markInfo.getChildrenDataByName("BaShou"); this.dataPT = eventData.markInfo.getChildrenDataByName("PT"); this.dataLadderUp = eventData.markInfo.getChildrenDataByName("LadderUp"); this.dataLadderUp1 = eventData.markInfo.getChildrenDataByName("LadderUp1"); this.dataLadderUp2 = eventData.markInfo.getChildrenDataByName("LadderUp2"); this.dataArm = eventData.markInfo.getChildrenDataByName("Arm"); this.dataLight = eventData.markInfo.getChildrenDataByName("Light"); let playAnimation = true; if (this.dataBi) { this.Bi = eventData.markInfo.getChildrenByName("Bi") as Mesh; this.Bi.rotationQuaternion = this.dataBi.transformData.rotationQuaternion; playAnimation = false; } if (this.dataBi1) { this.Bi1 = eventData.markInfo.getChildrenByName("Bi1") as Mesh; this.Bi1.rotationQuaternion = this.dataBi1.transformData.rotationQuaternion; playAnimation = false; } if (this.dataBi2) { this.Bi2 = eventData.markInfo.getChildrenByName("Bi2") as Mesh; this.Bi2.position = this.dataBi2.transformData.position; playAnimation = false; } if (this.dataBi3) { this.Bi3 = eventData.markInfo.getChildrenByName("Bi3") as Mesh; this.Bi3.position = this.dataBi3.transformData.position; playAnimation = false; } if (this.dataBi4) { this.Bi4 = eventData.markInfo.getChildrenByName("Bi4") as Mesh; this.Bi4.position = this.dataBi4.transformData.position; playAnimation = false; } if (this.dataBi5) { this.Bi5 = eventData.markInfo.getChildrenByName("Bi5") as Mesh; // if (this.markType == MarkType.DGPTC) { // this.Bi5.rotationQuaternion = this.dataBi5.transformData.rotationQuaternion; // } else { this.Bi5.position = this.dataBi5.transformData.position; // } playAnimation = false; } if (this.dataBi6) { this.Bi6 = eventData.markInfo.getChildrenByName("Bi6") as Mesh; this.Bi6.rotationQuaternion = this.dataBi6.transformData.rotationQuaternion; playAnimation = false; } if (this.dataPingTai) { // if (this.markType == MarkType.YTC) { // this.PingTai = eventData.markInfo.getChildrenByName("pingtai") as Mesh; // } else { this.PingTai = eventData.markInfo.getChildrenByName("PingTai") as Mesh; // } this.PingTai.rotationQuaternion = this.dataPingTai.transformData.rotationQuaternion; playAnimation = false; } if (this.dataBaShou) { this.BaShou = eventData.markInfo.getChildrenByName("BaShou") as Mesh; this.BaShou.rotationQuaternion = this.dataBaShou.transformData.rotationQuaternion; playAnimation = false; } if (this.dataPT) { this.PT = eventData.markInfo.getChildrenByName("PT") as Mesh; this.PT.rotationQuaternion = this.dataPT.transformData.rotationQuaternion; playAnimation = false; } if (this.dataLadderUp) { this.LadderUp = eventData.markInfo.getChildrenByName("LadderUp_primitive0").parent as TransformNode; this.LadderUp.position = this.dataLadderUp.transformData.position; playAnimation = false; } if (this.dataLadderUp1) { this.LadderUp1 = eventData.markInfo.getChildrenByName("LadderUp1_primitive0").parent as TransformNode; this.LadderUp1.position = this.dataLadderUp1.transformData.position; playAnimation = false; } if (this.dataLadderUp2) { this.LadderUp2 = eventData.markInfo.getChildrenByName("LadderUp2_primitive0").parent as TransformNode; this.LadderUp2.position = this.dataLadderUp2.transformData.position; playAnimation = false; } if (this.dataArm) { this.Arm = eventData.markInfo.getChildrenByName("Arm") as Mesh; this.Arm.rotationQuaternion = this.dataArm.transformData.rotationQuaternion; playAnimation = false; } if (this.dataLight) { this.Light = eventData.markInfo.getChildrenByName("Light") as Mesh; this.Light.rotationQuaternion = this.dataLight.transformData.rotationQuaternion; playAnimation = false; } if (this.CanPlayAnimation() && playAnimation) {// 创建高喷车、登高平台车、云梯车播放默认动画 this.animation = eventData.markInfo.animationGroups[0]; this.animation.start(); } break; case MarkInfoChangeType.Select: // 数据 this.dataBi = eventData.markInfo.getChildrenDataByName("Bi"); this.dataBi1 = eventData.markInfo.getChildrenDataByName("Bi1"); this.dataBi2 = eventData.markInfo.getChildrenDataByName("Bi2"); this.dataBi3 = eventData.markInfo.getChildrenDataByName("Bi3"); this.dataBi4 = eventData.markInfo.getChildrenDataByName("Bi4"); this.dataBi5 = eventData.markInfo.getChildrenDataByName("Bi5"); this.dataBi6 = eventData.markInfo.getChildrenDataByName("Bi6"); this.dataPingTai = eventData.markInfo.getChildrenDataByName("PingTai"); this.dataBaShou = eventData.markInfo.getChildrenDataByName("BaShou"); this.dataPT = eventData.markInfo.getChildrenDataByName("PT"); this.dataArm = eventData.markInfo.getChildrenDataByName("PT"); this.dataLight = eventData.markInfo.getChildrenDataByName("Light"); // 如果可以忽略返回,否则设置 this.selectedObject = eventData.markInfo.modelBox as Mesh; this.Bi = eventData.markInfo.getChildrenByName("Bi") as Mesh; this.Bi1 = eventData.markInfo.getChildrenByName("Bi1") as Mesh; this.Bi2 = eventData.markInfo.getChildrenByName("Bi2") as Mesh; this.Bi2Length = this.Bi2?.position.z; this.Bi3 = eventData.markInfo.getChildrenByName("Bi3") as Mesh; this.Bi3Length = this.Bi3?.position.z; this.Bi4 = eventData.markInfo.getChildrenByName("Bi4") as Mesh; this.Bi4Length = this.Bi4?.position.z; this.Bi5 = eventData.markInfo.getChildrenByName("Bi5") as Mesh; this.Bi5Length = this.Bi5?.position.z; this.Bi6 = eventData.markInfo.getChildrenByName("Bi6") as Mesh; this.PingTai = eventData.markInfo.getChildrenByName("PingTai") as Mesh; this.PT = eventData.markInfo.getChildrenByName("PT") as Mesh; this.BaShou = eventData.markInfo.getChildrenByName("BaShou") as Mesh; this.Arm = eventData.markInfo.getChildrenByName("Arm") as Mesh; this.Light = eventData.markInfo.getChildrenByName("Light") as Mesh; // if (this.markType === MarkType.LT6) { // this.LTActionState = LTState.LU; // this.LadderUp = (eventData.markInfo.getChildrenByName("LadderUp_primitive0")).parent as TransformNode;; // console.log(this.LadderUp); // } // if (this.markType == MarkType.LT15) { // this.LTActionState = LTState.LU1; // this.LadderUp1 = (eventData.markInfo.getChildrenByName("LadderUp1_primitive0")).parent as TransformNode; // this.LadderUp2 = (eventData.markInfo.getChildrenByName("LadderUp2_primitive0")).parent as TransformNode;; // console.log(this.LadderUp1, this.LadderUp2); // } // if (this.markType == MarkType.YTC) { // this.PingTai = eventData.markInfo.getChildrenByName("pingtai") as Mesh; // } break; case MarkInfoChangeType.UnSelect: this.markInfo = null; this.markData = null; this.markType = null; this.animation = null; this.selectedObject = null; this.Bi = null; this.Bi1 = null; this.Bi2 = null; this.Bi3 = null; this.Bi4 = null; this.Bi5 = null; this.Bi6 = null; this.Arm = null; this.Light = null; this.LadderUp = null; this.LadderUp1 = null; this.LadderUp2 = null; this.PT = null; this.PingTai = null; this.BaShou = null; break; } }) this.scene.registerBeforeRender(() => { this.update(); }) } // 可以旋转 public CanRotateSelf(): boolean { return this.markType != MarkType.H && this.markType != MarkType.SNH && this.markType != MarkType.YWA && this.markType != MarkType.YWB && this.markType != MarkType.JJX // && this.markType != MarkType.SD && this.markType != MarkType.JGLX && this.markType != MarkType.CT // && this.markType != MarkType.JJQ && this.markType != MarkType.QYSDA && this.markType != MarkType.QYSDB; } // 可以播放动画 public CanPlayAnimation(): boolean { // return this.markType === MarkType.GPC // || this.markType === MarkType.DGPTC // || this.markType === MarkType.YTC return false; } // 是消防员 public IsFiremen(): boolean { return this.markType == MarkType.XFY // || this.markType == MarkType.JYF // || this.markType == MarkType.GRF // || this.markType == MarkType.FHF // || this.markType == MarkType.BHF // || this.markType == MarkType.YWXFY ; } // 是消防车 public IsFireTruck(): boolean { return this.markType == MarkType.XFC // || this.markType == MarkType.SGC // || this.markType == MarkType.GCGSC ; } // // todo 按选择的类型处理,也方便后续拆分 // if(高喷车) // 按键处理 // if(喷水车) // 按键处理 // 更新 update() { if (this.selectedObject) { this.RotateSelfControl(); this.HighSprayCarControl(); this.LadderCarControl(); this.FiremenControl(); this.FireTruckControl(); this.AscendingPlatformCarControl(); this.WaterCannonControl(); this.LadderControl(); this.LightTruckControl(); } } // 控制自身旋转 public RotateSelfControl() { if (this.CanRotateSelf()) { if (Keyboard.Instance.ArrowLeft) { this.rotateSpeed = -1; this.RotateAroundAxisY(this.selectedObject); } if (Keyboard.Instance.ArrowRight) { this.rotateSpeed = 1; this.RotateAroundAxisY(this.selectedObject); } } } // 控制消防员 public FiremenControl() { if (this.IsFiremen()) { if (Keyboard.Instance.u) { this.rotateSpeed = -1; this.RotateAroundAxisX(this.PT); if (this.dataPT == null) { this.dataPT = new ChildNodeData(); this.dataPT.name = "PT"; this.markData.childrenNodeData.push(this.dataPT); } this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; } if (Keyboard.Instance.j) { this.rotateSpeed = 1; this.RotateAroundAxisX(this.PT); if (this.dataPT == null) { this.dataPT = new ChildNodeData(); this.dataPT.name = "PT"; this.markData.childrenNodeData.push(this.dataPT); } this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; } if (Keyboard.Instance.AddKey) { this.markInfo?.changeWaterPower(this.markData.waterPower + this.deltaTime * this.waterPowerSpeed); } if (Keyboard.Instance.SubKey) { this.markInfo?.changeWaterPower(this.markData.waterPower - this.deltaTime * this.waterPowerSpeed); } } } // 控制喷水车 public FireTruckControl() { if (this.IsFireTruck()) { if (Keyboard.Instance.u) { this.rotateSpeed = -1; this.RotateAroundAxisX(this.PT); if (this.dataPT == null) { this.dataPT = new ChildNodeData(); this.dataPT.name = "PT"; this.markData.childrenNodeData.push(this.dataPT); } this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; } if (Keyboard.Instance.j) { this.rotateSpeed = 1; this.RotateAroundAxisX(this.PT); if (this.dataPT == null) { this.dataPT = new ChildNodeData(); this.dataPT.name = "PT"; this.markData.childrenNodeData.push(this.dataPT); } this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; } if (Keyboard.Instance.h) { this.rotateSpeed = -1; this.RotateAroundAxisY(this.PT); if (this.dataPT == null) { this.dataPT = new ChildNodeData(); this.dataPT.name = "PT"; this.markData.childrenNodeData.push(this.dataPT); } this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; } if (Keyboard.Instance.k) { this.rotateSpeed = 1; this.RotateAroundAxisY(this.PT); if (this.dataPT == null) { this.dataPT = new ChildNodeData(); this.dataPT.name = "PT"; this.markData.childrenNodeData.push(this.dataPT); } this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; } if (Keyboard.Instance.AddKey) { this.markInfo?.changeWaterPower(this.markData.waterPower + this.deltaTime * this.waterPowerSpeed); } if (Keyboard.Instance.SubKey) { this.markInfo?.changeWaterPower(this.markData.waterPower - this.deltaTime * this.waterPowerSpeed); } } } // 控制照明车 public LightTruckControl() { // if (this.markType == MarkType.ZMC) { // if (Keyboard.Instance.a) { // this.rotateSpeed = 1; // this.RotateAroundAxisZ(this.Light); // if (this.dataLight == null) { // this.dataLight = new ChildNodeData(); // this.dataLight.name = "Light"; // this.markData.childrenNodeData.push(this.dataLight); // } // this.dataLight.transformData.rotationQuaternion = this.Light.rotationQuaternion; // } // if (Keyboard.Instance.d) { // this.rotateSpeed = -1; // this.RotateAroundAxisZ(this.Light); // if (this.dataLight == null) { // this.dataLight = new ChildNodeData(); // this.dataLight.name = "Light"; // this.markData.childrenNodeData.push(this.dataLight); // } // this.dataLight.transformData.rotationQuaternion = this.Light.rotationQuaternion; // } // if (Keyboard.Instance.w) { // this.rotateSpeed = -1; // this.RotateAroundAxisX(this.Arm); // if (this.dataArm == null) { // this.dataArm = new ChildNodeData(); // this.dataArm.name = "Arm"; // this.markData.childrenNodeData.push(this.dataArm); // } // this.dataArm.transformData.rotationQuaternion = this.Arm.rotationQuaternion; // } // if (Keyboard.Instance.s) { // this.rotateSpeed = 1; // this.RotateAroundAxisX(this.Arm); // if (this.dataArm == null) { // this.dataArm = new ChildNodeData(); // this.dataArm.name = "Arm"; // this.markData.childrenNodeData.push(this.dataArm); // } // this.dataArm.transformData.rotationQuaternion = this.Arm.rotationQuaternion; // } // } } // 控制高喷车 public HighSprayCarControl() { // if (this.markType == MarkType.GPC) { // if (Keyboard.Instance.ArrowLeft) { // this.rotateSpeed = -1; // this.RotateAroundAxisY(this.selectedObject); // } // if (Keyboard.Instance.ArrowRight) { // this.rotateSpeed = 1; // this.RotateAroundAxisY(this.selectedObject); // } // if (Keyboard.Instance.a) { // this.rotateSpeed = 1; // this.RotateAroundAxisY(this.Bi); // if (this.dataBi == null) { // this.dataBi = new ChildNodeData(); // this.dataBi.name = "Bi"; // this.markData.childrenNodeData.push(this.dataBi); // } // this.dataBi.transformData.rotationQuaternion = this.Bi.rotationQuaternion; // } // if (Keyboard.Instance.d) { // this.rotateSpeed = -1; // this.RotateAroundAxisY(this.Bi); // if (this.dataBi == null) { // this.dataBi = new ChildNodeData(); // this.dataBi.name = "Bi"; // this.markData.childrenNodeData.push(this.dataBi); // } // this.dataBi.transformData.rotationQuaternion = this.Bi.rotationQuaternion; // } // if (Keyboard.Instance.w) { // this.rotateSpeed = -1; // this.RotateAroundAxisX(this.Bi1); // if (this.dataBi1 == null) { // this.dataBi1 = new ChildNodeData(); // this.dataBi1.name = "Bi1"; // this.markData.childrenNodeData.push(this.dataBi1); // } // this.dataBi1.transformData.rotationQuaternion = this.Bi1.rotationQuaternion; // } // if (Keyboard.Instance.s) { // this.rotateSpeed = 1; // this.RotateAroundAxisX(this.Bi1); // if (this.dataBi1 == null) { // this.dataBi1 = new ChildNodeData(); // this.dataBi1.name = "Bi1"; // this.markData.childrenNodeData.push(this.dataBi1); // } // this.dataBi1.transformData.rotationQuaternion = this.Bi1.rotationQuaternion; // } // if (Keyboard.Instance.u) { // this.rotateSpeed = -1; // this.RotateAroundAxisX(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.j) { // this.rotateSpeed = 1; // this.RotateAroundAxisX(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.h) { // // this.rotateSpeed = -1; // // this.RotateAroundAxisY(this.PT); // } // if (Keyboard.Instance.k) { // // this.rotateSpeed = 1; // // this.RotateAroundAxisY(this.PT); // } // if (Keyboard.Instance.W) { // this.moveBiSpeed = 5; // this.TranlateBiGPC(); // } // if (Keyboard.Instance.S) { // this.moveBiSpeed = -5; // this.TranlateBiGPC(); // } // if (Keyboard.Instance.U) { // this.rotateSpeed = -1; // this.RotateAroundAxisX(this.Bi6); // if (this.dataBi6 == null) { // this.dataBi6 = new ChildNodeData(); // this.dataBi6.name = "Bi6"; // this.markData.childrenNodeData.push(this.dataBi6); // } // this.dataBi6.transformData.rotationQuaternion = this.Bi6.rotationQuaternion; // } // if (Keyboard.Instance.J) { // this.rotateSpeed = 1; // this.RotateAroundAxisX(this.Bi6); // if (this.dataBi6 == null) { // this.dataBi6 = new ChildNodeData(); // this.dataBi6.name = "Bi6"; // this.markData.childrenNodeData.push(this.dataBi6); // } // this.dataBi6.transformData.rotationQuaternion = this.Bi6.rotationQuaternion; // } // if (Keyboard.Instance.AddKey) { // this.markInfo?.changeWaterPower(this.markData.waterPower + this.deltaTime * this.waterPowerSpeed); // } // if (Keyboard.Instance.SubKey) { // this.markInfo?.changeWaterPower(this.markData.waterPower - this.deltaTime * this.waterPowerSpeed); // } // } } // 控制云梯车 public LadderCarControl() { // if (this.markType == MarkType.YTC) { // var theta = Vector3.Dot(this.PingTai.forward, Vector3.Up()); // this.PingTai.rotate(Axis.X, theta, Space.WORLD); // if (Keyboard.Instance.ArrowLeft) { // this.rotateSpeed = -1; // this.RotateAroundAxisY(this.selectedObject); // } // if (Keyboard.Instance.ArrowRight) { // this.rotateSpeed = 1; // this.RotateAroundAxisY(this.selectedObject); // } // if (Keyboard.Instance.a) { // this.rotateSpeed = 1; // this.RotateAroundAxisY(this.Bi); // if (this.dataBi == null) { // this.dataBi = new ChildNodeData(); // this.dataBi.name = "Bi"; // this.markData.childrenNodeData.push(this.dataBi); // } // this.dataBi.transformData.rotationQuaternion = this.Bi.rotationQuaternion; // } // if (Keyboard.Instance.d) { // this.rotateSpeed = -1; // this.RotateAroundAxisY(this.Bi); // if (this.dataBi == null) { // this.dataBi = new ChildNodeData(); // this.dataBi.name = "Bi"; // this.markData.childrenNodeData.push(this.dataBi); // } // this.dataBi.transformData.rotationQuaternion = this.Bi.rotationQuaternion; // } // if (Keyboard.Instance.w) { // this.rotateSpeed = -1; // this.RotateAroundAxisX(this.Bi1); // if (this.dataBi1 == null) { // this.dataBi1 = new ChildNodeData(); // this.dataBi1.name = "Bi1"; // this.markData.childrenNodeData.push(this.dataBi1); // } // this.dataBi1.transformData.rotationQuaternion = this.Bi1.rotationQuaternion; // } // if (Keyboard.Instance.s) { // this.rotateSpeed = 1; // this.RotateAroundAxisX(this.Bi1); // if (this.dataBi1 == null) { // this.dataBi1 = new ChildNodeData(); // this.dataBi1.name = "Bi1"; // this.markData.childrenNodeData.push(this.dataBi1); // } // this.dataBi1.transformData.rotationQuaternion = this.Bi1.rotationQuaternion; // } // if (Keyboard.Instance.u) { // this.rotateSpeed = -1; // this.RotateAroundAxisX(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.j) { // this.rotateSpeed = 1; // this.RotateAroundAxisX(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.h) { // this.rotateSpeed = -1; // this.RotateAroundAxisY(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.k) { // this.rotateSpeed = 1; // this.RotateAroundAxisY(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.W) { // this.moveBiSpeed = 5; // this.TranlateBiGPC(); // } // if (Keyboard.Instance.S) { // this.moveBiSpeed = -5; // this.TranlateBiGPC(); // } // if (Keyboard.Instance.AddKey) { // this.markInfo?.changeWaterPower(this.markData.waterPower + this.deltaTime * this.waterPowerSpeed); // } // if (Keyboard.Instance.SubKey) { // this.markInfo?.changeWaterPower(this.markData.waterPower - this.deltaTime * this.waterPowerSpeed); // } // } } // 控制登高平台车 public AscendingPlatformCarControl() { // if (this.markType == MarkType.DGPTC) { // var theta = Vector3.Dot(this.PingTai.forward, Vector3.Up()); // this.PingTai.rotate(Axis.X, theta, Space.WORLD); // if (Keyboard.Instance.ArrowLeft) { // this.rotateSpeed = -1; // this.RotateAroundAxisY(this.selectedObject); // } // if (Keyboard.Instance.ArrowRight) { // this.rotateSpeed = 1; // this.RotateAroundAxisY(this.selectedObject); // } // if (Keyboard.Instance.a) { // this.rotateSpeed = 1; // this.RotateAroundAxisY(this.Bi); // if (this.dataBi == null) { // this.dataBi = new ChildNodeData(); // this.dataBi.name = "Bi"; // this.markData.childrenNodeData.push(this.dataBi); // } // this.dataBi.transformData.rotationQuaternion = this.Bi.rotationQuaternion; // } // if (Keyboard.Instance.d) { // this.rotateSpeed = -1; // this.RotateAroundAxisY(this.Bi); // if (this.dataBi == null) { // this.dataBi = new ChildNodeData(); // this.dataBi.name = "Bi"; // this.markData.childrenNodeData.push(this.dataBi); // } // this.dataBi.transformData.rotationQuaternion = this.Bi.rotationQuaternion; // } // if (Keyboard.Instance.w) { // this.rotateSpeed = -1; // this.RotateAroundAxisX(this.Bi1); // if (this.dataBi1 == null) { // this.dataBi1 = new ChildNodeData(); // this.dataBi1.name = "Bi1"; // this.markData.childrenNodeData.push(this.dataBi1); // } // this.dataBi1.transformData.rotationQuaternion = this.Bi1.rotationQuaternion; // } // if (Keyboard.Instance.s) { // this.rotateSpeed = 1; // this.RotateAroundAxisX(this.Bi1); // if (this.dataBi1 == null) { // this.dataBi1 = new ChildNodeData(); // this.dataBi1.name = "Bi1"; // this.markData.childrenNodeData.push(this.dataBi1); // } // this.dataBi1.transformData.rotationQuaternion = this.Bi1.rotationQuaternion; // } // if (Keyboard.Instance.u) { // this.rotateSpeed = -1; // this.RotateAroundAxisX(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.j) { // this.rotateSpeed = 1; // this.RotateAroundAxisX(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.h) { // this.rotateSpeed = -1; // this.RotateAroundAxisY(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.k) { // this.rotateSpeed = 1; // this.RotateAroundAxisY(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.W) { // this.moveBiSpeed = 5; // this.TranlateBiDGPTC(); // } // if (Keyboard.Instance.S) { // this.moveBiSpeed = -5; // this.TranlateBiDGPTC(); // } // if (Keyboard.Instance.U) { // this.rotateSpeed = -1; // this.RotateAroundAxisX(this.Bi5); // if (this.dataBi5 == null) { // this.dataBi5 = new ChildNodeData(); // this.dataBi5.name = "Bi5"; // this.markData.childrenNodeData.push(this.dataBi5); // } // this.dataBi5.transformData.rotationQuaternion = this.Bi5.rotationQuaternion; // } // if (Keyboard.Instance.J) { // this.rotateSpeed = 1; // this.RotateAroundAxisX(this.Bi5); // if (this.dataBi5 == null) { // this.dataBi5 = new ChildNodeData(); // this.dataBi5.name = "Bi5"; // this.markData.childrenNodeData.push(this.dataBi5); // } // this.dataBi5.transformData.rotationQuaternion = this.Bi5.rotationQuaternion; // } // if (Keyboard.Instance.AddKey) { // this.markInfo?.changeWaterPower(this.markData.waterPower + this.deltaTime * this.waterPowerSpeed); // } // if (Keyboard.Instance.SubKey) { // this.markInfo?.changeWaterPower(this.markData.waterPower - this.deltaTime * this.waterPowerSpeed); // } // } } // 水炮控制 public WaterCannonControl() { // if (this.markType == MarkType.SP) { // if (Keyboard.Instance.h) { // this.rotateSpeed = -1; // this.RotateAroundAxisY(this.selectedObject); // } // if (Keyboard.Instance.k) { // this.rotateSpeed = 1; // this.RotateAroundAxisY(this.selectedObject); // } // if (Keyboard.Instance.u) { // this.rotateSpeed = -1; // this.RotateAroundAxisX(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.j) { // this.rotateSpeed = 1; // this.RotateAroundAxisX(this.PT); // if (this.dataPT == null) { // this.dataPT = new ChildNodeData(); // this.dataPT.name = "PT"; // this.markData.childrenNodeData.push(this.dataPT); // } // this.dataPT.transformData.rotationQuaternion = this.PT.rotationQuaternion; // } // if (Keyboard.Instance.AddKey) { // this.markInfo?.changeWaterPower(this.markData.waterPower + this.deltaTime * this.waterPowerSpeed); // } // if (Keyboard.Instance.SubKey) { // this.markInfo?.changeWaterPower(this.markData.waterPower - this.deltaTime * this.waterPowerSpeed); // } // } } // 梯子 public LadderControl() { // if (this.markType == MarkType.LT6) { // if (Keyboard.Instance.W) { // this.moveBiSpeed = 5; // this.TranslateLadder6M(); // } // if (Keyboard.Instance.S) { // this.moveBiSpeed = -5; // this.TranslateLadder6M(); // } // } else if (this.markType == MarkType.LT15) { // if (Keyboard.Instance.W) { // this.moveBiSpeed = 5; // this.TranslateLadder15M(); // } // if (Keyboard.Instance.S) { // this.moveBiSpeed = -5; // this.TranslateLadder15M(); // } // } } // 围绕Y轴旋转 public RotateAroundAxisY(mesh: Mesh) { mesh?.rotate(Axis.Y, this.scene.deltaTime * 0.001 * this.rotateSpeed, Space.LOCAL); } // 围绕X轴旋转 public RotateAroundAxisX(mesh: Mesh) { mesh?.rotate(Axis.X, this.scene.deltaTime * 0.001 * this.rotateSpeed, Space.LOCAL); } // 围绕Z轴旋转 public RotateAroundAxisZ(mesh: Mesh) { mesh?.rotate(Axis.Z, this.scene.deltaTime * 0.001 * this.rotateSpeed, Space.LOCAL); } // 高喷车展臂 public TranlateBiGPC() { switch (this.armActionState) { case ArmActionState.Bi3: this.TranlateBi(this.Bi3, ArmActionState.Bi4); if (this.dataBi3 == null) { this.dataBi3 = new ChildNodeData(); this.dataBi3.name = "Bi3"; this.markData.childrenNodeData.push(this.dataBi3); } this.dataBi3.transformData.position = this.Bi3.position; break; case ArmActionState.Bi4: this.TranlateBi(this.Bi4, ArmActionState.Bi5); if (this.dataBi4 == null) { this.dataBi4 = new ChildNodeData(); this.dataBi4.name = "Bi4"; this.markData.childrenNodeData.push(this.dataBi4); } this.dataBi4.transformData.position = this.Bi4.position; break; case ArmActionState.Bi5: this.TranlateBi(this.Bi5, ArmActionState.Bi1); if (this.dataBi5 == null) { this.dataBi5 = new ChildNodeData(); this.dataBi5.name = "Bi5"; this.markData.childrenNodeData.push(this.dataBi5); } this.dataBi5.transformData.position = this.Bi5.position; break; default: this.TranlateBi(this.Bi2, ArmActionState.Bi3); if (this.dataBi2 == null) { this.dataBi2 = new ChildNodeData(); this.dataBi2.name = "Bi2"; this.markData.childrenNodeData.push(this.dataBi2); } this.dataBi2.transformData.position = this.Bi2.position; break; } } // 高喷车展臂 public TranlateBiYTC() { switch (this.armActionState) { case ArmActionState.Bi3: this.TranlateBi(this.Bi3, ArmActionState.Bi4); if (this.dataBi3 == null) { this.dataBi3 = new ChildNodeData(); this.dataBi3.name = "Bi3"; this.markData.childrenNodeData.push(this.dataBi3); } this.dataBi3.transformData.position = this.Bi3.position; break; case ArmActionState.Bi4: this.TranlateBi(this.Bi4, ArmActionState.Bi5); if (this.dataBi4 == null) { this.dataBi4 = new ChildNodeData(); this.dataBi4.name = "Bi4"; this.markData.childrenNodeData.push(this.dataBi4); } this.dataBi4.transformData.position = this.Bi4.position; break; case ArmActionState.Bi5: this.TranlateBi(this.Bi5, ArmActionState.Bi6); if (this.dataBi5 == null) { this.dataBi5 = new ChildNodeData(); this.dataBi5.name = "Bi5"; this.markData.childrenNodeData.push(this.dataBi5); } this.dataBi5.transformData.position = this.Bi5.position; break; case ArmActionState.Bi6: this.TranlateBi(this.Bi6, ArmActionState.Bi1); if (this.dataBi6 == null) { this.dataBi6 = new ChildNodeData(); this.dataBi6.name = "Bi6"; this.markData.childrenNodeData.push(this.dataBi6); } this.dataBi6.transformData.position = this.Bi6.position; break; default: this.TranlateBi(this.Bi2, ArmActionState.Bi3); if (this.dataBi2 == null) { this.dataBi2 = new ChildNodeData(); this.dataBi2.name = "Bi2"; this.markData.childrenNodeData.push(this.dataBi2); } this.dataBi2.transformData.position = this.Bi2.position; break; } } // 登高平台车展臂 public TranlateBiDGPTC() { switch (this.armActionState) { case ArmActionState.Bi3: this.TranlateBi(this.Bi3, ArmActionState.Bi4); break; default: this.TranlateBi(this.Bi2, ArmActionState.Bi3); break; } } // 移动6米梯子 public TranslateLadder6M() { switch (this.LTActionState) { default: this.TranlateLadder(this.LadderUp, 3, 0, LTState.None); if (this.dataLadderUp == null) { this.dataLadderUp = new ChildNodeData(); this.dataLadderUp.name = "LadderUp"; this.markData.childrenNodeData.push(this.dataLadderUp); } this.dataLadderUp.transformData.position = this.LadderUp.position; break; } } // 移动15米梯子 public TranslateLadder15M() { switch (this.LTActionState) { default: this.TranlateLadder(this.LadderUp1, 5, 0, LTState.LU2); if (this.dataLadderUp1 == null) { this.dataLadderUp1 = new ChildNodeData(); this.dataLadderUp1.name = "LadderUp1"; this.markData.childrenNodeData.push(this.dataLadderUp1); } this.dataLadderUp1.transformData.position = this.LadderUp1.position; break; case LTState.LU2: this.TranlateLadder(this.LadderUp2, 5, 0, LTState.None); if (this.dataLadderUp2 == null) { this.dataLadderUp2 = new ChildNodeData(); this.dataLadderUp2.name = "LadderUp2"; this.markData.childrenNodeData.push(this.dataLadderUp2); } this.dataLadderUp2.transformData.position = this.LadderUp2.position; break; } } // 消防车展臂 public TranlateBi(tranlateMesh: Mesh, nextState: ArmActionState) { tranlateMesh?.translate(Axis.Z, this.scene.deltaTime * 0.001 * this.moveBiSpeed, Space.LOCAL); if (tranlateMesh?.position.z > this.maxArmlength) { tranlateMesh.position.z = this.maxArmlength; this.armActionState = nextState; } else if (tranlateMesh?.position.z < this.minArmlength) { tranlateMesh.position.z = this.minArmlength; this.armActionState = nextState; } } // 移动梯子 public TranlateLadder(tranlateMesh: TransformNode, maxLength: number, minLength: number, nextState: LTState) { tranlateMesh?.translate(Axis.Y, this.scene.deltaTime * 0.001 * this.moveBiSpeed, Space.LOCAL); if (tranlateMesh?.position.y > maxLength) { tranlateMesh.position.y = maxLength; this.LTActionState = nextState; } else if (tranlateMesh?.position.y < minLength) { tranlateMesh.position.y = minLength; this.LTActionState = nextState; } } // 旋转消防车 // public RotateRoot(angle: number) { // if (this.selectedObject) { // this.selectedObject.rotate(Axis.Y, angle, Space.LOCAL); // } // } // 旋转消防车举臂底盘 // public RotateBi(angle: number) { // if (this.Bi) { // this.Bi.rotate(Axis.Y, angle, Space.LOCAL); // } // } // 旋转消防车举臂角度 // public RotateAroundAxisX(angle: number) { // if (this.Bi1) { // this.Bi1.rotate(Axis.X, angle, Space.LOCAL); // } // } // 高喷车喷头前一节举臂 // public RotateBi6(angle: number) { // if (this.Bi6) { // this.Bi6.rotate(Axis.X, angle, Space.LOCAL); // } // } // 自动旋转Bi // public AutoRotateBi() { // // this.center.position.set(10, 0, 10); // // const lookPosBox = this.targetPoint.subtract(this.box.absolutePosition).normalize(); // // lookPosBox.y = 0; // // const q0 = Quaternion.FromLookDirectionLH(lookPosBox, Vector3.Up()); // // if (!this.box.absoluteRotationQuaternion.equalsWithEpsilon(q0, 0.01)) { // // this.box.rotate(Axis.Y, 0.005, Space.LOCAL) // // } // // const lookPos = this.targetPoint.subtract(this.Bi.absolutePosition).normalize(); // // lookPos.y = 0; // // const q1 = Quaternion.FromLookDirectionLH(lookPos, Vector3.Up()); // // if (!this.Bi.absoluteRotationQuaternion.equalsWithEpsilon(q1, 0.01)) { // // this.Bi.rotate(Axis.Y, 0.005, Space.LOCAL) // // } // // const absoluteRotationQuaternion = Quaternion.FromLookDirectionLH(lookPos, Vector3.Up()); // // const absoluteRotationQuaternionOffset = absoluteRotationQuaternion.subtract(this.root.absoluteRotationQuaternion); // // this.Bi.addRotation(0, absoluteRotationQuaternionOffset.toEulerAngles().y, 0); // // this.armActionState = ArmActionState.Bi2; // // this.Bi.rotationQuaternion = Quaternion.Slerp(this.Bi.rotationQuaternion, absoluteRotationQuaternionOffset.normalize(), this.deltaTime * 10);// TODO需要设置世界旋转 // // if (this.Bi.rotationQuaternion.equalsWithEpsilon(rotation, 0.1)) { // // this.Bi.rotationQuaternion = rotation; // // // this.armActionState = ArmActionState.Bi2; // // console.log("旋转地盘结束"); // // const line = MeshBuilder.CreateLines('line', { points: [this.targetPoint, this.Bi.absolutePosition] }); // // line.color = Color3.Red(); // // } // // const v1 = (new Vector3(this.targetPoint.x, this.Bi.position.y, this.targetPoint.z).subtract(this.Bi.position)).normalize(); // // const v2 = this.root.forward; // // const targetDir = Vector3.Cross(v1, v2).y > 0 ? 1 : -1; // // const targetAngle = Math.acos(Vector3.Dot(v1, v2)) * 180 / Math.PI * targetDir; // // const currentAngle = this.Bi.rotationQuaternion.toEulerAngles().y * 180 / Math.PI; // // // console.log(this.Bi.rotationQuaternion.equalsWithEpsilon(new Quaternion(-rotation.x, -rotation.y, -rotation.z, rotation.w), 0.001)); // // if (Math.abs(targetAngle - currentAngle) > 0.5) { // // const speedDir = (targetAngle - currentAngle) >= 0 ? 1 : -1; // // this.RotateBi(speedDir * 0.01); // // } else { // // this.armActionState = ArmActionState.Bi2; // // } // } // public AutoRotateBi1() { // // const d2E = Math.floor(Vector3.Distance(this.Bi6.absolutePosition, this.Bi.absolutePosition)) + 15;//臂长 // // const d2T = Math.floor(Vector3.Distance(this.Bi.absolutePosition, this.targetPoint));//臂底端到目标的距离 // // const distance = Math.round(Vector3.Distance(this.Bi6.absolutePosition, this.targetPoint)); //Bi6到目标距离 // // const v1 = (new Vector3(this.targetPoint.x, this.targetPoint.y, this.targetPoint.z).subtract(this.Bi1.position)).normalize(); // // const v2 = this.Bi.forward.normalize(); // // const targetDir = Vector3.Cross(v1, v2).x > 0 ? -1 : 1; // // const lookPos = this.targetPoint.subtract(this.Bi1.position).normalize(); // // const rotation = Quaternion.FromLookDirectionRH(lookPos, this.Bi1.up); // // this.Bi1.rotationQuaternion = Quaternion.Slerp(this.Bi1.rotationQuaternion, new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w), this.deltaTime * 10); // // const targetAngle = Math.acos(Vector3.Dot(v1, v2)) * 180 / Math.PI * targetDir; // // const currentAngle = this.Bi1.rotationQuaternion.toEulerAngles().x * 180 / Math.PI; // // console.log(currentAngle,); // // console.log(targetAngle, "================="); // // if (Math.abs(targetAngle - currentAngle) > 0.5) { // // const speedDir = (targetAngle - currentAngle) >= 0 ? 1 : -1; // // this.RotateBi1(speedDir * 0.01); // // } else { // // this.armActionState = ArmActionState.Bi6; // // } // // console.log(distance, '') // // if (d2E < d2T) { // // // todo 直接指向目标点 // // this.armActionState = ArmActionState.Bi6; // // } else { // // // 根据距离上调或下调 // // if (distance < 15) { // // this.RotateBi1(-this.deltaTime); // // } else if (distance > 15) { // // this.RotateBi1(this.deltaTime); // // } else { // // this.armActionState = ArmActionState.Bi6; // // } // // } // } // public AutoRotateBi6() { // // const v1 = (new Vector3(this.targetPoint.x, this.targetPoint.y, this.targetPoint.z).subtract(this.Bi6.position)).normalize(); // // const v2 = this.Bi.forward.normalize(); // // const targetDir = Vector3.Cross(v1, v2).x > 0 ? -1 : 1; // // const targetAngle = Math.acos(Vector3.Dot(v1, v2)) * 180 / Math.PI * targetDir; // // const currentAngle = this.Bi6.rotationQuaternion.toEulerAngles().x * 180 / Math.PI; // // const test = Vector3.GetAngleBetweenVectors(v1, this.Bi1.forward.normalize(), this.Bi1.up.normalize()) * 180 / Math.PI; // // const isUp = Math.abs(this.Bi6.rotationQuaternion.toEulerAngles().y) < 0.1 && Math.abs(this.Bi6.rotationQuaternion.toEulerAngles().z) < 0.1; // // const isZero = test - currentAngle > 0; // // if (test - currentAngle < 0.5 && isZero && isUp) { // // // this.armActionState = ArmActionState.Pentou; // // } else { // // if (isUp) { // // if (isZero) { // // this.RotateBi6(0.01); // // console.log("0"); // // } else { // // this.RotateBi6(-0.01); // // console.log("1"); // // } // // } else { // // this.RotateBi6(-0.01); // // console.log("2"); // // } // // } // // console.log(test, 'Angle', isUp); // // console.log(currentAngle, this.Bi6.rotationQuaternion.toEulerAngles().y, this.Bi6.rotationQuaternion.toEulerAngles().z); // } // // 移动举臂 // public AutoTranlateBi(tranlateMesh: Mesh, nextState: ArmActionState) { // //#region 自动伸臂 // const d2E = Math.floor(Vector3.Distance(this.Bi6.absolutePosition, this.Bi.absolutePosition)) + 15;//臂长 // const d2T = Math.floor(Vector3.Distance(this.Bi.absolutePosition, this.targetPoint));//臂底端到目标的距离 // // console.log("当前臂长:", d2E, d2T); // // 臂长小于目标距离,伸臂 // if (d2E < d2T) { // tranlateMesh.translate(Axis.Z, this.deltaTime * this.speed, Space.LOCAL); // if (tranlateMesh.position.z > this.maxArmlength) { // tranlateMesh.position.z = this.maxArmlength; // this.armActionState = nextState; // } else if (tranlateMesh.position.z < this.minArmlength) { // tranlateMesh.position.z = this.minArmlength; // this.armActionState = nextState; // } // } // else if (d2E > d2T) { // tranlateMesh.translate(Axis.Z, -this.deltaTime * this.speed, Space.LOCAL); // if (tranlateMesh.position.z > this.maxArmlength) { // tranlateMesh.position.z = this.maxArmlength; // this.armActionState = nextState; // } else if (tranlateMesh.position.z < this.minArmlength) { // tranlateMesh.position.z = this.minArmlength; // this.armActionState = nextState; // } // } // else { // this.armActionState = nextState; // } // //#endregion // } } export class Keyboard { public ArrowLeft = false; public ArrowRight = false; public ShiftKey = false; public w = false; public a = false; public s = false; public d = false; public u = false; public j = false; public h = false; public k = false; public W = false; public S = false; public U = false; public J = false; public AddKey = false; public SubKey = false; private static instance: Keyboard = new Keyboard(); public static get Instance(): Keyboard { return this.instance; } /** * */ private constructor() { // 添加快捷键 document.addEventListener('keydown', (e: KeyboardEvent) => { if (e.key == null) { return; } let key = e.key.toLocaleLowerCase(); // console.log(key); if (key == "w" && e.shiftKey) { this.W = true; } else if (key == "w") { this.w = true; } if (key == "s" && e.shiftKey) { this.S = true; } else if (key == "s") { this.s = true; } if (key == "u" && e.shiftKey) { this.U = true; } else if (key == "u") { this.u = true; } if (key == "j" && e.shiftKey) { this.J = true; } else if (key == "j") { this.j = true; } if (key == "arrowleft") { this.ArrowLeft = true; } if (key == "arrowright") { this.ArrowRight = true; } if (key == "a") { this.a = true; } if (key == "d") { this.d = true; } if (key == "h") { this.h = true; } if (key == "k") { this.k = true; } if (key == "=") { this.AddKey = true; } if (key == "-") { this.SubKey = true; } if (key == "shift") { if (this.w == true) { this.W = true; this.w = false; } else if (this.s == true) { this.S = true; this.s = false; } else if (this.u == true) { this.U = true; this.u = false; } else if (this.j == true) { this.J = true; this.j = false; } } }); document.addEventListener('keyup', (e: KeyboardEvent) => { if (e.key == null) { return; } let key = e.key.toLocaleLowerCase(); if (key == "arrowleft") { this.ArrowLeft = false; } if (key == "arrowright") { this.ArrowRight = false; } if (key == "w") { this.w = false; this.W = false; } if (key == "a") { this.a = false; } if (key == "s") { this.s = false; this.S = false; } if (key == "d") { this.d = false; } if (key == "u") { this.u = false; this.U = false; } if (key == "j") { this.j = false; this.J = false; } if (key == "h") { this.h = false; } if (key == "k") { this.k = false; } if (key == "=") { this.AddKey = false; } if (key == "-") { this.SubKey = false; } if (key == "shift") { if (this.W == true) { this.W = false; this.w = true; } else if (this.S == true) { this.S = false; this.s = true; } else if (this.U == true) { this.U = false; this.u = true; } else if (this.J == true) { this.J = false; this.j = true; } } }); } }