Esempio n. 1
0
        private static int FindRandomStartingTileBasedOnExitDir(int tileID, Direction8Way exitDir)
        {
            tileCandidates.Clear();
            World     world = Find.World;
            WorldGrid grid  = world.grid;

            grid.GetTileNeighbors(tileID, tmpNeighbors);
            for (int i = 0; i < tmpNeighbors.Count; i++)
            {
                int num = tmpNeighbors[i];
                if (IsGoodCaravanStartingTile(num) && grid.GetDirection8WayFromTo(tileID, num) == exitDir)
                {
                    tileCandidates.Add(num);
                }
            }
            if (tileCandidates.TryRandomElement(out int result))
            {
                return(result);
            }
            if (tmpNeighbors.Where(IsGoodCaravanStartingTile).TryRandomElement(out result))
            {
                return(result);
            }
            return(tileID);
        }
Esempio n. 2
0
        public Rot4 CoastDirectionAt(int tileID)
        {
            if (!grid[tileID].biome.canBuildBase)
            {
                return(Rot4.Invalid);
            }
            tmpOceanDirs.Clear();
            grid.GetTileNeighbors(tileID, tmpNeighbors);
            int i = 0;

            for (int count = tmpNeighbors.Count; i < count; i++)
            {
                if (grid[tmpNeighbors[i]].biome == BiomeDefOf.Ocean)
                {
                    Rot4 rotFromTo = grid.GetRotFromTo(tileID, tmpNeighbors[i]);
                    if (!tmpOceanDirs.Contains(rotFromTo))
                    {
                        tmpOceanDirs.Add(rotFromTo);
                    }
                }
            }
            if (tmpOceanDirs.Count == 0)
            {
                return(Rot4.Invalid);
            }
            Rand.PushState();
            Rand.Seed = tileID;
            int index = Rand.Range(0, tmpOceanDirs.Count);

            Rand.PopState();
            return(tmpOceanDirs[index]);
        }
Esempio n. 3
0
        private static int FindRandomStartingTileBasedOnExitDir(int tileID, Direction8Way exitDir)
        {
            CaravanExitMapUtility.tileCandidates.Clear();
            World     world = Find.World;
            WorldGrid grid  = world.grid;

            grid.GetTileNeighbors(tileID, CaravanExitMapUtility.tmpNeighbors);
            for (int i = 0; i < CaravanExitMapUtility.tmpNeighbors.Count; i++)
            {
                int num = CaravanExitMapUtility.tmpNeighbors[i];
                if (CaravanExitMapUtility.IsGoodCaravanStartingTile(num))
                {
                    if (grid.GetDirection8WayFromTo(tileID, num) == exitDir)
                    {
                        CaravanExitMapUtility.tileCandidates.Add(num);
                    }
                }
            }
            int result;

            if (CaravanExitMapUtility.tileCandidates.TryRandomElement(out result))
            {
                return(result);
            }
            if (CaravanExitMapUtility.tmpNeighbors.Where(new Func <int, bool>(CaravanExitMapUtility.IsGoodCaravanStartingTile)).TryRandomElement(out result))
            {
                return(result);
            }
            return(tileID);
        }
Esempio n. 4
0
        public static void Erode(List <int> tiles, int count, Predicate <int> extraPredicate = null)
        {
            if (count <= 0)
            {
                return;
            }
            WorldGrid worldGrid = Find.WorldGrid;

            GenPlanetMorphology.tilesSet.Clear();
            GenPlanetMorphology.tilesSet.AddRange(tiles);
            GenPlanetMorphology.tmpEdgeTiles.Clear();
            for (int i = 0; i < tiles.Count; i++)
            {
                worldGrid.GetTileNeighbors(tiles[i], GenPlanetMorphology.tmpNeighbors);
                for (int j = 0; j < GenPlanetMorphology.tmpNeighbors.Count; j++)
                {
                    if (!GenPlanetMorphology.tilesSet.Contains(GenPlanetMorphology.tmpNeighbors[j]))
                    {
                        GenPlanetMorphology.tmpEdgeTiles.Add(tiles[i]);
                        break;
                    }
                }
            }
            if (!GenPlanetMorphology.tmpEdgeTiles.Any <int>())
            {
                return;
            }
            GenPlanetMorphology.tmpOutput.Clear();
            Predicate <int> predicate;

            if (extraPredicate != null)
            {
                predicate = ((int x) => GenPlanetMorphology.tilesSet.Contains(x) && extraPredicate(x));
            }
            else
            {
                predicate = ((int x) => GenPlanetMorphology.tilesSet.Contains(x));
            }
            WorldFloodFiller arg_13F_0      = Find.WorldFloodFiller;
            int                   rootTile  = -1;
            Predicate <int>       passCheck = predicate;
            Func <int, int, bool> processor = delegate(int tile, int traversalDist)
            {
                if (traversalDist >= count)
                {
                    GenPlanetMorphology.tmpOutput.Add(tile);
                }
                return(false);
            };
            List <int> extraRootTiles = GenPlanetMorphology.tmpEdgeTiles;

            arg_13F_0.FloodFill(rootTile, passCheck, processor, 2147483647, extraRootTiles);
            tiles.Clear();
            tiles.AddRange(GenPlanetMorphology.tmpOutput);
        }
