Esempio n. 1
0
        public void NavigationService_weighs_values()
        {
            RoomService roomService = NSubstitute.Substitute.For <RoomService>();
            FloorPlan   plan        = new FloorPlan(20, 20, fill: true);

            RoomPlan roomPlan = new RoomPlan
            {
                Name       = "Test",
                Width      = 5,
                Height     = 5,
                WallValue  = 20,
                FloorValue = 1,
                DoorTile   = new DoorTile(4, 2, cost: 3, notes: "Door")
            };
            IFloorRoom room = roomService.GenerateRoom(roomPlan);

            plan.AddRoom(room, new Location(3, 12));

            var display = plan.Print();

            Debug.WriteLine(display);

            NavigationService navService = NSubstitute.Substitute.For <NavigationService>(plan);
            var path = navService.FindPath(new Location(1, 1), new Location(5, 14));

            display = plan.Print(path);
            Debug.Write(display);
        }
Esempio n. 2
0
        public async Task <ActionResult <RoomPlan> > PostRoomPlan(RoomPlan roomPlan)
        {
            _context.RoomPlans.Add(roomPlan);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetRoomPlan", new { id = roomPlan.Id }, roomPlan));
        }
Esempio n. 3
0
        public async Task <IActionResult> PutRoomPlan(int id, RoomPlan roomPlan)
        {
            if (id != roomPlan.Id)
            {
                return(BadRequest());
            }

            _context.Entry(roomPlan).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!RoomPlanExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Esempio n. 4
0
    public void Generate()
    {
        bool[,] map = new bool[width, height];

        FillMap(map);

        for (int i = 0; i < 5; i++)
        {
            map = CellularAutomataPass(map);
        }

        RemoveUnconnectedParts(map);

        nearestTiles = new Vector2[width, height];
        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < height; y++)
            {
                if (map[x, y])
                {
                    InstantiateFloorTile(map, x, y);
                    if (IsFloor(map, x, y + 1) && IsFloor(map, x, y - 1) && IsFloor(map, x + 1, y) && IsFloor(map, x - 1, y))
                    {
                        nearestTiles[x, y] = new Vector2(x, y);
                    }
                    else
                    {
                        nearestTiles[x, y] = -Vector2.one;
                    }
                }
                else
                {
                    nearestTiles[x, y] = -Vector2.one;
                }
            }
        }

        PrefillNearestTiles(map);

        if (topDoor == null)
        {
            GameObject door = Instantiate(doorPrefab, fallbackTopDoorPosition, Quaternion.identity, transform) as GameObject;
            topDoor = door.GetComponent <Door>();
            Debug.LogWarning("Top door in fallback position");
        }
        topDoor.room = this;

        if (bottomDoor == null)
        {
            GameObject door = Instantiate(doorPrefab, fallbackBottomDoorPosition, Quaternion.identity, transform) as GameObject;
            bottomDoor = door.GetComponent <Door>();
            Debug.LogWarning("Bottom door in fallback position");
        }
        bottomDoor.room      = this;
        bottomDoor.doorToHub = true;

        RoomPlan = RoomPlanFactory.getInstance().getRoomPlan(this.ID, this);
    }
 public RoomControl(RoomPlan roomPlan, ProjectFile assignedProject, Point insertPoint)
 {
     InitializeComponent();
     RoomAssignment = new RoomAssignment(roomPlan, assignedProject, (int)insertPoint.X, (int)insertPoint.Y);
     if (RoomAssignment.RoomPlan.RoomPlanImage == null)
     {
         RoomAssignment.RoomPlan.SaveRoomPlanImage();
     }
 }
Esempio n. 6
0
 public RoomPlanDto ToRoomPlanDto(RoomPlan roomPlan)
 {
     return(new RoomPlanDto()
     {
         Id = roomPlan.Id,
         Columns = roomPlan.Columns,
         Rows = roomPlan.Rows,
         Seats = SeatPositionsStringToList(roomPlan.Seats)
     });
 }
