pinball/assets/Scripts/MultiBall.ts

41 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-03-03 00:23:29 -08:00
import { _decorator, Collider2D, Component, Contact2DType, RigidBody2D, Vec2, Node } from 'cc';
import { GameplayController } from './GameplayController';
import Utilities from './Utilities/Utilities';
const { ccclass, property } = _decorator;
@ccclass('MultiBall')
export class MultiBall extends Component {
@property(Collider2D)
private collider: Collider2D;
private trigged = false;
private originBall: Node;
protected onLoad(): void {
this.collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);
}
protected lateUpdate(dt: number): void {
if (this.trigged) {
const ballClone = GameplayController.Instance().SpawnBall();
ballClone.node.setWorldPosition(this.node.worldPosition);
this.originBall.setWorldPosition(this.node.worldPosition);
ballClone.getComponent(RigidBody2D).applyLinearImpulse(new Vec2(40, 0), Vec2.ZERO, true);
const rigiball = this.originBall.getComponent(RigidBody2D);
rigiball.linearVelocity = Vec2.ZERO.clone();
rigiball.angularVelocity = 0;
rigiball.applyLinearImpulse(new Vec2(-40, 0), Vec2.ZERO, true);
this.trigged = false;
}
}
private async onBeginContact(selfCollider: Collider2D, otherCollider: Collider2D) {
if (this.trigged) return;
this.collider.enabled = false;
this.originBall = otherCollider.node;
this.trigged = true;
await Utilities.delay(2000);
this.collider.enabled = true;
}
}