Esempio n. 5
0
        private static int FindRandomStartingTileBasedOnExitDir(int tileID, Rot4 exitDir)
        {
            CaravanExitMapUtility.tileCandidates.Clear();
            World     world = Find.World;
            WorldGrid grid  = world.grid;

            grid.GetTileNeighbors(tileID, CaravanExitMapUtility.tmpNeighbors);
            for (int i = 0; i < CaravanExitMapUtility.tmpNeighbors.Count; i++)
            {
                int num = CaravanExitMapUtility.tmpNeighbors[i];
                if (CaravanExitMapUtility.IsGoodCaravanStartingTile(num))
                {
                    if (!exitDir.IsValid || !(grid.GetRotFromTo(tileID, num) != exitDir))
                    {
                        CaravanExitMapUtility.tileCandidates.Add(num);
                    }
                }
            }
            int num2;
            int result;

            if (CaravanExitMapUtility.tileCandidates.TryRandomElement(out num2))
            {
                result = num2;
            }
            else if (CaravanExitMapUtility.tmpNeighbors.Where(delegate(int x)
            {
                bool result2;
                if (!CaravanExitMapUtility.IsGoodCaravanStartingTile(x))
                {
                    result2 = false;
                }
                else
                {
                    Rot4 rotFromTo = grid.GetRotFromTo(tileID, x);
                    result2 = (((exitDir == Rot4.North || exitDir == Rot4.South) && (rotFromTo == Rot4.East || rotFromTo == Rot4.West)) || ((exitDir == Rot4.East || exitDir == Rot4.West) && (rotFromTo == Rot4.North || rotFromTo == Rot4.South)));
                }
                return(result2);
            }).TryRandomElement(out num2))
            {
                result = num2;
            }
            else if ((from x in CaravanExitMapUtility.tmpNeighbors
                      where CaravanExitMapUtility.IsGoodCaravanStartingTile(x)
                      select x).TryRandomElement(out num2))
            {
                result = num2;
            }
            else
            {
                result = tileID;
            }
            return(result);
        }
 public static void Erode(List <int> tiles, int count, Predicate <int> extraPredicate = null)
 {
     if (count > 0)
     {
         WorldGrid worldGrid = Find.WorldGrid;
         GenPlanetMorphology.tilesSet.Clear();
         GenPlanetMorphology.tilesSet.AddRange(tiles);
         GenPlanetMorphology.tmpEdgeTiles.Clear();
         for (int i = 0; i < tiles.Count; i++)
         {
             worldGrid.GetTileNeighbors(tiles[i], GenPlanetMorphology.tmpNeighbors);
             int num = 0;
             while (num < GenPlanetMorphology.tmpNeighbors.Count)
             {
                 if (GenPlanetMorphology.tilesSet.Contains(GenPlanetMorphology.tmpNeighbors[num]))
                 {
                     num++;
                     continue;
                 }
                 GenPlanetMorphology.tmpEdgeTiles.Add(tiles[i]);
                 break;
             }
         }
         if (GenPlanetMorphology.tmpEdgeTiles.Any())
         {
             GenPlanetMorphology.tmpOutput.Clear();
             Predicate <int>  predicate        = (extraPredicate == null) ? ((Predicate <int>)((int x) => GenPlanetMorphology.tilesSet.Contains(x))) : ((Predicate <int>)((int x) => GenPlanetMorphology.tilesSet.Contains(x) && extraPredicate(x)));
             WorldFloodFiller worldFloodFiller = Find.WorldFloodFiller;
             int                   rootTile    = -1;
             Predicate <int>       passCheck   = predicate;
             Func <int, int, bool> processor   = delegate(int tile, int traversalDist)
             {
                 if (traversalDist >= count)
                 {
                     GenPlanetMorphology.tmpOutput.Add(tile);
                 }
                 return(false);
             };
             List <int> extraRootTiles = GenPlanetMorphology.tmpEdgeTiles;
             worldFloodFiller.FloodFill(rootTile, passCheck, processor, 2147483647, extraRootTiles);
             tiles.Clear();
             tiles.AddRange(GenPlanetMorphology.tmpOutput);
         }
     }
 }
        public static void Erode(List <int> tiles, int count, Predicate <int> extraPredicate = null)
        {
            if (count <= 0)
            {
                return;
            }
            WorldGrid worldGrid = Find.WorldGrid;

            tilesSet.Clear();
            tilesSet.AddRange(tiles);
            tmpEdgeTiles.Clear();
            for (int i = 0; i < tiles.Count; i++)
            {
                worldGrid.GetTileNeighbors(tiles[i], tmpNeighbors);
                for (int j = 0; j < tmpNeighbors.Count; j++)
                {
                    if (!tilesSet.Contains(tmpNeighbors[j]))
                    {
                        tmpEdgeTiles.Add(tiles[i]);
                        break;
                    }
                }
            }
            if (!tmpEdgeTiles.Any())
            {
                return;
            }
            tmpOutput.Clear();
            Predicate <int> passCheck = ((extraPredicate == null) ? ((Predicate <int>)((int x) => tilesSet.Contains(x))) : ((Predicate <int>)((int x) => tilesSet.Contains(x) && extraPredicate(x))));

            Find.WorldFloodFiller.FloodFill(-1, passCheck, delegate(int tile, int traversalDist)
            {
                if (traversalDist >= count)
                {
                    tmpOutput.Add(tile);
                }
                return(false);
            }, int.MaxValue, tmpEdgeTiles);
            tiles.Clear();
            tiles.AddRange(tmpOutput);
        }
