public void Update(GameTime gameTime)
        {
            var deltaTime = (float)gameTime.ElapsedGameTime.TotalMilliseconds;

            if (_harvesterCooldown > 0f)
            {
                _harvesterCooldown -= deltaTime;
                return;
            }

            _harvesterCooldown = 0f;
            var mouseState    = Mouse.GetState();
            var mousePoint    = mouseState.Position;
            var mousePosition = VirtualScreenSize.ScreenToWorld(_playerModel.Position, mousePoint.X, mousePoint.Y);
            var distance      = Vector2.Distance(mousePosition, _playerModel.Position);

            if (mouseState.LeftButton == ButtonState.Pressed && distance <= _playerModel.ResourceHarvester.Range)
            {
                for (var x = 0; x < _terrainTileListModel.Resources.GetLength(0); x++)
                {
                    for (var y = 0; y < _terrainTileListModel.Resources.GetLength(1); y++)
                    {
                        var resource = _terrainTileListModel.Resources[x, y];
                        if (resource.Area.Contains(mousePosition) && resource.Amount > 0)
                        {
                            _harvesterCooldown = _playerModel.ResourceHarvester.Cooldown;
                            var amount = resource.Amount < _playerModel.ResourceHarvester.Speed ? resource.Amount : _playerModel.ResourceHarvester.Speed;
                            resource.Amount -= amount;
                            _playerResourcesModel.AddResource(resource.Type, amount);
                            break;
                        }
                    }
                }
            }

            if (_rightClickCooldown > 0f)
            {
                _rightClickCooldown -= deltaTime;
                return;
            }

            if (mouseState.RightButton == ButtonState.Pressed)
            {
                for (var x = 0; x < _terrainTileListModel.Resources.GetLength(0); x++)
                {
                    for (var y = 0; y < _terrainTileListModel.Resources.GetLength(1); y++)
                    {
                        var resource = _terrainTileListModel.Resources[x, y];
                        if (resource.Area.Contains(mousePosition) && resource.Amount > 0)
                        {
                            _rightClickCooldown    = _rightClickCooldownPeriod;
                            resource.AmountVisible = !resource.AmountVisible;
                            break;
                        }
                    }
                }
            }
        }
        private void AvailableBuildings(GameTime gameTime)
        {
            var deltaTime     = (float)gameTime.ElapsedGameTime.TotalMilliseconds;
            var mouseState    = Mouse.GetState();
            var mousePoint    = mouseState.Position;
            var mousePosition = VirtualScreenSize.ScreenToWorld(_playerModel.Position, mousePoint.X, mousePoint.Y);

            foreach (var building in _buildingListModel.AvailableBuildings)
            {
                if (building.Area.Contains(mousePosition))
                {
                    building.ShowTooltip = true;
                }
                else
                {
                    building.ShowTooltip = false;
                }

                if (_clickCooldown > 0f)
                {
                    _clickCooldown -= deltaTime;
                    return;
                }

                var pos = new Vector2((int)mousePosition.X, (int)mousePosition.Y);
                if (building.IsSelected)
                {
                    if (IntersectsAnotherBuilding(new Rectangle((int)pos.X - 10, (int)pos.Y - 10, building.Width - 30, building.Height - 30)))
                    {
                        building.CanBuild = false;
                    }
                    else
                    {
                        building.CanBuild = true;
                    }

                    if (mouseState.LeftButton == ButtonState.Pressed && building.CanBuild)
                    {
                        building.CanBuild = true;
                        BuildABuilding(building, pos);
                    }
                }

                if (building.Area.Contains(mousePosition) && mouseState.LeftButton == ButtonState.Pressed)
                {
                    _clickCooldown = _clickCooldownPeriod;
                    if (_playerResourceModel.HasEnoughResources(building.Cost))
                    {
                        building.IsSelected = !building.IsSelected;
                    }
                }
            }
        }
        public override void Draw()
        {
            var visibleArea   = VirtualScreenSize.CalculateVisibleArea(_playerModel.Position);
            var mouseState    = Mouse.GetState();
            var mousePoint    = mouseState.Position;
            var mousePosition = VirtualScreenSize.ScreenToWorld(_playerModel.Position, mousePoint.X, mousePoint.Y);

            var position = new Vector2(visibleArea.X, visibleArea.Bottom);

            int i = 0;

            while (i <= visibleArea.Width)
            {
                _bar.Draw(new Vector2(position.X + i, visibleArea.Bottom - 47), 0, Color.White, new Vector2(0.25f, 0.25f));
                i += 64;
            }

            var j = 15;

            foreach (var building in _buildingListModel.AvailableBuildings)
            {
                building.Position = new Vector2(position.X + j, visibleArea.Bottom - 47);
                building.Area     = new Rectangle((int)building.Position.X, (int)building.Position.Y, 64, 64);
                _buildings.Draw(building.Position, building.Frame, _playerResourcesModel.HasEnoughResources(building.Cost) ? Color.White : Color.Red, new Vector2(0.5f, 0.5f));
                j += 68;

                if (building.ShowTooltip)
                {
                    ShowTooltip(building);
                }

                if (building.IsSelected)
                {
                    _buildings.Draw(mousePosition, building.Frame, building.CanBuild ? Color.White : Color.Red);
                }
            }

            foreach (var b in _buildingListModel.BuiltBuildings)
            {
                _buildings.Draw(b.Position, b.Frame, Color.White);
            }
        }