BITKit/Packages/Runtime~/Unity/Scripts/Entity/Components/Health/GetDamageComponent.cs

35 lines
825 B
C#
Raw Normal View History

2023-08-11 23:57:37 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using BITKit.Entities;
using UnityEngine;
using UnityEngine.Events;
namespace BITKit.Entities
{
public class GetDamageComponent : EntityComponent
{
private readonly Queue<DamageMessage> DamageMessages = new();
[SerializeField] private UnityEvent<DamageMessage> onGetDamage;
[SerializeField, SerializeReference, SubclassSelector]
private IDamageCallback[] callbacks;
public override void OnAwake()
{
entity.AddListener<DamageMessage>(OnGetDamage);
}
private void OnGetDamage(DamageMessage obj)
{
if (obj.target != entity) return;
DamageMessages.Enqueue(obj);
onGetDamage?.Invoke(obj);
foreach (var x in callbacks)
{
x.OnGetDamage(obj);
}
}
}
}