Esempio n. 8
0
        public static List <int> AvailableExitTilesAt(Map map)
        {
            retTiles.Clear();
            int       currentTileID = map.Tile;
            World     world         = Find.World;
            WorldGrid grid          = world.grid;

            grid.GetTileNeighbors(currentTileID, tmpNeighbors);
            for (int i = 0; i < tmpNeighbors.Count; i++)
            {
                int num = tmpNeighbors[i];
                if (IsGoodCaravanStartingTile(num))
                {
                    GetExitMapEdges(grid, currentTileID, num, out Rot4 primary, out Rot4 secondary);
                    if (((primary != Rot4.Invalid && CellFinder.TryFindRandomEdgeCellWith((IntVec3 x) => x.Walkable(map) && !x.Fogged(map), map, primary, CellFinder.EdgeRoadChance_Ignore, out IntVec3 result)) || (secondary != Rot4.Invalid && CellFinder.TryFindRandomEdgeCellWith((IntVec3 x) => x.Walkable(map) && !x.Fogged(map), map, secondary, CellFinder.EdgeRoadChance_Ignore, out result))) && !retTiles.Contains(num))
                    {
                        retTiles.Add(num);
                    }
                }
            }
            retTiles.SortBy((int x) => grid.GetHeadingFromTo(currentTileID, x));
            return(retTiles);
        }
Esempio n. 9
0
        public static List <int> AvailableExitTilesAt(Map map)
        {
            retTiles.Clear();
            int       currentTileID = map.Tile;
            World     world         = Find.World;
            WorldGrid grid          = world.grid;

            grid.GetTileNeighbors(currentTileID, tmpNeighbors);
            for (int i = 0; i < tmpNeighbors.Count; i++)
            {
                int num = tmpNeighbors[i];
                if (IsGoodCaravanStartingTile(num))
                {
                    Rot4 rotFromTo = grid.GetRotFromTo(currentTileID, num);
                    if (CellFinder.TryFindRandomEdgeCellWith((IntVec3 x) => x.Walkable(map) && !x.Fogged(map), map, rotFromTo, CellFinder.EdgeRoadChance_Ignore, out IntVec3 _))
                    {
                        retTiles.Add(num);
                    }
                }
            }
            retTiles.SortBy((int x) => grid.GetHeadingFromTo(currentTileID, x));
            return(retTiles);
        }
