Tuple <EntranceSide, Tile> GenerateEntranceAtSide(EntranceSide side)
        {
            var tile = GenerateEntrance(dungeonNode.Sides[side]);
            Tuple <EntranceSide, Tile> res = new Tuple <EntranceSide, Tile>(side, tile);

            return(res);
        }
        private EntranceSide CalcSide(EntranceSide current, EntranceSide next, float chanceForLevelTurn)//, int currentNodeIndex)
        {
            if (info != null && info.ForcedNextRoomSide != null)
            {
                return(info.ForcedNextRoomSide.Value);
            }

            EntranceSide side = GetRandSide();

            if (current == next)
            {
                if (RandHelper.GetRandomDouble() >= chanceForLevelTurn)
                {
                    side = side == EntranceSide.Bottom ? EntranceSide.Right : EntranceSide.Bottom;
                }
            }

            return(side);
        }
Example #3
0
            //methods

            internal List <IDoor> GenerateLayoutDoors(EntranceSide side, int nextNodeIndex, bool secret, bool overWallls = false)
            {
                var         res  = new List <IDoor>();
                List <Wall> wall = sides[side];

                if (secret)
                {
                    var  count   = sides[side].Count;
                    var  diff    = GenerationInfo.MaxRoomSideSize - GenerationInfo.MinRoomSideSize;
                    int  counter = 0;
                    bool added   = false;
                    while (counter < 100)
                    {
                        counter++;
                        var index = Enumerable.Range(diff, (count - diff * 2) - 2).ToList().GetRandomElem();
                        //var allowed = AreDoorAllowedToPutOn(wall[index]);
                        //if (!allowed)
                        //{
                        //  continue;
                        //}
                        var door = CreateDoor(wall[index]) as IDoor;
                        door.Secret = true;
                        res.Add(door);
                        added = true;
                        break;
                    }
                    Debug.Assert(added);
                    return(res);
                }

                for (int i = 0; i < wall.Count; i++)
                {
                    if (i > 0 && i % 2 == 0)// && (side != EntranceSide.Bottom || i < nextNode.Width))
                    {
                        res.Add(CreateDoor(wall[i]) as Door);
                    }
                }
                return(res);
            }
 public AppendNodeInfo(DungeonNode node)
 {
     Position    = new Point();
     side        = EntranceSide.Left;
     DungeonNode = node;
 }
        Tuple <EntranceSide, Tile> GenerateEntranceAtRandomSide(EntranceSide[] skip = null)
        {
            EntranceSide side = RandHelper.GetRandomEnumValue <EntranceSide>(skip);

            return(GenerateEntranceAtSide(side));
        }