106 lines
2.9 KiB
TypeScript
106 lines
2.9 KiB
TypeScript
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;
|
|
}
|
|
}
|