예제 #1
0
    public void unmarkToDelete(uint i, uint j)
    {
        WorldTerrain    wt   = WorldTerrain.GetInstance();
        TileTerrainType type = wt.getTypeTerrainOfTile(i, j);

        if (type == TileTerrainType.FREE && wt.tileContainsVegetation(i, j))
        {
            wt.getTileVegetation(i, j).unmarkToDelete();
            _buildingPanel.GetComponent <MultipleBuildingPanel>().addUnits(-1, -WorldTerrain.PRICE_Clean);
        }
        else if (type == TileTerrainType.CANAL)
        {
            wt.canalUnmarkToDelete(i, j);
            _buildingPanel.GetComponent <MultipleBuildingPanel>().addUnits(-1, -WorldTerrain.PRICE_Clean);
        }
        else if (type == TileTerrainType.RICE_TERRAIN)
        {
            wt.riceChunkUnmarkToDelete(i, j);
            uintPair clickedPos = new uintPair(i, j);
            foreach (Pair <uint, uint> pos in wt.getChunkTilesPositions(wt.getRiceTerrain(i, j).getChunkNumber()))
            {
                uintPair terrainPos = new uintPair(pos.First, pos.Second);
                if (clickedPos != terrainPos)
                {
                    tilesToDelete.Remove(terrainPos);
                }
                _buildingPanel.GetComponent <MultipleBuildingPanel>().addUnits(-1, -WorldTerrain.PRICE_Clean);
            }
        }
    }
        public void GenerateTerrain_WithHexMapWithUnchangeable_CreatesTerrainMap(TileTerrainType tileTerrainType)
        {
            var heightMapGeneratorMock = new Mock <IHeightMapGenerator>();

            var provinceMock = new Mock <IProvince>();

            provinceMock.Setup(p => p.IsWater).Returns(tileTerrainType == TileTerrainType.Water);

            var hexMap = HexMapBuilder.New
                         .WithHeight(10)
                         .WithWidth(10)
                         .WithTiles(
                TileBuilder.New
                .WithType(tileTerrainType)
                .WithProvince(provinceMock.Object)
                ).Build();

            var terrainGenerator = new TerrainGenerator(heightMapGeneratorMock.Object);

            terrainGenerator.DesertBelt = 1;
            terrainGenerator.PoleBelt   = 1;
            terrainGenerator.GenerateTerrain(hexMap);

            Assert.IsTrue(hexMap.All(t => t.TileTerrainType == tileTerrainType), $"The map does not only consist of {tileTerrainType}");
        }
예제 #3
0
        public void SetTerrainOnTile(TileTerrain terrain)
        {
            terrainOnTile = terrain;

            if (terrain == null)
            {
                tileTerrainType = TileTerrainType.floor;
            }
            else if (terrain is Stairs)
            {
                Stairs s = terrain as Stairs;
                if (s.IsUp)
                {
                    tileTerrainType = TileTerrainType.stairsUp;
                }
                else
                {
                    tileTerrainType = TileTerrainType.stairsDown;
                }
            }
            else if (terrain is Trap)
            {
                tileTerrainType = TileTerrainType.trap;
            }
        }
예제 #4
0
        internal void Initialize(IMapReadable map, UnwrappedTileId tileId, float scale, int zoom, Texture2D loadingTexture = null)
        {
            ElevationType   = TileTerrainType.None;
            TileScale       = scale;
            _relativeScale  = 1 / Mathf.Cos(Mathf.Deg2Rad * (float)map.CenterLatitudeLongitude.x);
            Rect            = Conversions.TileBounds(tileId);
            UnwrappedTileId = tileId;
            CanonicalTileId = tileId.Canonical;
            _loadingTexture = loadingTexture;

            float scaleFactor = 1.0f;

            if (_isInitialized == false)
            {
                _isInitialized = true;
                InitialZoom    = zoom;
            }
            CurrentZoom = zoom;
            scaleFactor = Mathf.Pow(2, (map.InitialZoom - zoom));
            gameObject.transform.localScale = new Vector3(scaleFactor, scaleFactor, scaleFactor);
            gameObject.SetActive(true);

            IsRecycled = false;
            //MeshRenderer.enabled = true;


            // Setup Loading as initial state - Unregistered
            // When tile registers with factories, it will set the appropriate state.
            // None, if Factory source is None, Loading otherwise.
        }
