pinball/assets/Scripts/Spring.ts

37 lines
1.2 KiB
TypeScript

import { _decorator, Collider2D, Component, Contact2DType, Node, RigidBody2D, Vec2 } from 'cc';
import Utilities from './Utilities/Utilities';
const { ccclass, property } = _decorator;
@ccclass('Spring')
export class Spring extends Component {
@property(Collider2D)
private collider: Collider2D;
@property(Node)
private gate: Node;
@property(Node)
private lid: Node;
protected onLoad(): void {
this.collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);
this.gate.active = false;
}
private async onBeginContact(selfCollider: Collider2D, otherCollider: Collider2D) {
otherCollider.node.setWorldPosition(this.node.worldPosition);
const rigi = otherCollider.getComponent(RigidBody2D);
rigi.linearVelocity = Vec2.ZERO.clone();
rigi.angularVelocity = 0;
const gravity = rigi.gravityScale;
rigi.gravityScale = 0;
this.lid.active = false;
await Utilities.delay(1000);
rigi.gravityScale = gravity;
rigi.applyLinearImpulse(new Vec2(0, 100), Vec2.ZERO, true);
await Utilities.delay(500);
this.lid.active = true;
if (this.gate) {
this.gate.active = true;
}
}
}