mirror of
https://github.com/MartinKral/Slash-The-Hordes
synced 2025-09-24 04:39:05 +00:00
White flashing
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { BoxCollider2D, Component, randomRange, Vec3, _decorator } from "cc";
|
||||
import { time } from "console";
|
||||
import { BoxCollider2D, Component, Material, randomRange, Sprite, Vec3, _decorator } from "cc";
|
||||
import { ISignal } from "../../../Services/EventSystem/ISignal";
|
||||
import { Signal } from "../../../Services/EventSystem/Signal";
|
||||
import { delay } from "../../../Services/Utils/AsyncUtils";
|
||||
import { EnemySettings } from "../../Data/GameSettings";
|
||||
import { UnitHealth } from "../UnitHealth";
|
||||
import { EnemyMovementType } from "./EnemyMovementType";
|
||||
@@ -10,11 +10,15 @@ const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("Enemy")
|
||||
export class Enemy extends Component {
|
||||
@property(BoxCollider2D) public collider: BoxCollider2D;
|
||||
@property(BoxCollider2D) private collider: BoxCollider2D;
|
||||
@property(Sprite) private sprite: Sprite;
|
||||
@property(Material) private whiteMaterial: Material;
|
||||
|
||||
private deathEvent: Signal<Enemy> = new Signal<Enemy>();
|
||||
private lifetimeEndedEvent: Signal<Enemy> = new Signal<Enemy>();
|
||||
|
||||
private defaultMaterial: Material;
|
||||
|
||||
private movementType: EnemyMovementType;
|
||||
private health: UnitHealth;
|
||||
private damage: number;
|
||||
@@ -26,6 +30,8 @@ export class Enemy extends Component {
|
||||
private goldReward: number;
|
||||
|
||||
public setup(position: Vec3, settings: EnemySettings): void {
|
||||
this.defaultMaterial = this.sprite.material;
|
||||
|
||||
this.movementType = <EnemyMovementType>settings.moveType;
|
||||
this.health = new UnitHealth(settings.health);
|
||||
this.damage = settings.damage;
|
||||
@@ -38,6 +44,8 @@ export class Enemy extends Component {
|
||||
|
||||
this.node.setWorldPosition(position);
|
||||
this.node.active = true;
|
||||
|
||||
this.health.HealthPointsChangeEvent.on(this.animateHurt, this);
|
||||
}
|
||||
|
||||
public get MovementType(): EnemyMovementType {
|
||||
@@ -60,6 +68,14 @@ export class Enemy extends Component {
|
||||
return this.deathEvent;
|
||||
}
|
||||
|
||||
public get XPReward(): number {
|
||||
return this.xpReward;
|
||||
}
|
||||
|
||||
public get GoldReward(): number {
|
||||
return this.goldReward;
|
||||
}
|
||||
|
||||
public get LifetimeEndedEvent(): ISignal<Enemy> {
|
||||
return this.lifetimeEndedEvent;
|
||||
}
|
||||
@@ -85,4 +101,10 @@ export class Enemy extends Component {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async animateHurt(): Promise<void> {
|
||||
this.sprite.material = this.whiteMaterial;
|
||||
await delay(100);
|
||||
this.sprite.material = this.defaultMaterial;
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import { Component, Node, _decorator } from "cc";
|
||||
import { Component, Node, randomRange, Vec3, _decorator } from "cc";
|
||||
|
||||
import { EnemyManagerSettings } from "../../Data/GameSettings";
|
||||
import { XPSpawner } from "../../XP/XPSpawner";
|
||||
import { Enemy } from "./Enemy";
|
||||
@@ -64,7 +65,13 @@ export class EnemyManager extends Component {
|
||||
private onEnemyDied(enemy: Enemy): void {
|
||||
enemy.DeathEvent.off(this.onEnemyDied);
|
||||
enemy.LifetimeEndedEvent.off(this.onEnemyLifetimeEnded);
|
||||
this.xpSpawner.spawnXp(enemy.node.worldPosition, 1);
|
||||
|
||||
for (let index = 0; index < enemy.XPReward; index++) {
|
||||
const position: Vec3 = enemy.node.worldPosition;
|
||||
position.x += randomRange(-10, 10);
|
||||
position.y += randomRange(-10, 10);
|
||||
this.xpSpawner.spawnXp(position, 1);
|
||||
}
|
||||
}
|
||||
|
||||
private onEnemyLifetimeEnded(enemy: Enemy): void {
|
||||
|
Reference in New Issue
Block a user