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