pinball/assets/_Game/Scripts/Gameplay/Flipper.ts

106 lines
2.9 KiB
TypeScript
Raw Normal View History

2024-03-06 03:09:17 -08:00
import {
_decorator,
Component,
HingeJoint2D,
input,
CCFloat,
Input,
EventKeyboard,
KeyCode,
Enum,
EventTouch,
screen,
} from 'cc';
2024-02-27 18:19:33 -08:00
const { ccclass, property } = _decorator;
2024-03-06 03:09:17 -08:00
enum ControllerSide {
Left,
Right,
}
Enum(ControllerSide);
2024-02-27 18:19:33 -08:00
@ccclass('Flipper')
export class Flipper extends Component {
@property({ visible: true, type: HingeJoint2D })
2024-03-06 03:09:17 -08:00
private _hingeJoint: HingeJoint2D;
2024-02-27 18:19:33 -08:00
@property({ visible: true, type: CCFloat })
2024-03-06 03:09:17 -08:00
private _motorSpeedActive: number;
2024-02-27 18:19:33 -08:00
@property({ visible: true, type: CCFloat })
2024-03-06 03:09:17 -08:00
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
2024-02-28 03:25:11 -08:00
2024-03-06 03:09:17 -08:00
private activeFlipper(): void {
2024-02-27 18:19:33 -08:00
this._hingeJoint.motorSpeed = this._motorSpeedActive;
}
2024-03-06 03:09:17 -08:00
private deActiveFlipper(): void {
2024-02-27 18:19:33 -08:00
this._hingeJoint.motorSpeed = this._motorSpeedDeActive;
}
}