private void PlaceNewZoneUpToPosition(Vector3 endPoint) { Vector3Int minPoint = Vector3Int.FloorToInt(_startPoint); Vector3Int maxPoint = Vector3Int.FloorToInt(endPoint); ZoneCalculator.PrepareStartAndEndPoints(_startPoint, endPoint, ref minPoint, ref maxPoint, _mapBottomLeftCorner); HashSet <Vector3Int> newPositionsSet = _grid.GetAllPositionsFromTo(minPoint, maxPoint); newPositionsSet = CalculateZoneCost(newPositionsSet); _previousEndPosition = endPoint; ZoneCalculator.CalculateZone(newPositionsSet, _structuresToBeModified, _gameObjectsToReuse); foreach (var positionToPlaceStructure in newPositionsSet) { if (_grid.IsCellTaken(positionToPlaceStructure)) { continue; } GameObject structureToAdd = null; if (_gameObjectsToReuse.Count > 0) { var gameObjectToReuse = _gameObjectsToReuse.Dequeue(); gameObjectToReuse.SetActive(true); structureToAdd = _placementManager.MoveStructureOnTheMap(positionToPlaceStructure, gameObjectToReuse, _structureData.prefab); } else { structureToAdd = _placementManager.CreateGhostStructure(positionToPlaceStructure, _structureData.prefab); } _structuresToBeModified.Add(positionToPlaceStructure, structureToAdd); } }
public void ZoneCalculatorTestCalculateZoneSmallerhanPreviousPlacement() { HashSet <Vector3Int> newPositionsList = new HashSet <Vector3Int>(); Dictionary <Vector3Int, GameObject> structuresToBeModified = new Dictionary <Vector3Int, GameObject>(); GameObject structure = new GameObject(); Queue <GameObject> gameObjectsToReuse = new Queue <GameObject>(); newPositionsList.Add(new Vector3Int(0, 0, 0)); newPositionsList.Add(new Vector3Int(3, 0, 0)); newPositionsList.Add(new Vector3Int(6, 0, 0)); structuresToBeModified.Add(Vector3Int.zero, structure); structuresToBeModified.Add(new Vector3Int(3, 0, 0), structure); structuresToBeModified.Add(new Vector3Int(6, 0, 0), structure); structuresToBeModified.Add(new Vector3Int(9, 0, 0), structure); ZoneCalculator.CalculateZone(newPositionsList, structuresToBeModified, gameObjectsToReuse); Assert.IsTrue(structuresToBeModified.Count == 3); Assert.IsTrue(structuresToBeModified.ContainsKey(new Vector3Int(3, 0, 0))); Assert.IsTrue(structuresToBeModified.ContainsKey(new Vector3Int(6, 0, 0))); Assert.IsTrue(gameObjectsToReuse.Count == 1); Assert.IsTrue(structure.activeSelf == false); Assert.IsTrue(newPositionsList.Count == 0); }