/// <summary>
            /// Initializes a new instance of the <see cref="SelectTargetForSkillState"/> class.
            /// </summary>
            /// <param name="selector">The selector.</param>
            /// <param name="args">The arguments.</param>
            /// <exception cref="ArgumentNullException">args</exception>
            /// <exception cref="NullReferenceException">
            /// SkillOwner
            /// or
            /// Skill
            /// </exception>
            public SelectTargetForSkillState(MouseSelector selector, SkillTargetArgsSelecting args) : base(selector)
            {
                if (args == null)
                {
                    throw new ArgumentNullException(nameof(args));
                }

                skillOwner       = args.SkillOwner ?? throw new NullReferenceException(nameof(args.SkillOwner));
                skill            = args.Skill ?? throw new NullReferenceException(nameof(args.Skill));
                accessoryObjects = new List <IPoolableObject>();

                var targetingMode = skill.GetTargetingMode();

                targetingMode.Accept(this);
            }
 /// <summary>
 /// Initializes a new instance of the <see cref="SelectAndMoveState"/> class.
 /// </summary>
 /// <param name="selector">The selector.</param>
 public SelectAndMoveState(MouseSelector selector) : base(selector)
 {
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MouseSelectorState"/> class.
 /// </summary>
 /// <param name="selector">The selector.</param>
 /// <exception cref="NullReferenceException">selector</exception>
 protected MouseSelectorState(MouseSelector selector)
 {
     this.selector = selector ?? throw new NullReferenceException(nameof(selector));
 }