Death effect

This commit is contained in:
Martin
2023-01-02 13:51:49 +01:00
parent af4dd8ecbd
commit 8d241c7886
12 changed files with 327 additions and 130 deletions

View File

@@ -143,7 +143,7 @@ export class Enemy extends Component {
this.sprite.node.active = false;
await delay(200);
if (this.sprite == null) break;
if (this.sprite == null) break; // exit scene
this.sprite.node.active = true;
await delay(200);

View File

@@ -0,0 +1,12 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "5d3c93fa-41c2-4927-8a1a-5be0ccaa177b",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

View File

@@ -0,0 +1,14 @@
import { _decorator, Component, Animation, Vec3 } from "cc";
const { ccclass, property } = _decorator;
@ccclass("EnemyDeathEffect")
export class EnemyDeathEffect extends Component {
@property(Animation) private animation: Animation;
public setup(worldPosition: Vec3): void {
this.node.setWorldPosition(worldPosition);
this.node.active = true;
this.animation.play("DeathEffect");
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "213a96b0-ec0c-4951-93e9-e2b498a03f81",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,39 @@
import { _decorator, Component, Node, Prefab } from "cc";
import { ObjectPool } from "../../../../Services/ObjectPool";
import { delay } from "../../../../Services/Utils/AsyncUtils";
import { Enemy } from "../Enemy";
import { EnemyManager } from "../EnemyManager";
import { EnemyDeathEffect } from "./EnemyDeathEffect";
const { ccclass, property } = _decorator;
@ccclass("EnemyDeathEffectSpawner")
export class EnemyDeathEffectSpawner extends Component {
@property(Prefab) private deathEffectPrefab: Prefab;
private effectPool: ObjectPool<EnemyDeathEffect>;
public init(enemyManager: EnemyManager): void {
enemyManager.EnemyAddedEvent.on(this.onEnemyAdded, this);
enemyManager.EnemyRemovedEvent.on(this.onEnemyRemoved, this);
this.effectPool = new ObjectPool(this.deathEffectPrefab, this.node, 5, "EnemyDeathEffect");
}
private onEnemyAdded(enemy: Enemy): void {
enemy.DeathEvent.on(this.animateDeathEffect, this);
}
private onEnemyRemoved(enemy: Enemy): void {
enemy.DeathEvent.off(this.animateDeathEffect);
}
private async animateDeathEffect(enemy: Enemy): Promise<void> {
const deathEffect = this.effectPool.borrow();
deathEffect.setup(enemy.node.worldPosition);
await delay(360);
this.effectPool.return(deathEffect);
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "3d207f4e-7b88-466f-8280-409925d8bbb2",
"files": [],
"subMetas": {},
"userData": {}
}