BITKit/Packages/Runtime/Entity/Core/DamageSystem.cs

52 lines
1.4 KiB
C#

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<DamageMessage> 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);
}
}
}
}