41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
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;
|
|
}
|
|
}
|