Exemplo n.º 1
0
            public PlanetTile(Planet planet, TileManager.Tile tile)
            {
                this.planet = planet;
                this.tile   = tile;

                sprite = tile.sr.sprite;

                // Setup PlanetTile-specific Information
                equatorOffset      = ((tile.position.y - (planet.mapData.mapSize / 2f)) * 2) / planet.mapData.mapSize;
                averageTemperature = tile.temperature + planet.mapData.temperatureOffset;

                River river = planet.RiversContainTile(tile, true).Value;

                isRiver = river != null;

                foreach (TileManager.Tile sTile in tile.horizontalSurroundingTiles)
                {
                    if (sTile != null)
                    {
                        if (planet.rivers.Find(r => r.tiles.Contains(sTile)) == null)
                        {
                            if (sTile.tileType.groupType == TileManager.TileTypeGroup.TypeEnum.Water)
                            {
                                surroundingPlanetTileHeightDirections.Add(-2);
                            }
                            else if (sTile.tileType.groupType == TileManager.TileTypeGroup.TypeEnum.Stone)
                            {
                                surroundingPlanetTileHeightDirections.Add(5);
                            }
                            else
                            {
                                surroundingPlanetTileHeightDirections.Add(0);
                            }
                        }
                        else
                        {
                            surroundingPlanetTileHeightDirections.Add(0);
                        }
                        if (isRiver)
                        {
                            int nTileRiverIndex = river.tiles.IndexOf(sTile);
                            if (nTileRiverIndex == -1)
                            {
                                foreach (River r in planet.rivers)
                                {
                                    if (r != river)
                                    {
                                        if (r.tiles.Contains(sTile))
                                        {
                                            nTileRiverIndex = r.tiles.IndexOf(sTile);
                                        }
                                    }
                                }
                            }
                            if (nTileRiverIndex == -1)
                            {
                                if (river.startTile == tile && sTile.tileType.groupType == TileManager.TileTypeGroup.TypeEnum.Stone)
                                {
                                    nTileRiverIndex = 0;
                                }
                                else if (river.endTile == tile && sTile.tileType.groupType == TileManager.TileTypeGroup.TypeEnum.Water)
                                {
                                    nTileRiverIndex = int.MaxValue;
                                }
                            }
                            surroundingPlanetTileRivers.Add(nTileRiverIndex);
                        }
                        else
                        {
                            surroundingPlanetTileRivers.Add(-1);
                        }
                    }
                    else
                    {
                        surroundingPlanetTileHeightDirections.Add(0);
                        surroundingPlanetTileRivers.Add(-1);
                    }
                }

                terrainTypeHeights = new Dictionary <TileManager.TileTypeGroup.TypeEnum, float>()
                {
                    { TileManager.TileTypeGroup.TypeEnum.Water, 0.40f * tile.GetPrecipitation() * (1 - tile.height) },
                    { TileManager.TileTypeGroup.TypeEnum.Stone, 0.75f * (1 - (tile.height - (1 - 0.75f))) }
                };

                altitude = Mathf.RoundToInt((tile.height - terrainTypeHeights[TileManager.TileTypeGroup.TypeEnum.Water]) * 5000f) + "m";

                // Remove Tile-specific Information
                MonoBehaviour.Destroy(tile.obj);
                tile.obj = null;
                tile.sr  = null;
            }