コード例 #1
0
    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);
        }
    }
コード例 #2
0
        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);
        }