예제 #5
0
    public bool markToDelete(uint i, uint j)
    {
        WorldTerrain    wt   = WorldTerrain.GetInstance();
        TileTerrainType type = wt.getTypeTerrainOfTile(i, j);

        if (type == TileTerrainType.FREE && wt.tileContainsVegetation(i, j))
        {
            wt.getTileVegetation(i, j).markToDelete();
            _buildingPanel.GetComponent <MultipleBuildingPanel>().addUnits(+1, +WorldTerrain.PRICE_Clean);
            return(true);
        }

        /*
         * if (type == TileTerrainType.CANAL) {
         *      wt.canalMarkToDelete(i, j);
         *      _buildingPanel.GetComponent<MultipleBuildingPanel>().addUnits (+1, +WorldTerrain.PRICE_Clean);
         *      return true;
         * }
         * if (type == TileTerrainType.RICE_TERRAIN) {
         *      wt.riceChunkMarkToDelete(i, j);
         *      uintPair clickedPos = new uintPair (i, j);
         *      foreach(Pair<uint, uint> pos in wt.getChunkTilesPositions(wt.getRiceTerrain(i,j).getChunkNumber())) {
         *              uintPair terrainPos = new uintPair (pos.First, pos.Second);
         *              if (clickedPos != terrainPos)
         *                      tilesToDelete.Add (terrainPos);
         *              _buildingPanel.GetComponent<MultipleBuildingPanel>().addUnits (+1, +WorldTerrain.PRICE_Clean);
         *
         *      }
         *      return true;
         * }
         */
        return(false);
    }
예제 #6
0
    // +++ BUILDING +++
    public void startBuilding(TileTerrainType terrainID, BUILDINGS buildingId = 0)
    {
        BUILDING_INFO.terrainID  = terrainID;
        BUILDING_INFO.buildingID = buildingId;

        if (BUILDING_INFO.terrainID == TileTerrainType.BUILDING)
        {
            //setBuildingBuildingRepresentation ();
            //createSingleBuildingPanel ();
            createSingleBuildingFirstPanel();
        }
        else if (BUILDING_INFO.terrainID == TileTerrainType.RICE_TERRAIN)
        {
            //setBuildingRiceChunkRepresentation ();
            //createSingleBuildingPanel ();
            createSingleBuildingFirstPanel();
        }
        else if (BUILDING_INFO.terrainID == TileTerrainType.CANAL)
        {
            createMultipleBuildingPanel();
        }

        if (_actionPanel != null)
        {
            _actionPanel.SendMessage("kill");
        }

        logicState = LOGIC_STATE.BUILDING;
    }
예제 #7
0
 public bool isEmptyForRiceChunk(uint row, uint col)
 {
     for (uint i = row - RICE_CHUNK_SEPARATION; i < row + RICE_CHUNK_H + RICE_CHUNK_SEPARATION; ++i)
     {
         for (uint j = col - RICE_CHUNK_SEPARATION; j < col + RICE_CHUNK_W + RICE_CHUNK_SEPARATION; ++j)
         {
             TileTerrainType terrainType = worldTerrainType [row + i, col + j];
             if (i < row || i >= row + RICE_CHUNK_H ||
                 j < col || j >= col + RICE_CHUNK_W)
             {
                 if (!(terrainType == TileTerrainType.FREE || terrainType == TileTerrainType.SEPARATOR || terrainType == TileTerrainType.CANAL))
                 {
                     return(false);
                 }
             }
             else
             {
                 if (!(terrainType == TileTerrainType.SEPARATOR || terrainType == TileTerrainType.CANAL))
                 {
                     return(false);
                 }
             }
         }
     }
     return(true);
 }
