1
This commit is contained in:
@@ -6,7 +6,7 @@ using UnityEngine;
|
||||
|
||||
namespace BITKit
|
||||
{
|
||||
public class AutoHealComponent : EntityComponent,IDamageCallback
|
||||
public class AutoHealBehavior : EntityBehavior,IDamageCallback
|
||||
{
|
||||
[SerializeField] private IntervalUpdate healDelayInterval;
|
||||
[SerializeField] private IntervalUpdate healInterval;
|
||||
@@ -14,17 +14,12 @@ namespace BITKit
|
||||
private readonly ValidHandle allowHeal = new();
|
||||
[Inject]
|
||||
private IHealth _health;
|
||||
public override void Initialize(IEntity _entity)
|
||||
{
|
||||
base.Initialize(_entity);
|
||||
_health.OnSetAlive += OnSetAlive;
|
||||
_health.OnSetHealthPoint += OnSetHP;
|
||||
_entity.RegisterCallback<IDamageCallback>(this);
|
||||
}
|
||||
|
||||
public override void OnStart()
|
||||
{
|
||||
_health = entity.Get<IHealth>();
|
||||
_health = UnityEntity.Get<IHealth>();
|
||||
|
||||
_health.OnSetAlive += OnSetAlive;
|
||||
_health.OnSetHealthPoint += OnSetHP;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
|
@@ -1,53 +1,50 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using BITKit.Entities;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BITKit
|
||||
{
|
||||
public class AutoRespawnComponent : EntityComponent,IAction
|
||||
public class AutoRespawnBehavior : EntityBehavior,IAction
|
||||
{
|
||||
[SerializeField] private IntervalUpdate respawnInterval;
|
||||
private bool requestRespawn;
|
||||
[Inject] private IHealth _health;
|
||||
private int _initialHp;
|
||||
|
||||
private CancellationTokenSource _cancellationTokenSource;
|
||||
public override void OnAwake()
|
||||
{
|
||||
_initialHp=_health.HealthPoint;
|
||||
_health.OnSetAlive += OnSetAlive;
|
||||
_health.OnSetHealthPoint += OnSetHP;
|
||||
}
|
||||
|
||||
public override void OnUpdate(float deltaTime)
|
||||
{
|
||||
if (requestRespawn && respawnInterval.AllowUpdate)
|
||||
{
|
||||
requestRespawn = false;
|
||||
Execute();
|
||||
}
|
||||
}
|
||||
|
||||
public void OnSetAlive(bool alive)
|
||||
private async void OnSetAlive(bool alive)
|
||||
{
|
||||
if (alive)
|
||||
{
|
||||
requestRespawn = false;
|
||||
_cancellationTokenSource?.Cancel();
|
||||
}
|
||||
else
|
||||
{
|
||||
respawnInterval.Reset();
|
||||
requestRespawn = true;
|
||||
_cancellationTokenSource?.Cancel();
|
||||
_cancellationTokenSource = new CancellationTokenSource();
|
||||
try
|
||||
{
|
||||
await Task.Delay(TimeSpan.FromSeconds(respawnInterval.Interval), _cancellationTokenSource.Token);
|
||||
destroyCancellationToken.ThrowIfCancellationRequested();
|
||||
Execute();
|
||||
}
|
||||
catch(MissingReferenceException){}
|
||||
catch (OperationCanceledException){}
|
||||
}
|
||||
}
|
||||
public void OnSetHP(int hp)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Execute()
|
||||
{
|
||||
if (TryGetComponent<IHealth>(out var health))
|
||||
{
|
||||
health.HealthPoint = 100;
|
||||
}
|
||||
if (_health.IsAlive is false)
|
||||
_health.HealthPoint = _initialHp;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -61,8 +61,8 @@ namespace BITKit.Entities
|
||||
}
|
||||
public record DamageMessage
|
||||
{
|
||||
public IEntity Initiator;
|
||||
public IEntity Target;
|
||||
public IUnityEntity Initiator;
|
||||
public IUnityEntity Target;
|
||||
public bool RawDamage;
|
||||
public int Damage;
|
||||
public IDamagable Hit;
|
||||
@@ -75,7 +75,7 @@ namespace BITKit.Entities
|
||||
}
|
||||
public interface IDamagable
|
||||
{
|
||||
IEntity Entity { get; }
|
||||
IUnityEntity UnityEntity { get; }
|
||||
Rigidbody Rigidbody { get; }
|
||||
void GiveDamage(DamageMessage message);
|
||||
}
|
||||
@@ -99,11 +99,6 @@ namespace BITKit.Entities
|
||||
damageMessage.Initiator?.Invoke(damageMessage);
|
||||
damageMessage.Target?.Invoke(damageMessage);
|
||||
|
||||
foreach (var x in damageMessage.Target?.GetCallbacks<IDamageCallback>()!)
|
||||
{
|
||||
x.OnGetDamage(damageMessage);
|
||||
}
|
||||
|
||||
OnEntityDamaged?.Invoke(damageMessage);
|
||||
if (heal.IsAlive is false)
|
||||
{
|
||||
|
@@ -26,7 +26,7 @@ namespace BITKit.Entities
|
||||
bool IsAlive { get; }
|
||||
}
|
||||
[CustomType(typeof(IHealth))]
|
||||
public class EntityHealth : EntityComponent, IHealth
|
||||
public class EntityHealth : EntityBehavior, IHealth
|
||||
{
|
||||
[Header(Constant.Header.Settings)]
|
||||
[SerializeField] private int healthPoint = 100;
|
||||
@@ -49,7 +49,7 @@ namespace BITKit.Entities
|
||||
public bool IsAlive { get; private set; }
|
||||
public override void OnAwake()
|
||||
{
|
||||
entity.AddListener<DamageMessage>(OnGetDamage);
|
||||
UnityEntity.AddListener<DamageMessage>(OnGetDamage);
|
||||
}
|
||||
|
||||
public override void OnStart()
|
||||
@@ -83,7 +83,7 @@ namespace BITKit.Entities
|
||||
|
||||
private void OnGetDamage(DamageMessage damageMessage)
|
||||
{
|
||||
if (damageMessage.Target != entity) return;
|
||||
if (damageMessage.Target != UnityEntity) return;
|
||||
if (IsAlive is false) return;
|
||||
var damage = damageMessage.Damage;
|
||||
foreach (var x in OnDamageFactory.CastAsFunc().Reverse())
|
||||
|
@@ -9,7 +9,7 @@ using UnityEngine.Events;
|
||||
|
||||
namespace BITKit.Entities
|
||||
{
|
||||
public class GetDamageComponent : EntityComponent
|
||||
public class GetDamageBehavior : EntityBehavior
|
||||
{
|
||||
private readonly Queue<DamageMessage> DamageMessages = new();
|
||||
[SerializeField] private UnityEvent<DamageMessage> onGetDamage;
|
||||
@@ -17,11 +17,11 @@ namespace BITKit.Entities
|
||||
private IDamageCallback[] callbacks;
|
||||
public override void OnAwake()
|
||||
{
|
||||
entity.AddListener<DamageMessage>(OnGetDamage);
|
||||
UnityEntity.AddListener<DamageMessage>(OnGetDamage);
|
||||
}
|
||||
private void OnGetDamage(DamageMessage obj)
|
||||
{
|
||||
if (obj.Target != entity) return;
|
||||
if (obj.Target != UnityEntity) return;
|
||||
DamageMessages.Enqueue(obj);
|
||||
onGetDamage?.Invoke(obj);
|
||||
foreach (var x in callbacks)
|
||||
|
Reference in New Issue
Block a user