public override CharacterActionStatus OnUpdate()
    {
        if (status == ContextCreationStatus.Building)
        {
            status = contextCreator.UpdateContext();
            if (status == ContextCreationStatus.Completed)
            {
                ability.Use(contextCreator.GetContext());
                contextCreator.Reset();
            }
            else if (status == ContextCreationStatus.Cancelled)
            {
                contextCreator.Reset();
            }
        }
        else
        {
            ability.UpdateCast();
        }

        switch (status)
        {
        case ContextCreationStatus.Building:
            return(CharacterActionStatus.Running);

        case ContextCreationStatus.Completed:
            return(ability.IsCasting ? CharacterActionStatus.Running : CharacterActionStatus.Completed);

        case ContextCreationStatus.Cancelled:
            return(CharacterActionStatus.Cancelled);

        default:
            return(CharacterActionStatus.Cancelled);
        }
    }
 public override void OnStart()
 {
     status = ContextCreationStatus.Building;
     contextCreator.Setup(entity, ability);
 }