Esempio n. 10
0
        private static int FindRandomStartingTileBasedOnExitDir(int tileID, Direction8Way exitDir)
        {
            CaravanExitMapUtility.tileCandidates.Clear();
            World     world = Find.World;
            WorldGrid grid  = world.grid;

            grid.GetTileNeighbors(tileID, CaravanExitMapUtility.tmpNeighbors);
            for (int i = 0; i < CaravanExitMapUtility.tmpNeighbors.Count; i++)
            {
                int num = CaravanExitMapUtility.tmpNeighbors[i];
                if (CaravanExitMapUtility.IsGoodCaravanStartingTile(num))
                {
                    if (grid.GetDirection8WayFromTo(tileID, num) == exitDir)
                    {
                        CaravanExitMapUtility.tileCandidates.Add(num);
                    }
                }
            }
            int num2;
            int result;

            if (CaravanExitMapUtility.tileCandidates.TryRandomElement(out num2))
            {
                result = num2;
            }
            else if ((from x in CaravanExitMapUtility.tmpNeighbors
                      where CaravanExitMapUtility.IsGoodCaravanStartingTile(x)
                      select x).TryRandomElement(out num2))
            {
                result = num2;
            }
            else
            {
                result = tileID;
            }
            return(result);
        }
Esempio n. 11
0
        private static int FindRandomStartingTileBasedOnExitDir(int tileID, Rot4 exitDir)
        {
            tileCandidates.Clear();
            World     world = Find.World;
            WorldGrid grid  = world.grid;

            grid.GetTileNeighbors(tileID, tmpNeighbors);
            for (int i = 0; i < tmpNeighbors.Count; i++)
            {
                int num = tmpNeighbors[i];
                if (IsGoodCaravanStartingTile(num) && (!exitDir.IsValid || !(grid.GetRotFromTo(tileID, num) != exitDir)))
                {
                    tileCandidates.Add(num);
                }
            }
            if (tileCandidates.TryRandomElement(out int result))
            {
                return(result);
            }
            if (tmpNeighbors.Where(delegate(int x)
            {
                if (!IsGoodCaravanStartingTile(x))
                {
                    return(false);
                }
                Rot4 rotFromTo = grid.GetRotFromTo(tileID, x);
                return(((exitDir == Rot4.North || exitDir == Rot4.South) && (rotFromTo == Rot4.East || rotFromTo == Rot4.West)) || ((exitDir == Rot4.East || exitDir == Rot4.West) && (rotFromTo == Rot4.North || rotFromTo == Rot4.South)));
            }).TryRandomElement(out result))
            {
                return(result);
            }
            if (tmpNeighbors.Where((int x) => IsGoodCaravanStartingTile(x)).TryRandomElement(out result))
            {
                return(result);
            }
            return(tileID);
        }
