BITFALL/Assets/Artists/Scripts/Equip/AIMeleeController.cs

65 lines
1.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Data.OleDb;
using BITFALL.Bullet;
using BITFALL.Guns;
using BITFALL.Items.Melee;
using BITKit;
using BITKit.Entities.Melee;
using UnityEngine;
namespace BITFALL.Entities.Equipment
{
public class AIMeleeController : AIEquipController
{
[SerializeReference,SubclassSelector] private IMeleeService meleeService;
[SerializeField] private bool forceAttack;
private readonly IntervalUpdate interval = new(1);
private AssetableMelee assetableMelee=>assetableItem as AssetableMelee;
public override void Entry()
{
base.Entry();
UnityEntity.AddListener<BITConstant.Command.AttackCommand>(OnAttack);
}
public override void Exit()
{
base.Exit();
UnityEntity.RemoveListener<BITConstant.Command.AttackCommand>(OnAttack);
}
public override void OnUpdate(float deltaTime)
{
if (forceAttack && interval.AllowUpdate)
{
OnAttack(new BITConstant.Command.AttackCommand());
}
}
private void OnAttack(BITConstant.Command.AttackCommand obj)
{
UnityEntity.Invoke(Constant.Animation.Play, BITConstant.Player.Melee);
}
protected override void OnAnimationEvent(string animationEventName)
{
switch (animationEventName)
{
case BITConstant.Player.Attack:
case BITConstant.Player.Melee:
meleeService.Melee(new MeleeCommand()
{
Damage = assetableMelee.MeleeDamage,
Force = assetableMelee.MeleeForce,
PlayerId = Entity.Id,
Position = transform.position,
Range = assetableMelee.MeleeRange,
Forward = UnityEntity.transform.forward,
});
break;
}
}
}
}