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