private void PlaceNewZoneUpTo(Vector3 endPosition) { Vector3Int minPoint = Vector3Int.FloorToInt(startPosition); Vector3Int maxPoint = Vector3Int.FloorToInt(endPosition); ZoneCalculator.PrepareStartAndEndPosition(startPosition, endPosition, ref minPoint, ref maxPoint, mapBottomLeftCorner); HashSet <Vector3Int> newPositionsSet = grid.GetAllPositionsFromTo(minPoint, maxPoint); newPositionsSet = CalculateZoneCost(newPositionsSet); previousEndPositon = endPosition; 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 ZoneCalculatorTestPrepareStartAndEndPositionTopRightBOttomLeft() { Vector3 startPosition = new Vector3(3, 0, 3); Vector3 endPosition = Vector3.zero; Vector3Int minPoint = Vector3Int.FloorToInt(startPosition); Vector3Int maxPoint = Vector3Int.FloorToInt(endPosition); ZoneCalculator.PrepareStartAndEndPosition(startPosition, endPosition, ref minPoint, ref maxPoint, Vector3.zero); Assert.AreEqual(Vector3Int.FloorToInt(startPosition), maxPoint); Assert.AreEqual(Vector3Int.FloorToInt(endPosition), minPoint); }