using UnityEngine;
[CreateAssetMenu(menuName = "AI/Action/Attack")]
public class AttackAction : Action
{
[SerializeField]
private float maxheight;
[SerializeField]
private float veloctiy;
public override void Act(FiniteStateMachine fsm)
{
if (!fsm.dic.HasKey("movement")) fsm.dic.SetValue("movement", fsm.GetComponent<IMovable>());
if (!fsm.dic.HasKey("rb")) fsm.dic.SetValue("rb", fsm.GetComponent<Rigidbody>());
if ((fsm.dic.GetValue("movement") as IMovable).GetVelocity().y <= 0 && !fsm.dicVecs.HasKey("groundPoint"))
{
fsm.dicVecs.SetValue("groundPoint", fsm.transform.position);
(fsm.dic.GetValue("movement") as IMovable).ChangeVelocity(Vector3.up * veloctiy);
(fsm.dic.GetValue("rb") as Rigidbody).useGravity = false;
}
if (fsm.dicVecs.HasKey("groundPoint"))
{
if (Vector3.Distance(fsm.dicVecs.GetValue("groundPosition"), fsm.transform.position) >= maxheight)
{
fsm.dicBools.SetValue("Attacking", true);
Vector3 dir = Vector3.Normalize(fsm.GetTarget().transform.position - fsm.transform.position) * veloctiy;
if (!fsm.dic.HasKey("KnockBack")) fsm.dic.SetValue("KnockBack", -dir / 2);
(fsm.dic.GetValue("movement") as IMovable).ChangeVelocity(dir);
}
}
}
}