using System.Collections; using System.Collections.Generic; using UnityEngine; using BITKit; using BITKit.SubSystems; namespace BITKit.Entities { public interface IDamageType { } public record DamageMessage { public IEntity initiator; public IEntity target; public int damage; public IDamagable hit; public Location location; public IDamageType damageType; } public interface IDamageCallback { void OnGetDamage(DamageMessage message); } public interface IDamagable { IEntity Entity { get; } Rigidbody Rigidbody { get; } void GiveDamage(DamageMessage message); } [SubSystemConfig(isMainThread = true)] public class DamageSystem : SubBITSystem { static Queue messages = new(); public static void Excute(DamageMessage damageMessage) { messages.Enqueue(damageMessage); } public override void OnCreate() { messages.Clear(); } public override void OnFixedUpdate(float deltaTime) { while (messages.TryDequeue(out var damageMessage)) { damageMessage.hit?.GiveDamage(damageMessage); damageMessage.initiator?.Invoke(damageMessage); //damageMessage.initiator?.Invoke(damageMessage); //damageMessage.target?.Invoke(damageMessage); } } } }