public void PointAtGumObject(GraphicalUiElement objectToPointAt, PointingArrowRuntime.PointDirection direction = PointingArrowRuntime.PointDirection.Right, string cmdName = null)
        {
            var action        = GetPointingAction(objectToPointAt, direction);
            var generalAction = CreateGeneralAction(action, cmdName);

            generalAction.IsCompleteFunction = () => _gameScreen.PointingArrowInstance.Visible;
        }
        public void PointAtUpgradeStatus(PointingArrowRuntime.PointDirection direction, string cmdName = null)
        {
            Action action = () =>
            {
                GetPointingAction(_gameScreen.AllStructuresList.Last.StructureUpgradeStatusInstance, direction).Invoke();
            };
            var generalAction = CreateGeneralAction(action, cmdName);

            generalAction.IsCompleteFunction = () => _gameScreen.PointingArrowInstance.Visible;
        }
        private Action GetPointingAction(GraphicalUiElement objectToPointAt,
                                         PointingArrowRuntime.PointDirection direction)
        {
            return(() =>
            {
                var xMod = 0f;
                var yMod = 0f;
                var arrow = _gameScreen.PointingArrowInstance;

                if (objectToPointAt.YOrigin == VerticalAlignment.Top)
                {
                    switch (direction)
                    {
                    case PointingArrowRuntime.PointDirection.Left:
                    case PointingArrowRuntime.PointDirection.Right:
                        yMod = objectToPointAt.GetAbsoluteHeight() / 2;
                        break;

                    case PointingArrowRuntime.PointDirection.Up:
                        yMod = objectToPointAt.GetAbsoluteHeight();
                        break;
                    }
                }
                else if (objectToPointAt.YOrigin == VerticalAlignment.Center)
                {
                    switch (direction)
                    {
                    case PointingArrowRuntime.PointDirection.Up:
                        yMod += objectToPointAt.GetAbsoluteHeight() / 2;
                        break;

                    case PointingArrowRuntime.PointDirection.Down:
                        yMod -= objectToPointAt.GetAbsoluteHeight() / 2;
                        break;
                    }
                }
                else if (objectToPointAt.YOrigin == VerticalAlignment.Bottom)
                {
                    switch (direction)
                    {
                    case PointingArrowRuntime.PointDirection.Left:
                    case PointingArrowRuntime.PointDirection.Right:
                        yMod -= objectToPointAt.GetAbsoluteHeight() / 2;
                        break;

                    case PointingArrowRuntime.PointDirection.Down:
                        yMod -= objectToPointAt.GetAbsoluteHeight();
                        break;
                    }
                }

                if (objectToPointAt.XOrigin == HorizontalAlignment.Left)
                {
                    switch (direction)
                    {
                    case PointingArrowRuntime.PointDirection.Left:
                        xMod = objectToPointAt.GetAbsoluteWidth();
                        break;

                    case PointingArrowRuntime.PointDirection.Up:
                        xMod = objectToPointAt.GetAbsoluteWidth() / 2;
                        break;

                    case PointingArrowRuntime.PointDirection.Down:
                        xMod = objectToPointAt.GetAbsoluteWidth() / 2;
                        break;
                    }
                }
                else if (objectToPointAt.XOrigin == HorizontalAlignment.Center)
                {
                    switch (direction)
                    {
                    case PointingArrowRuntime.PointDirection.Left:
                        xMod = objectToPointAt.GetAbsoluteWidth() / 2;
                        break;

                    case PointingArrowRuntime.PointDirection.Right:
                        xMod = objectToPointAt.GetAbsoluteWidth() / 2;
                        break;
                    }
                }
                else if (objectToPointAt.XOrigin == HorizontalAlignment.Right)
                {
                    switch (direction)
                    {
                    case PointingArrowRuntime.PointDirection.Right:
                        xMod = objectToPointAt.GetAbsoluteWidth();
                        break;

                    case PointingArrowRuntime.PointDirection.Up:
                        xMod = -objectToPointAt.GetAbsoluteWidth() / 2;
                        break;

                    case PointingArrowRuntime.PointDirection.Down:
                        xMod = -objectToPointAt.GetAbsoluteWidth() / 2;
                        break;
                    }
                }

                arrow.CurrentPointDirectionState = direction;
                arrow.X = objectToPointAt.AbsoluteX + xMod;
                arrow.Y = objectToPointAt.AbsoluteY + yMod;
                arrow.Visible = true;
                arrow.FlashAnimation.Play();
            });
        }