public bool CanBuildTower(Vector2 pos, Vector2 size) { if (pos.X < 1 || (size.X > 1 ? pos.X >= 30 : pos.X >= 31)) { return(false); } bool freePlace = true; var newPoints = new List <Vector2>(); var tmpGrid = (byte[, ])LevelGrid.Clone(); for (var i = (int)pos.X; i < pos.X + size.X; i++) { for (var j = (int)pos.Y; j < pos.Y + size.Y; j++) { if (GetField(i, j) == 0) { freePlace = false; } SetField(0, i, j); newPoints.Add(new Vector2(i, j)); } } bool wayAvailable = IsWayAvailable(Vector2.Zero) && freePlace; if (wayAvailable) { wayAvailable = GamePlayScreen.CheckCreepWay(newPoints); } for (int i = 0; i < GridCount.X; i++) { for (int j = 0; j < GridCount.Y; j++) { LevelGrid[i, j] = tmpGrid[i, j]; } } return(wayAvailable); }