PlaceableObject GenerateObject( int width, int height, SideRequirement xRequirement, SideRequirement yRequirement, params int[] roomsIn) { var placeableObject = new PlaceableObject(width, height, roomsIn.ToList(), xRequirement, yRequirement); return(placeableObject); }
public PlaceableObject(int x, int y, List <int> roomsIn, SideRequirement xSideRequirement = SideRequirement.None, SideRequirement ySideRequirement = SideRequirement.None, bool isSemiWall = false, bool placeFarAway = false) { Dimensions = new Vector(x, y); RoomsIn = roomsIn; XSideRequirement = xSideRequirement; YSideRequirement = ySideRequirement; IsSemiWall = isSemiWall; PlaceFarAway = placeFarAway; }
public void GivenObject(int width, int height, SideRequirement xRequirement, SideRequirement yRequirement, params int[] roomsIn) { foreach (var roomId in roomsIn) { if (!_roomIds.Contains(roomId)) { _roomIds.Add(roomId); } } _objectsToPlace.Add(GenerateObject(width, height, xRequirement, yRequirement, roomsIn)); }
private int _getSideScore(SideRequirement sideReq, SideState side1, SideState side2) { var sideScore = 0; var both = (side1 | side2); if (PlaceableObject.PlaceFarAway && (both & SideState.Blocked) > 0) { sideScore += 5; } switch (sideReq) { case SideRequirement.None: sideScore = 0; break; case SideRequirement.OneFree: sideScore += (both & SideState.Free) > 0 ? 0 : 1; break; case SideRequirement.OneWall: sideScore += (both & SideState.Wall) > 0 ? 0 : 1; break; case SideRequirement.OneWallOneFree: sideScore += _checkTwoRequirements(side1, side2, both, SideState.Free, SideState.Wall); break; case SideRequirement.TwoFree: sideScore += _checkTwoRequirements(side1, side2, both, SideState.Free, SideState.Free); break; case SideRequirement.TwoWalls: sideScore += _checkTwoRequirements(side1, side2, both, SideState.Wall, SideState.Wall); break; } return(sideScore); }