52 lines
1.4 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
} |