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); }
//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)); }