예제 #8
0
    private void updateTileRepresentation(uint i, uint j)
    {
        if (worldTerrainRepresentation[i, j] != null)
        {
            GameObject.Destroy(worldTerrainRepresentation[i, j]);
        }

        TileTerrainType tileType = worldTerrainType[i, j];

        if (tileType == TileTerrainType.FREE || tileType == TileTerrainType.DECORATION ||
            tileType == TileTerrainType.BUILDING)
        {
            float   worldPositionX = getTileWorldPositionX(i, j);
            float   worldPositionY = getTileWorldPositionY(i, j);
            Vector3 worldPosition  = new Vector3(worldPositionX, worldPositionY, TERRAIN_Z_LAYER);
            //Debug.Assert(resources.ContainsKey(tileType));
            worldTerrainRepresentation [i, j] = (GameObject)GameObject.Instantiate(resources [worldTerrainID [i, j]], worldPosition, Quaternion.identity);
        }
        else if (tileType == TileTerrainType.SEPARATOR)
        {
            float   worldPositionX = getTileWorldPositionX(i, j);
            float   worldPositionY = getTileWorldPositionY(i, j);
            Vector3 worldPosition  = new Vector3(worldPositionX, worldPositionY, TERRAIN_Z_LAYER);
            worldTerrainRepresentation [i, j] = (GameObject)GameObject.Instantiate(resources [TileTerrainIDs.SEPARATOR], worldPosition, Quaternion.identity);
        }
    }
예제 #9
0
 private int GetResourceCapacity(TileTerrainType terrainType)
 {
     if (terrainType == TileTerrainType.Hills || terrainType == TileTerrainType.Mountains)
     {
         return(2);
     }
     return(1);
 }
예제 #10
0
    private GameObject CreateTile(TileTerrainType type, Vector3 position, int x, int y)
    {
        var hexTile = Instantiate(HexTile, position, MapStartPoint.transform.rotation);
        var tile    = hexTile.GetComponent <Tile>();

        tile.TileTerrainType = type;
        tile.Position.X      = x;
        tile.Position.Y      = y;
        _map.AddTile(x, y, tile);
        return(hexTile);
    }
예제 #11
0
 public IEnumerable <TileBase> GetTilesOfTerrainType(TileTerrainType terrainType)
 {
     for (var i = 0; i < _map.GetLength(0); i++)
     {
         for (var j = 0; j < _map.GetLength(1); j++)
         {
             var tile = _map[i, j];
             if (tile.TileTerrainType == terrainType)
             {
                 yield return(tile);
             }
         }
     }
 }
예제 #12
0
    public void unselectTile(uint i, uint j)
    {
        TileTerrainType tileType = getTypeTerrainOfTile(i, j);

        if (tileType == TileTerrainType.RICE_TERRAIN)
        {
            RiceTerrainTile tile = getRiceTerrain(i, j);
            unselectChunk(tile.getChunkNumber());
            //tile.unselect ();
        }
        else if (tileType == TileTerrainType.BUILDING)
        {
            BuildingsManager.GetInstance().unselectBuildingAt(i, j);
        }
    }
예제 #13
0
 public bool isEmpty(uint row, uint col, uint height, uint width)
 {
     for (int i = 0; i < height; ++i)
     {
         for (int j = 0; j < width; ++j)
         {
             TileTerrainType terrainType = worldTerrainType [row + i, col + j];
             if (terrainType != TileTerrainType.FREE)
             {
                 return(false);
             }
         }
     }
     return(true);
 }
