import { _decorator, Component, HingeJoint2D, input, CCFloat, Input, EventKeyboard, KeyCode, Enum, EventTouch, screen, } from 'cc'; const { ccclass, property } = _decorator; enum ControllerSide { Left, Right, } Enum(ControllerSide); @ccclass('Flipper') export class Flipper extends Component { @property({ visible: true, type: HingeJoint2D }) private _hingeJoint: HingeJoint2D; @property({ visible: true, type: CCFloat }) private _motorSpeedActive: number; @property({ visible: true, type: CCFloat }) private _motorSpeedDeActive: number; @property({ visible: true, type: ControllerSide }) private side = ControllerSide.Left; protected onLoad(): void { input.on(Input.EventType.KEY_DOWN, this.onKeyInputDown, this); input.on(Input.EventType.KEY_UP, this.onKeyInputUp, this); input.on(Input.EventType.TOUCH_START, this.onTouchStart, this); input.on(Input.EventType.TOUCH_END, this.onTouchEnd, this); } //#region Input Handler private onKeyInputDown(event: EventKeyboard) { switch (event.keyCode) { case KeyCode.KEY_A: case KeyCode.ARROW_LEFT: if (this.side == ControllerSide.Left) this.activeFlipper(); break; case KeyCode.KEY_D: case KeyCode.ARROW_RIGHT: if (this.side == ControllerSide.Right) this.activeFlipper(); break; default: break; } } private onKeyInputUp(event: EventKeyboard) { switch (event.keyCode) { case KeyCode.KEY_A: case KeyCode.ARROW_LEFT: if (this.side == ControllerSide.Left) this.deActiveFlipper(); break; case KeyCode.KEY_D: case KeyCode.ARROW_RIGHT: if (this.side == ControllerSide.Right) this.deActiveFlipper(); break; default: break; } } private onTouchStart(event: EventTouch) { if (event.getLocationX() > screen.windowSize.x / 2) { if (this.side == ControllerSide.Right) { this.activeFlipper(); } } else { if (this.side == ControllerSide.Left) { this.activeFlipper(); } } } private onTouchEnd(event: EventTouch) { if (event.getLocationX() > screen.windowSize.x / 2) { if (this.side == ControllerSide.Right) { this.deActiveFlipper(); } } else { if (this.side == ControllerSide.Left) { this.deActiveFlipper(); } } } //#endregion private activeFlipper(): void { this._hingeJoint.motorSpeed = this._motorSpeedActive; } private deActiveFlipper(): void { this._hingeJoint.motorSpeed = this._motorSpeedDeActive; } }