Esempio n. 12
0
        public void GeneratePaths(LayerSubMesh subMesh, int tileID, List <OutputDirection> nodes, Color32 color, bool allowSmoothTransition)
        {
            WorldGrid worldGrid = Find.WorldGrid;

            worldGrid.GetTileVertices(tileID, tmpVerts);
            worldGrid.GetTileNeighbors(tileID, tmpNeighbors);
            if (nodes.Count == 1 && pointyEnds)
            {
                int count = subMesh.verts.Count;
                AddPathEndpoint(subMesh, tmpVerts, tmpNeighbors.IndexOf(nodes[0].neighbor), color, tileID, nodes[0]);
                subMesh.verts.Add(FinalizePoint(worldGrid.GetTileCenter(tileID), nodes[0].distortionFrequency, nodes[0].distortionIntensity));
                subMesh.colors.Add(color.MutateAlpha(0));
                subMesh.tris.Add(count);
                subMesh.tris.Add(count + 3);
                subMesh.tris.Add(count + 1);
                subMesh.tris.Add(count + 1);
                subMesh.tris.Add(count + 3);
                subMesh.tris.Add(count + 2);
                return;
            }
            if (nodes.Count == 2)
            {
                int count2 = subMesh.verts.Count;
                int num    = tmpNeighbors.IndexOf(nodes[0].neighbor);
                int num2   = tmpNeighbors.IndexOf(nodes[1].neighbor);
                if (allowSmoothTransition && Mathf.Abs(num - num2) > 1 && Mathf.Abs((num - num2 + tmpVerts.Count) % tmpVerts.Count) > 1)
                {
                    AddPathEndpoint(subMesh, tmpVerts, num, color, tileID, nodes[0]);
                    AddPathEndpoint(subMesh, tmpVerts, num2, color, tileID, nodes[1]);
                    subMesh.tris.Add(count2);
                    subMesh.tris.Add(count2 + 5);
                    subMesh.tris.Add(count2 + 1);
                    subMesh.tris.Add(count2 + 5);
                    subMesh.tris.Add(count2 + 4);
                    subMesh.tris.Add(count2 + 1);
                    subMesh.tris.Add(count2 + 1);
                    subMesh.tris.Add(count2 + 4);
                    subMesh.tris.Add(count2 + 2);
                    subMesh.tris.Add(count2 + 4);
                    subMesh.tris.Add(count2 + 3);
                    subMesh.tris.Add(count2 + 2);
                    return;
                }
            }
            float num3 = 0f;

            for (int i = 0; i < nodes.Count; i++)
            {
                num3 = Mathf.Max(num3, nodes[i].width);
            }
            Vector3 tileCenter = worldGrid.GetTileCenter(tileID);

            tmpHexVerts.Clear();
            for (int j = 0; j < tmpVerts.Count; j++)
            {
                tmpHexVerts.Add(FinalizePoint(Vector3.LerpUnclamped(tileCenter, tmpVerts[j], num3 * 0.5f * 2f), 0f, 0f));
            }
            tileCenter = FinalizePoint(tileCenter, 0f, 0f);
            int count3 = subMesh.verts.Count;

            subMesh.verts.Add(tileCenter);
            subMesh.colors.Add(color);
            int count4 = subMesh.verts.Count;

            for (int k = 0; k < tmpHexVerts.Count; k++)
            {
                subMesh.verts.Add(tmpHexVerts[k]);
                subMesh.colors.Add(color.MutateAlpha(0));
                subMesh.tris.Add(count3);
                subMesh.tris.Add(count4 + (k + 1) % tmpHexVerts.Count);
                subMesh.tris.Add(count4 + k);
            }
            for (int l = 0; l < nodes.Count; l++)
            {
                if (nodes[l].width != 0f)
                {
                    int count5 = subMesh.verts.Count;
                    int num4   = tmpNeighbors.IndexOf(nodes[l].neighbor);
                    AddPathEndpoint(subMesh, tmpVerts, num4, color, tileID, nodes[l]);
                    subMesh.tris.Add(count5);
                    subMesh.tris.Add(count4 + (num4 + tmpHexVerts.Count - 1) % tmpHexVerts.Count);
                    subMesh.tris.Add(count3);
                    subMesh.tris.Add(count5);
                    subMesh.tris.Add(count3);
                    subMesh.tris.Add(count5 + 1);
                    subMesh.tris.Add(count5 + 1);
                    subMesh.tris.Add(count3);
                    subMesh.tris.Add(count5 + 2);
                    subMesh.tris.Add(count3);
                    subMesh.tris.Add(count4 + (num4 + 2) % tmpHexVerts.Count);
                    subMesh.tris.Add(count5 + 2);
                }
            }
        }