예제 #14
0
    // +++ ACTIONS +++
    private void createActionPanel()
    {
        if (_actionPanel != null)
        {
            Destroy(_actionPanel);
        }

        WorldTerrain    terrain            = WorldTerrain.GetInstance();
        TileTerrainType typeOfTileSelected = terrain.getTypeTerrainOfTile(_tileSelectedPosition[0], _tileSelectedPosition[1]);

        if (typeOfTileSelected == TileTerrainType.BUILDING && BuildingsManager.GetInstance().getTypeOfBuildingInPosition(_tileSelectedPosition[0], _tileSelectedPosition[1]) == BUILDINGS.PLANTER)
        {
            _tutMan.eventDone(TutorialManager.EVENTS.PLANTELL_ACTIONS_OPENED);
        }
        if (typeOfTileSelected == TileTerrainType.RICE_TERRAIN)
        {
            RiceTerrainTile riceTerrain = terrain.getRiceTerrain(_tileSelectedPosition [0], _tileSelectedPosition [1]);
            //int chunk = terrain.getRiceTerrain(_tileSelectedPosition[0], _tileSelectedPosition[1]).getChunkNumber();
            //if (!PenalizationManager.GetInstance().isChunkDisabled(chunk)) {
            if (!riceTerrain.isDisabled())
            {
                GameObject actionPanelTemplate = Resources.Load("Prefabs/ActionPanelLostFocusLayer") as GameObject;
                _actionPanel = Instantiate(actionPanelTemplate);
                _actionPanel.SendMessage("setRiceTerrain", riceTerrain);
                _tutMan.eventDone(TutorialManager.EVENTS.RICE_CHUNK_ACTIONS_OPENED);
            }
            else
            {
                GameObject disabledPanel = Resources.Load("Prefabs/DisabledChunkPanelLostFocusLayer") as GameObject;
                Instantiate(disabledPanel);
                return;
            }
        }
        else if (typeOfTileSelected == TileTerrainType.BUILDING)
        {
            GameObject actionPanelTemplate = Resources.Load("Prefabs/ActionBuildingPanelLostFocusLayer") as GameObject;             // OR Planta
            _actionPanel = Instantiate(actionPanelTemplate);
            BUILDINGS b = BuildingsManager.GetInstance().getTypeOfBuildingInPosition(_tileSelectedPosition[0], _tileSelectedPosition[1]);
            _actionPanel.BroadcastMessage("setActionsForBuilding", b);
        }
    }
예제 #15
0
    public bool tileCloseTo(uint i, uint j, TileTerrainType type)
    {
        for (int dir_i = -1; dir_i <= 1; ++dir_i)
        {
            for (int dir_j = -1; dir_j <= 1; ++dir_j)
            {
                int tile_i = (int)i + dir_i;
                int tile_j = (int)j + dir_j;
                if (!tilePosInside(tile_i, tile_j))
                {
                    continue;
                }

                if (getTypeTerrainOfTile((uint)tile_i, (uint)tile_j) == type)
                {
                    return(true);
                }
            }
        }
        return(false);
    }
예제 #16
0
 public void deletingConfirm()
 {
     foreach (uintPair pos in tilesToDelete)
     {
         uint            i    = pos.First;
         uint            j    = pos.Second;
         WorldTerrain    wt   = WorldTerrain.GetInstance();
         TileTerrainType type = wt.getTypeTerrainOfTile(i, j);
         if (type == TileTerrainType.FREE && wt.tileContainsVegetation(i, j))
         {
             wt.deleteVegetation(i, j);
         }
         else if (type == TileTerrainType.CANAL)
         {
             wt.deleteCanal(i, j);
         }
         else if (type == TileTerrainType.RICE_TERRAIN)
         {
             wt.deleteRiceChunk(i, j);
         }
     }
     UserDataManager.GetInstance().gold.espendGold(_buildingPanel.GetComponent <MultipleBuildingPanel> ().getCost());
     logicState = LOGIC_STATE.DEFAULT;
 }