Esempio n. 7
0
        public void OpenRoomPlan(RoomPlan roomPlan)
        {
            RoomPlanGrid roomPlanGrid = new RoomPlanGrid(roomPlan);

            roomPlanGrid.ChangeObserved  += RoomPlanGrid_ChangeObserved;
            roomPlanGrid.RoomNameChanged += PlanGrid_NameChanged;

            tabControl.SelectedIndex = AddTab(roomPlanGrid, roomPlan.Name, roomTabStyle, Guid.NewGuid().ToString());
            SetCurrentTabItemBold(tabControl.Items[tabControl.SelectedIndex] as TabItem);
        }
        public void RoomService_generates_room()
        {
            RoomService service = NSubstitute.Substitute.For <RoomService>();

            // North door
            RoomPlan roomType = new RoomPlan
            {
                Name       = "Test",
                Width      = 3,
                Height     = 3,
                WallValue  = 5,
                FloorValue = 1,
                DoorTile   = new DoorTile(1, 0, cost: 3, notes: "Door")
            };

            IFloorRoom room    = service.GenerateRoom(roomType);
            string     display = room.FloorTiles.Print();

            Debug.WriteLine(display);
            display.ShouldBeEquivalentTo("535" + Environment.NewLine + "5_5" + Environment.NewLine + "555" + Environment.NewLine);

            // East door
            roomType.DoorTile = new DoorTile(2, 1, cost: 3, notes: "Door");
            room    = service.GenerateRoom(roomType);
            display = room.FloorTiles.Print();
            Debug.WriteLine(display);
            display.ShouldBeEquivalentTo("555" + Environment.NewLine + "5_3" + Environment.NewLine + "555" + Environment.NewLine);

            // South door
            roomType.DoorTile = new DoorTile(1, 2, cost: 3, notes: "Door");
            room    = service.GenerateRoom(roomType);
            display = room.FloorTiles.Print();
            Debug.WriteLine(display);
            display.ShouldBeEquivalentTo("555" + Environment.NewLine + "5_5" + Environment.NewLine + "535" + Environment.NewLine);

            // West door
            roomType.DoorTile = new DoorTile(0, 1, cost: 3, notes: "Door");
            room    = service.GenerateRoom(roomType);
            display = room.FloorTiles.Print();
            Debug.WriteLine(display);
            display.ShouldBeEquivalentTo("555" + Environment.NewLine + "3_5" + Environment.NewLine + "555" + Environment.NewLine);

            // North door wide
            roomType.Width    = 4;
            roomType.DoorTile = new DoorTile(1, 0, cost: 3, notes: "Door");
            room    = service.GenerateRoom(roomType);
            display = room.FloorTiles.Print();
            Debug.WriteLine(display);
            display.ShouldBeEquivalentTo("5355" + Environment.NewLine + "5__5" + Environment.NewLine + "5555" + Environment.NewLine);
        }
Esempio n. 9
0
        public RoomPlanGrid(RoomPlan roomPlan)
        {
            InitializeComponent();
            predictInnerRoomTimer          = new DispatcherTimer();
            predictInnerRoomTimer.Interval = TimeSpan.FromMilliseconds(500);
            isInit = false;
            RoomPlanViewModel vm = DataContext as RoomPlanViewModel;

            roomPlan.Load();
            vm.RoomPlan = roomPlan;
            roomPlan.ChangeManager.ChangeObserved += ChangeManager_ChangeObserved;
            vm.RoomNameChanged         += Vm_RoomNameChanged;
            vm.GridSizeChanged         += Vm_GridSizeChanged;
            vm.ChangeObserved          += ChangeManager_ChangeObserved;
            predictInnerRoomTimer.Tick += PredictInnerRoomTimer_Tick;
            AddTilesAndPlaceables();
        }
Esempio n. 10
0
        public int SaveRoomPlan(RoomPlan Details)
        {
            HotelInformation hotelInfo = new HotelInformation();

            return(hotelInfo.SaveRoomPlan(Details));
        }
Esempio n. 11
0
        private int Separation(RoomPlan a, RoomPlan b)
        {
            var path = Tools.AStar<RoomPlan>(a, b,
                x => x.Doors.Keys.Select(y => Tuple.Create(y, (x.Rect.TopLeft - y.Rect.TopLeft).ManhattanLength)),
                x => x.Rect.TopLeft + new Position(x.Rect.Width / 2, x.Rect.Height / 2));

            return path.Length;
        }
