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(OnAttack); } public override void Exit() { base.Exit(); UnityEntity.RemoveListener(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; } } } }