Esempio n. 13
0
        public void GeneratePaths(LayerSubMesh subMesh, int tileID, List <OutputDirection> nodes, Color32 color, bool allowSmoothTransition)
        {
            WorldGrid worldGrid = Find.WorldGrid;

            worldGrid.GetTileVertices(tileID, tmpVerts);
            worldGrid.GetTileNeighbors(tileID, tmpNeighbors);
            if (nodes.Count == 1 && pointyEnds)
            {
                int             count           = subMesh.verts.Count;
                List <Vector3>  verts           = tmpVerts;
                List <int>      list            = tmpNeighbors;
                OutputDirection outputDirection = nodes[0];
                AddPathEndpoint(subMesh, verts, list.IndexOf(outputDirection.neighbor), color, tileID, nodes[0]);
                List <Vector3>  verts2              = subMesh.verts;
                Vector3         tileCenter          = worldGrid.GetTileCenter(tileID);
                OutputDirection outputDirection2    = nodes[0];
                float           distortionFrequency = outputDirection2.distortionFrequency;
                OutputDirection outputDirection3    = nodes[0];
                verts2.Add(FinalizePoint(tileCenter, distortionFrequency, outputDirection3.distortionIntensity));
                subMesh.colors.Add(color.MutateAlpha(0));
                subMesh.tris.Add(count);
                subMesh.tris.Add(count + 3);
                subMesh.tris.Add(count + 1);
                subMesh.tris.Add(count + 1);
                subMesh.tris.Add(count + 3);
                subMesh.tris.Add(count + 2);
            }
            else
            {
                if (nodes.Count == 2)
                {
                    int             count2           = subMesh.verts.Count;
                    List <int>      list2            = tmpNeighbors;
                    OutputDirection outputDirection4 = nodes[0];
                    int             num              = list2.IndexOf(outputDirection4.neighbor);
                    List <int>      list3            = tmpNeighbors;
                    OutputDirection outputDirection5 = nodes[1];
                    int             num2             = list3.IndexOf(outputDirection5.neighbor);
                    if (allowSmoothTransition && Mathf.Abs(num - num2) > 1 && Mathf.Abs((num - num2 + tmpVerts.Count) % tmpVerts.Count) > 1)
                    {
                        AddPathEndpoint(subMesh, tmpVerts, num, color, tileID, nodes[0]);
                        AddPathEndpoint(subMesh, tmpVerts, num2, color, tileID, nodes[1]);
                        subMesh.tris.Add(count2);
                        subMesh.tris.Add(count2 + 5);
                        subMesh.tris.Add(count2 + 1);
                        subMesh.tris.Add(count2 + 5);
                        subMesh.tris.Add(count2 + 4);
                        subMesh.tris.Add(count2 + 1);
                        subMesh.tris.Add(count2 + 1);
                        subMesh.tris.Add(count2 + 4);
                        subMesh.tris.Add(count2 + 2);
                        subMesh.tris.Add(count2 + 4);
                        subMesh.tris.Add(count2 + 3);
                        subMesh.tris.Add(count2 + 2);
                        return;
                    }
                }
                float num3 = 0f;
                for (int i = 0; i < nodes.Count; i++)
                {
                    float           a = num3;
                    OutputDirection outputDirection6 = nodes[i];
                    num3 = Mathf.Max(a, outputDirection6.width);
                }
                Vector3 tileCenter2 = worldGrid.GetTileCenter(tileID);
                tmpHexVerts.Clear();
                for (int j = 0; j < tmpVerts.Count; j++)
                {
                    tmpHexVerts.Add(FinalizePoint(Vector3.LerpUnclamped(tileCenter2, tmpVerts[j], num3 * 0.5f * 2f), 0f, 0f));
                }
                tileCenter2 = FinalizePoint(tileCenter2, 0f, 0f);
                int count3 = subMesh.verts.Count;
                subMesh.verts.Add(tileCenter2);
                subMesh.colors.Add(color);
                int count4 = subMesh.verts.Count;
                for (int k = 0; k < tmpHexVerts.Count; k++)
                {
                    subMesh.verts.Add(tmpHexVerts[k]);
                    subMesh.colors.Add(color.MutateAlpha(0));
                    subMesh.tris.Add(count3);
                    subMesh.tris.Add(count4 + (k + 1) % tmpHexVerts.Count);
                    subMesh.tris.Add(count4 + k);
                }
                for (int l = 0; l < nodes.Count; l++)
                {
                    OutputDirection outputDirection7 = nodes[l];
                    if (outputDirection7.width != 0f)
                    {
                        int             count5           = subMesh.verts.Count;
                        List <int>      list4            = tmpNeighbors;
                        OutputDirection outputDirection8 = nodes[l];
                        int             num4             = list4.IndexOf(outputDirection8.neighbor);
                        AddPathEndpoint(subMesh, tmpVerts, num4, color, tileID, nodes[l]);
                        subMesh.tris.Add(count5);
                        subMesh.tris.Add(count4 + (num4 + tmpHexVerts.Count - 1) % tmpHexVerts.Count);
                        subMesh.tris.Add(count3);
                        subMesh.tris.Add(count5);
                        subMesh.tris.Add(count3);
                        subMesh.tris.Add(count5 + 1);
                        subMesh.tris.Add(count5 + 1);
                        subMesh.tris.Add(count3);
                        subMesh.tris.Add(count5 + 2);
                        subMesh.tris.Add(count3);
                        subMesh.tris.Add(count4 + (num4 + 2) % tmpHexVerts.Count);
                        subMesh.tris.Add(count5 + 2);
                    }
                }
            }
        }