BITFALL/Assets/Artists/Scripts/Entities/Health/EntityBleeding.cs

72 lines
1.4 KiB
C#
Raw Normal View History

2023-12-30 17:37:48 +08:00
using System.Collections;
using System.Collections.Generic;
2024-01-27 04:09:57 +08:00
using BITFALL.Entities.Inventory;
2023-12-30 17:37:48 +08:00
using BITKit;
using BITKit.Entities;
using UnityEngine;
namespace BITFALL.Entities
{
public struct BleedingDamage:IDamageType
{
}
public class EntityBleeding : EntityBehavior
{
[SerializeReference, SubclassSelector] private ITicker _ticker;
[SerializeField] private bool isBleeding;
[SerializeField] private int bleedingDamage;
[Inject] private IHealth _health;
2024-01-27 04:09:57 +08:00
[Inject] private IEntityInventory _inventory;
2023-12-30 17:37:48 +08:00
public override void OnAwake()
{
base.OnAwake();
_ticker.Add(OnTick);
_health.OnSetAlive += OnSetAlive;
_health.OnDamageRelease += OnDamageRelease;
2024-01-27 04:09:57 +08:00
_inventory.OnUsedItem += OnUsedItem;
}
private void OnUsedItem(IBasicItem obj)
{
var asset = obj.GetAssetable();
if (obj is null) return;
2023-12-30 17:37:48 +08:00
}
private void OnSetAlive(bool obj)
{
isBleeding = false;
}
private void OnDamageRelease(DamageMessage obj)
{
switch (obj.DamageType)
{
case BulletDamageMessage:
isBleeding = true;
break;
case MeleeDamageMessage { Bleeding: true }:
isBleeding = true;
break;
}
}
private void OnTick(float obj)
{
if (isBleeding is false) return;
if (_health.IsAlive is false) return;
UnityEntity.Invoke<DamageMessage>(
new DamageMessage()
{
Target = UnityEntity,
Damage = bleedingDamage,
DamageType = new BleedingDamage()
}
);
}
}
}