internal Mage(string name, Actor actor, PlayerIndex input)
            : base(name, actor)
        {
            controller = new GamePadController(input);//new KeyboardController();
            currentTargetAlignment = TargetAlignment.None;
            target = new Frostbyte.Levels.Target("target", new Actor(new DummyAnimation("target.anim")));
            target.mVisible = false;
            sortType = new DistanceSort(this);

            UpdateBehavior = Update;
        }
        public void Update()
        {
            controller.Update();
            if (controller.IsConnected)
            {
                #region Targeting
                if (controller.TargetEnemies)
                {
                    if (currentTargetAlignment != TargetAlignment.Enemy)
                    {
                        currentTarget = null;
                    }

                    currentTarget = findMinimum((This.Game.CurrentLevel as FrostbyteLevel).enemies);

                    if (currentTarget != null)
                    {
                        currentTargetAlignment = TargetAlignment.Enemy;
                    }
                }
                else if (controller.TargetAllies)
                {
                    if (currentTargetAlignment != TargetAlignment.Ally)
                    {
                        currentTarget = null;
                    }

                    currentTarget = findMinimum((This.Game.CurrentLevel as FrostbyteLevel).allies.Concat(
                        (This.Game.CurrentLevel as FrostbyteLevel).obstacles).ToList());
                    if (currentTarget != null)
                    {
                        currentTargetAlignment = TargetAlignment.Ally;
                    }
                }

                if (controller.CancelTargeting == ReleasableButtonState.Clicked)
                {
                    target.mVisible = false;
                    currentTarget = null;
                    currentTargetAlignment = TargetAlignment.None;
                }

                if (currentTarget != null)
                {
                    target.mVisible = true;
                    target.CenterOn(currentTarget);
                }
                #endregion
            }
        }