示例#1
0
        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;
 }
示例#3
0
        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);
        }