Projectile piercing, meta upgrades

This commit is contained in:
Martin
2022-12-13 11:58:40 +01:00
parent e626d493d2
commit 39775b2a65
15 changed files with 201 additions and 35 deletions

View File

@@ -7,20 +7,43 @@ const { ccclass, property } = _decorator;
@ccclass("Projectile")
export class Projectile extends Component {
@property(CircleCollider2D) private collider: CircleCollider2D;
private contactBeginEvent: Signal<ProjectileCollision> = new Signal<ProjectileCollision>();
private contactBeginEvent = new Signal<ProjectileCollision>();
private piercesDepletedEvent = new Signal<Projectile>();
private isInit = false;
public tryInit(): void {
if (this.isInit) return;
this.isInit = true;
private isContactListenerSet = false;
this.collider.on(Contact2DType.BEGIN_CONTACT, this.onColliderContactBegin, this);
private piercesLeft = 0;
private damage = 0;
public init(damage: number, pierces: number): void {
this.piercesLeft = pierces;
this.damage = damage;
if (!this.isContactListenerSet) {
this.isContactListenerSet = true;
this.collider.on(Contact2DType.BEGIN_CONTACT, this.onColliderContactBegin, this);
}
}
public pierce(): void {
this.piercesLeft--;
if (this.piercesLeft <= 0) {
this.piercesDepletedEvent.trigger(this);
}
}
public get Damage(): number {
return this.damage;
}
public get ContactBeginEvent(): ISignal<ProjectileCollision> {
return this.contactBeginEvent;
}
public get PiercesDepletedEvent(): ISignal<Projectile> {
return this.piercesDepletedEvent;
}
private onColliderContactBegin(thisCollider: Collider2D, otherCollider: Collider2D): void {
this.contactBeginEvent.trigger({ otherCollider, projectile: this });
}