private void FixedUpdate()
    {
        if (m_SelectedTowerPrefab != null)
        {
            Ray          ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit2D hit = Physics2D.GetRayIntersection(ray, 20, m_TileMask);

            if (hit.collider != null && !EventSystem.current.IsPointerOverGameObject(m_FingerID))
            {
                ITile hitTile = hit.collider.GetComponent <ITile>();

                if (m_MouseUp)
                {
                    Tower tower = m_SelectedTowerPrefab.GetComponent <Tower>();

                    if (hitTile.IsBuildable() && GameManager.Instance.m_Money >= tower.m_Cost)
                    {
                        hitTile.Build(m_SelectedTowerPrefab);
                        GameManager.Instance.m_Money -= tower.m_Cost;
                        m_SelectedTowerPrefab         = null;
                        m_BuildCursor.SetActive(false);
                    }
                    else
                    {
                        if (!hitTile.IsBuildable() && !hitTile.IsBlocked())
                        {
                            m_ErrorText.text = "You can't build on that tile!";
                        }
                        else if (!hitTile.IsBuildable() && hitTile.IsBlocked())
                        {
                            m_ErrorText.text = "That tile is blocked!";
                        }
                        else if (GameManager.Instance.m_Money < tower.m_Cost)
                        {
                            m_ErrorText.text = "You don't have enough money! (Need $" + (tower.m_Cost - GameManager.Instance.m_Money) + ")";
                        }

                        m_ErrorText.GetComponent <ColorFadeText>().StartFade();
                    }
                }
                else
                {
                    m_BuildCursor.SetActive(true);
                    Vector3 cursorPos = hit.collider.transform.position;
                    cursorPos.z -= 3;   // Move cursor closer to the camera than enemies and towers so it shows on top
                    m_BuildCursor.transform.position = cursorPos;

                    if (hitTile.IsBuildable())
                    {
                        // The tile is buildable, so show a preview of the tower and it's range
                        m_CursorSprite.sprite = m_SelectedTowerPrefab.GetComponent <SpriteRenderer>().sprite;

                        // Do stuff to display the tower's range with the line renderer
                        m_RangePreview.enabled = true;
                    }
                    else
                    {
                        // The tile is not buildable, so show the error sprite
                        m_RangePreview.enabled = false;
                        m_CursorSprite.sprite  = m_ErrorCursorSprite;
                    }
                }
            }
            else
            {
                m_BuildCursor.SetActive(false);
            }
        }
    }