Example #1
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);
        }
Example #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]);
        }
Example #3
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);
        }
Example #4
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);
        }