Esempio n. 12
0
        private bool CanGenerateDoor(RoomPlan a, RoomPlan b)
        {
            if (a.Index >= b.Index) return false;
            if (!a.Rect.IsAdjacent(b.Rect)) return false;

            var i = a.Rect.Intersection(b.Rect);

            return i.Width >= 3 || i.Height >= 3;
        }
Esempio n. 13
0
        public override IEnumerable<RoomPlan> Generate(Level level, Random rand)
        {
            int destArea = rand.Next(MinArea, MaxArea);

            var plans = new List<RoomPlan>();

            int range = (int) Math.Sqrt(destArea);
            var hubs = new Hub[Math.Max(1, rand.Next(MinHubs, MaxHubs + 1))];

            for (int i = 0; i < hubs.Length; ++i) {
                hubs[i].Position = new Position(rand.Next(-range, range), rand.Next(-range, range));
                hubs[i].Density = rand.Next(MinHubDensity, MaxHubDensity);
            }

            ProgressStart("Creating rooms: ");

            int area = 0;
            while (area < destArea) {
                var generator = GetRandomGenerator(rand);
                var size = new Rectangle(Position.Zero, generator.RoomLayout.GenerateSize(rand));

                var hub = hubs[rand.Next(hubs.Length)];
                var hubPos = hub.Position;

                var best = Rectangle.Zero;
                RoomPlan neighbour = null;

                if (plans.Count > 0) {
                    int bestDist = 0;

                    int tries = 0;
                    while (best == Rectangle.Zero || ++tries <= hub.Density) {
                        var othr = plans[rand.Next(plans.Count)];
                        var rect = GenerateAdjacentRect(othr.Rect, size, rand);

                        if (plans.Any(x => x.Rect.Intersects(rect))) continue;

                        int dist = (rect.NearestPosition(hubPos) - hubPos).ManhattanLength;
                        if (best != Rectangle.Zero && dist >= bestDist) continue;

                        best = rect;
                        bestDist = dist;
                        neighbour = othr;

                        tries = 0;
                    }
                } else {
                    best = new Rectangle(-size.Width / 2, -size.Height / 2, size.Width, size.Height);
                }

                var info = new RoomPlan(best, generator, plans.Count);
                if (neighbour != null) {
                    var door = GenerateDoor(info.Rect, neighbour.Rect, rand);

                    info.AddDoor(neighbour, door);
                    neighbour.AddDoor(info, door);
                }

                plans.Add(info);
                area += best.Area;

                ProgressUpdate(area, destArea);
            }

            ProgressEnd();

            var spareDoors = plans
                .SelectMany(x => plans
                    .Where(y => CanGenerateDoor(x, y) && !x.Doors.ContainsKey(y))
                    .Select(y => Tuple.Create(x, y)))
                .ToList();

            ProgressStart("Creating Doors: ");

            int doorCount = Tools.Clamp((int) (rand.NextFloat(MinConnectivity, MaxConnectivity) * spareDoors.Count), 0, spareDoors.Count);
            for (int d = 0; d < doorCount; ++d) {
                Tuple<RoomPlan, RoomPlan> door = null;
                int bestScore = 0;
                foreach (var elem in spareDoors) {
                    var score = Separation(elem.Item1, elem.Item2);
                    score = score * score + rand.Next(50);

                    if (score > bestScore) {
                        door = elem;
                        bestScore = score;
                    }
                }

                spareDoors.Remove(door);

                var rect = GenerateDoor(door.Item1.Rect, door.Item2.Rect, rand);

                door.Item1.AddDoor(door.Item2, rect);
                door.Item2.AddDoor(door.Item1, rect);

                ProgressUpdate(d + 1, doorCount);
            }

            ProgressEnd();

            return plans;
        }
 public RoomControl(RoomPlan roomPlan, ProjectFile assignedProject) : this(roomPlan, assignedProject, new Point())
 {
 }
