1
This commit is contained in:
52
Unity/Scripts/Entity/Core/DamageSystem.cs
Normal file
52
Unity/Scripts/Entity/Core/DamageSystem.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user