-
Notifications
You must be signed in to change notification settings - Fork 6
/
RuntimeEnemy.cs
43 lines (36 loc) · 1.14 KB
/
RuntimeEnemy.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using SpaceMarine.Model;
using Tools.Patterns.GameEvents;
using UnityEngine;
namespace SpaceMarine.Data
{
public abstract class RuntimeEnemy : IEnemy
{
protected RuntimeEnemy(EnemyData data, Vector3 startPosition)
{
Data = data;
Id = data.Id;
Health = data.Health;
StartLocalPosition = startPosition;
}
public EnemyId Id { get; }
public EnemyData Data { get; }
public bool IsDead { get; private set; }
public int Health { get; private set; }
public Vector3 StartLocalPosition { get; }
public void TakeDamage(int amount)
{
Health -= amount;
OnTakeDamage(amount);
EvaluateDeath();
}
public void Destroy() => GameEvents.Instance.Notify<GameEvent.IDestroyEnemy>(i => i.OnDestroyEnemy(this));
void EvaluateDeath()
{
IsDead = Health <= 0;
if (IsDead)
Destroy();
}
void OnTakeDamage(int damage) =>
GameEvents.Instance.Notify<GameEvent.IEnemyTakeDamage>(i => i.OnTakeDamage(this, damage));
}
}