예제 #17
0
    public void clickOn(float x, float y)
    {
        WorldTerrain worldTerrain = WorldTerrain.GetInstance();
        uint         i            = (uint)worldTerrain.getMatrixRow(x, y);
        uint         j            = (uint)worldTerrain.getMatrixCol(x, y);

        if (logicState == LOGIC_STATE.DEFAULT)
        {
            //TileTerrainType terrainType = worldTerrain.getTypeTerrainOfTile (i, j);
            selectTile(new uint[2] {
                i, j
            });
        }
        else if (logicState == LOGIC_STATE.BUILDING)
        {
            selectTile(new uint[2] {
                i, j
            });

            if (BUILDING_INFO.terrainID == TileTerrainType.BUILDING)
            {
                setBuildingBuildingRepresentation();
            }
            else if (BUILDING_INFO.terrainID == TileTerrainType.RICE_TERRAIN)
            {
                setBuildingRiceChunkRepresentation();
            }
            else if (BUILDING_INFO.terrainID == TileTerrainType.CANAL)
            {
                WorldTerrain    wt       = WorldTerrain.GetInstance();
                TileTerrainType tileType = wt.getTypeTerrainOfTile(i, j);
                if ((tileType == TileTerrainType.FREE || tileType == TileTerrainType.SEPARATOR) && !wt.tileContainsVegetation(i, j))
                {
                    if (!wt.canalManager.tileHasCanalTmp(i, j))
                    {
                        _buildingPanel.GetComponent <MultipleBuildingPanel>().addUnits(+1, +WorldTerrain.PRICE_Canal);
                    }
                    else
                    {
                        _buildingPanel.GetComponent <MultipleBuildingPanel>().addUnits(-1, -WorldTerrain.PRICE_Canal);
                    }
                    wt.addRmvCanalTmp(i, j);
                }
            }
        }
        else if (logicState == LOGIC_STATE.DELETING)
        {
            selectTile(new uint[2] {
                i, j
            }, false);
            if (tilesToDelete.Contains(new uintPair(i, j)))
            {
                unmarkToDelete(i, j);
                tilesToDelete.Remove(new uintPair(i, j));
                foreach (uintPair pos in tilesToDelete)
                {
                    Debug.Log(pos);
                }
            }
            else
            {
                if (markToDelete(i, j))
                {
                    tilesToDelete.Add(new uintPair(i, j));
                    foreach (uintPair pos in tilesToDelete)
                    {
                        Debug.Log(pos);
                    }
                }
            }
        }
    }
    private GameObject CreateTile(TileTerrainType type, Vector3 position, int x, int y)
    {
        var hexTile = TileFactory.Instance.CreateTile(Instantiate, HexTile, type, position, MapStartPoint.transform.rotation, x, y, _map);

        return(hexTile);
    }
예제 #19
0
        public static HexGrid CreateMap(GameObject mapStartPoint, HexMap map, GameObject hexTile, TileTerrainType type = TileTerrainType.Plain)
        {
            mapStartPoint.transform.position   = new Vector3(0, 0, 0);
            mapStartPoint.transform.localScale = new Vector3(1, 1, 1);

            var hexGrid   = new HexGrid(map.Height, map.Width, hexTile);
            var mapObject = new GameObject("Map");

            for (var y = 0; y < hexGrid.Height; y++)
            {
                for (var x = 0; x < hexGrid.Width; x++)
                {
                    var position = hexGrid.Get(x, y);
                    var tile     = CreateTile(hexTile, mapStartPoint, map, type, position, x, y);
                    tile.transform.SetParent(mapObject.transform);
                }
            }
            return(hexGrid);
        }
 private decimal GetTerrainRatio(ICollection <TileBase> map, TileTerrainType tileTerrainType)
 => map.Where(t => t.TileTerrainType == tileTerrainType).Count() / (decimal)map.Count();
예제 #21
0
 public void SetTileTerrainType(TileTerrainType type)
 {
     tileTerrainType = type;
 }
예제 #22
0
 public TileBuilder WithType(TileTerrainType type)
 {
     _type = type;
     return(this);
 }