Esempio n. 15
0
        public Result AddRoom(Room room, RoomPlan roomPlan, ICollection <SeatPosition> seatPositions)
        {
            try
            {
                ICollection <SeatPosition> dbSeatPositions = databaseContext.SeatPositions.ToList();
                int  id          = dbSeatPositions.Count + 1;
                bool duplicateId = false;
                List <SeatPosition> addedSeatPositions = new List <SeatPosition>();
                foreach (SeatPosition seatPosition in seatPositions)
                {
                    do
                    {
                        duplicateId = dbSeatPositions.Any(x => x.Id == id);
                        if (duplicateId)
                        {
                            id++;
                        }
                    } while (duplicateId);
                    seatPosition.Id = id;
                    addedSeatPositions.Add(seatPosition);
                    id++;
                }
                databaseContext.SeatPositions.AddRange(addedSeatPositions);
                databaseContext.SaveChanges();

                ICollection <RoomPlan> roomPlans = databaseContext.RoomPlans.ToList();
                id = roomPlans.Count + 1;
                do
                {
                    duplicateId = roomPlans.Any(x => x.Id == id);
                    if (duplicateId)
                    {
                        id++;
                    }
                } while (duplicateId);
                roomPlan.Id    = id;
                roomPlan.Seats = SeatPositionsListToString(seatPositions);

                databaseContext.RoomPlans.Add(roomPlan);
                databaseContext.SaveChanges();

                ICollection <Room> rooms = GetRooms();
                id = rooms.Count + 1;
                do
                {
                    duplicateId = rooms.Any(x => x.Id == id);
                    if (duplicateId)
                    {
                        id++;
                    }
                } while (duplicateId);
                room.Id         = id;
                room.RoomPlanId = id;

                databaseContext.Rooms.Add(room);
                databaseContext.SaveChanges();
                return(new Result(room.Id));
            }
            catch (Exception ex)
            {
                return(new Result(ex));
            }
        }
Esempio n. 16
0
        public Result UpdateRoom(Room room, RoomPlan roomPlan, ICollection <SeatPosition> added, ICollection <SeatPosition> updated)
        {
            try
            {
                string seatPositionIds = "";
                foreach (SeatPosition seatPosition in updated)
                {
                    SeatPosition dbSeatPosition = GetSeatPositionById(seatPosition.Id);
                    if (dbSeatPosition != null)
                    {
                        dbSeatPosition.Column     = seatPosition.Column;
                        dbSeatPosition.Rotation   = seatPosition.Rotation;
                        dbSeatPosition.Row        = seatPosition.Row;
                        dbSeatPosition.SeatTypeId = seatPosition.SeatTypeId;
                        databaseContext.SeatPositions.Update(dbSeatPosition);
                        seatPositionIds += seatPositionIds == "" ? seatPosition.Id.ToString() : ";" + seatPosition.Id;
                    }
                }

                if (added.Count > 0)
                {
                    ICollection <SeatPosition> dbSeatPositions = databaseContext.SeatPositions.ToList();
                    int  id          = dbSeatPositions.Count + 1;
                    bool duplicateId = false;
                    foreach (SeatPosition seatPosition in added)
                    {
                        do
                        {
                            duplicateId = dbSeatPositions.Any(x => x.Id == id);
                            if (duplicateId)
                            {
                                id++;
                            }
                        } while (duplicateId);
                        seatPosition.Id  = id;
                        seatPositionIds += seatPositionIds == "" ? id.ToString() : ";" + id;
                        id++;
                    }

                    databaseContext.SeatPositions.AddRange(added);
                }

                string[] oldSeatPositionIds = roomPlan.Seats.Split(';', StringSplitOptions.RemoveEmptyEntries);
                foreach (string seatPositionId in oldSeatPositionIds)
                {
                    if (!seatPositionIds.Contains(seatPositionId))
                    {
                        SeatPosition seatPosition = databaseContext.SeatPositions.FirstOrDefault(x => x.Id == int.Parse(seatPositionId));

                        if (seatPosition != null)
                        {
                            databaseContext.SeatPositions.Remove(seatPosition);
                        }
                    }
                }

                roomPlan.Seats = seatPositionIds;
                databaseContext.RoomPlans.Update(roomPlan);

                room.RoomPlanId = roomPlan.Id;
                databaseContext.Rooms.Update(room);
                databaseContext.SaveChanges();
                return(new Result());
            }
            catch (Exception ex)
            {
                return(new Result(ex));
            }
        }