예제 #23
0
        public TileTerrainTypeMap CreateMap(int width, int height)
        {
            if (MapGenerator == null)
            {
                return(null);
            }

            _equator = (int)Math.Round(height / 2m);

            var map = MapGenerator.Generate(width, height);

            var terrainMap = new TileTerrainTypeMap(width, height);

            var gaussianBlur = new GaussianBlur();

            int[,] blurredMap = map;
            for (var i = 0; i < FilterCount; i++)
            {
                blurredMap = gaussianBlur.Filter(blurredMap);
            }

            var terrainTypes = new Dictionary <TileTerrainType, double>
            {
                { TileTerrainType.Bosk, 0.1 },
                { TileTerrainType.Forest, 0.1 },
                { TileTerrainType.Marsh, 0.02 },
                { TileTerrainType.GrainField, 0.2 },
                { TileTerrainType.Orchard, 0.05 },
                { TileTerrainType.CattleMeadows, 0.05 },
                { TileTerrainType.CottonField, 0.05 },
                { TileTerrainType.SheepMeadows, 0.05 },
                { TileTerrainType.StudFarm, 0.01 }
            };

            var random = new System.Random();

            for (var y = 0; y < height; y++)
            {
                for (var x = 0; x < width; x++)
                {
                    var value = blurredMap[x, y];

                    // In the map border regions only use water
                    if (value == 0 || (x < 2 || y < 2 || y > height - 3 || x > width - 3))
                    {
                        terrainMap.Add(TileTerrainType.Water, x, y);
                        continue;
                    }

                    if (value >= MinHillsValue && value < MinMountainsValue)
                    {
                        terrainMap.Add(TileTerrainType.Hills, x, y);
                        continue;
                    }

                    if (value >= MinMountainsValue)
                    {
                        terrainMap.Add(TileTerrainType.Mountains, x, y);
                        continue;
                    }

                    if (IsWithinDesertBelt(y))
                    {
                        terrainMap.Add(TileTerrainType.Desert, x, y);
                        continue;
                    }

                    if (IsWithinPoleBelt(y, height))
                    {
                        terrainMap.Add(TileTerrainType.Tundra, x, y);
                        continue;
                    }

                    TileTerrainType plainTerrain = TileTerrainType.Plain;

                    // Generate busk, forest and agriculture tiles
                    foreach (var terrainType in terrainTypes.Keys)
                    {
                        var randomValue = random.NextDouble();
                        if (randomValue > terrainTypes[terrainType])
                        {
                            continue;
                        }

                        plainTerrain = terrainType;
                        break;
                    }
                    terrainMap.Add(plainTerrain, x, y);
                }
            }
            return(terrainMap);
        }
예제 #24
0
 public void SetTileTerrainType(TileTerrainType type)
 {
     //   tileCategory = TileMap.TileMapCategory.Terrain;
     tileTerrainType = type;
 }
예제 #25
0
        private static GameObject CreateTile(GameObject tile, GameObject mapStartPoint, HexMap map, TileTerrainType type, Vector3 position, int x, int y)
        {
            var hexTile = TileFactory.Instance.CreateTile(UnityEngine.Object.Instantiate, tile, type, position, mapStartPoint.transform.rotation, x, y, map);

            hexTile.GetComponent <Tile>().Setup();
            return(hexTile);
        }
예제 #26
0
        public GameObject CreateTile(Func <GameObject, Vector3, Quaternion, GameObject> instantiate, GameObject tileObject, TileTerrainType type, Vector3 position, Quaternion rotation, int x, int y, IHexMap map)
        {
            var hexTile = instantiate(tileObject, position, rotation);
            var tile    = hexTile.GetComponent <Tile>();

            tile.TileTerrainType = type;
            tile.Position.X      = x;
            tile.Position.Y      = y;
            map.AddTile(x, y, tile);
            return(hexTile);
        }
예제 #27
0
 private TileBuilder()
 {
     _type     = TileTerrainType.Water;
     _position = new Position(0, 0);
 }