Beispiel #1
0
        /// <summary>
        /// Called when the elevator reaches the target shaft (for exiting the elevator)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TargetShaft_ElevatorArrival(object sender, EventArgs e)
        {
            // Check if this guest is not dead
            if (!_isDead)
            {
                // Set the room this person is in to the elevator this shaft.
                CurrentRoom = TargetShaft;

                // Unsubscribe from the event.
                TargetShaft.ElevatorArrival -= TargetShaft_ElevatorArrival;

                // Round off the position of the guest.
                Position = new Vector2(Position.X, _elevator.Position.Y - Room.ROOMHEIGHT + Sprite.Texture.Height);

                // Remove shaft info.
                TargetShaft    = null;
                _elevator      = null;
                CalledElevator = false;

                // Retarget the target room.
                FindAndTargetRoom(x => x == TargetRoom);

                // Move out of the elevator.
                CurrentTask = PersonTask.MovingCenter;
            }
        }
        // Environment to test the elevator in.
        public void GenerateElevatorRooms()
        {
            FileReader hteReader = new FileReader();
            // Read the settingsfile into HTE value
            Settings hte = hteReader.GetSettings();

            IFactory locationTypeFactory = AbstractFactory.Instance().Create("LocationType");

            for (int i = 0; i < 10; i++)
            {
                specs = new Facility()
                {
                    AreaType = "ElevatorHall", Position = new Point(0, i), Dimension = new Point(1, 1)
                };
                ElevatorShaft elevatorHall = locationTypeFactory.CreateCreatableObject("ElevatorHall", specs) as ElevatorShaft;
                shafts.Add(elevatorHall);

                if (i == 0)
                {
                    specs = new Facility()
                    {
                        ElevatorShaft = elevatorHall, Hte = hte
                    };
                    myElevator = locationTypeFactory.CreateCreatableObject("Elevator", specs) as Elevator;
                }
            }
            for (int i = 0; i < 10; i++)
            {
                if (i != 9)
                {
                    shafts[i].Neighbor.Add(shafts[i + 1], 1);
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// Move one floor down.
        /// </summary>
        /// <param name="destination">De volgende verdieping.</param>
        private void Descend(int destination)
        {
            if (direction != Direction.DOWN)
            {
                direction = Direction.DOWN;
            }

            location = GetNeighbor(Direction.DOWN);
            floor--;
        }
Beispiel #4
0
        /// <summary>
        /// Move one floor up.
        /// </summary>
        /// <param name="destination">De volgende verdieping.</param>
        private void Ascend(int destination)
        {
            if (direction != Direction.UP)
            {
                direction = Direction.UP;
            }

            location = GetNeighbor(Direction.UP);
            floor++;
        }
Beispiel #5
0
        public Elevator(Facility specs)
        {
            location = specs.ElevatorShaft as ElevatorShaft;
            floor    = 0;

            imageDoorOpen   = Image.FromFile(@"../../Resources/elevator_opened2.png");
            imageDoorClosed = Image.FromFile(@"../../Resources/elevatoritself.png");
            Image           = imageDoorClosed;
            this.hte        = specs.Hte.WalkingSpeedTimeUnit;
            Dimension       = new Point(1, 1);
        }
Beispiel #6
0
        /// <summary>
        /// Find a path to a room, using a rule. If a room has been found a path is saved and the target room is set.
        /// </summary>
        /// <param name="rule">The rule that is used for searching a room.</param>
        public void FindAndTargetRoom(FindPath rule)
        {
            // If the person is inside the elevator, set its target room for when he exits.
            if (_elevator != null)
            {
                Path       = _pathFinder.Find(CurrentRoom, rule);
                TargetRoom = Path.Last();
                return;
            }

            // Set the bool if the elevator is allowed to be used.
            _pathFinder.UseElevator = !Evacuating;

            // Find the path to the target room.
            Path = _pathFinder.Find(CurrentRoom, rule);

            // Do some elevator shiz.
            if (CalledElevator)
            {
                if (TargetShaft != null)
                {
                    TargetShaft.ElevatorArrival -= TargetShaft_ElevatorArrival;
                    _elevator   = null;
                    TargetShaft = null;
                    StartShaft.ElevatorArrival -= Person_ElevatorArrival;
                    StartShaft = null;
                }
                CalledElevator = false;
            }

            // Do stuff if there is a path.
            if (Path != null)
            {
                // The target room is the last room in the path.
                TargetRoom = Path.Last();

                // Get out of the room if the person is inside the room.
                if (Inside)
                {
                    Inside = false;
                    CurrentRoom.PeopleCount--;

                    // Call the departure event.
                    OnDeparture();
                }

                // Move this person to the center of the room.
                CurrentTask = PersonTask.MovingCenter;
            }
        }
        public void ElevatorCallTemplateWithRightINformation()
        {
            //arrange
            Hotel                hotel     = new Hotel();
            Reception            reception = (Reception)(from x in hotel.Roomlist where x.AreaType == "Reception" select x).ToList().Last();
            Guest                guest     = new Guest(reception, "5", reception.giveRoom(5), "1");
            ElevatorShaft        shaft1    = (ElevatorShaft)hotel.Roomlist.Find(x => x.AreaType == "Elevatorshaft" && x.PositionY == 0);
            ElevatorShaft        shaft2    = (ElevatorShaft)hotel.Roomlist.Find(x => x.AreaType == "Elevatorshaft" && x.PositionY == 4);
            ElevatorCallTemplate call;

            //act
            call = new ElevatorCallTemplate(guest, shaft1, shaft2);

            //assert
            Assert.AreEqual(guest, call.guest);
            Assert.AreEqual(shaft1, call.startFloor);
            Assert.AreEqual(shaft2, call.destinationFloor);
        }
Beispiel #8
0
        public void ElevatorshaftPass()
        {
            ElevatorShaft elevatorShaft  = new ElevatorShaft(1, new Microsoft.Xna.Framework.Point(0, 0));
            ElevatorShaft elevatorShaft2 = new ElevatorShaft(1, new Microsoft.Xna.Framework.Point(0, 1));

            elevatorShaft.Neighbors.Add(Direction.North, elevatorShaft);
            elevatorShaft2.Neighbors.Add(Direction.South, elevatorShaft2);

            GuestRoom room  = new GuestRoom(2, new Microsoft.Xna.Framework.Point(1, 1), new Microsoft.Xna.Framework.Point(1, 1), 4);
            Guest     guest = new Guest(elevatorShaft);

            guest.Room = room;

            guest.Path.Clear();
            guest.Path.Add(elevatorShaft);
            guest.Path.Add(elevatorShaft2);

            elevatorShaft.RoomBehaviour.OnPassRoom(elevatorShaft, guest);
            Assert.IsTrue(guest.CalledElevator);
        }
Beispiel #9
0
        /// <summary>
        /// Finds the right neighbor in the desired direction.
        /// </summary>
        /// <param name="directionNeighbor">The direction in which we want to find a neighbor.</param>
        /// <returns>The requested neighbor.</returns>
        private ElevatorShaft GetNeighbor(Direction directionNeighbor)
        {
            ElevatorShaft neighbor = null;

            foreach (KeyValuePair <LocationType, int> item in location.Neighbor)
            {
                int neighborPosY = item.Key.Position.Y;
                int neighborPosX = item.Key.Position.X;

                if (directionNeighbor == Direction.UP)
                {
                    if (neighborPosY > location.Position.Y)
                    {
                        neighbor = item.Key as ElevatorShaft;
                    }
                }
                else if (directionNeighbor == Direction.DOWN)
                {
                    if (neighborPosY < location.Position.Y)
                    {
                        neighbor = item.Key as ElevatorShaft;
                    }
                }
                else if (directionNeighbor == Direction.LEFT)
                {
                    if (neighborPosX < location.Position.X)
                    {
                        neighbor = item.Key as ElevatorShaft;
                    }
                }
                else if (directionNeighbor == Direction.RIGHT)
                {
                    if (neighborPosX > location.Position.X)
                    {
                        neighbor = item.Key as ElevatorShaft;
                    }
                }
            }
            return(neighbor);
        }
Beispiel #10
0
        /// <summary>
        /// Constructor voor Hotel
        /// </summary>
        public Hotel()
        {
            //maak nieuwe lijsten aan, maak een queue en zet de timer aan
            Roomlist     = new List <AbstractRoom>();
            Employees    = new List <Maid>();
            GuestList    = new List <Guest>();
            _dirtyroom   = new Queue <AbstractRoom>();
            roomFactory  = new RoomFactory();
            humanFactory = new HumanFactory();
            SetTimer();


            //open de streamreader
            using (StreamReader r =
                       new StreamReader(Path.Combine(Environment.CurrentDirectory, "..", "..", "..", "..", "HotelLayout/Hotel.layout")))
            {
                //String met alle data uit de layout file
                string json = r.ReadToEnd();

                //desirialiseer alle string json informatie naar een jsonObject die toegevoegd kunnen worden aan roomlist
                Jsonobjectlist = JsonConvert.DeserializeObject <List <JsonObject> >(json);

                //zet elke json object om naar de juiste kamer en voeg hem toe aan roomlist
                foreach (JsonObject room in Jsonobjectlist)
                {
                    switch (room.AreaType)
                    {
                    case "Cinema":
                        Roomlist.Add(roomFactory.CreateCinema(room.AreaType, room.Dimension, room.Position, room.Id));
                        break;

                    case "Restaurant":
                        Roomlist.Add(roomFactory.CreateRestaurant(room.Capacity, room.AreaType, room.Position, room.Dimension, room.Id));
                        break;

                    case "Room":
                        Roomlist.Add(roomFactory.CreateBedroom(room.Classification, room.AreaType, room.Position, room.Dimension, room.Id));
                        break;

                    case "Fitness":
                        Roomlist.Add(roomFactory.CreateGym(room.AreaType, room.Dimension, room.Position, room.Id));
                        break;
                    }
                }
            }

            //maak een nieuwe receptie en voeg hem toe aan roomlist
            reception = roomFactory.CreateReception(Roomlist);
            Roomlist.Add(reception);

            //voeg 2 schoonmaker toe aan de Employees lijst
            Employees.Add((Maid)humanFactory.CreateMaid(reception));
            Employees.Add((Maid)humanFactory.CreateMaid(reception));

            //een for each om te bepalen welke posities al in genomen zijn
            foreach (AbstractRoom r in Roomlist)
            {
                //hou max X bij
                if (r.PositionX > maxX)
                {
                    maxX = r.PositionX;
                }

                //hou max Y bij
                if (r.PositionY > maxY)
                {
                    maxY = r.PositionY;
                }


                //als de dimensie meer dan 1 is voeg dan alle posities van die kamer toe aan positions
                if (r.DimensionX > 1 || r.DimensionY > 1)
                {
                    for (int x = 0; x < r.DimensionX; x++)
                    {
                        for (int y = 0; y < r.DimensionY; y++)
                        {
                            positions.Add(new Point(r.PositionX + x, r.PositionY + y));
                        }
                    }
                }
                else // als een kamer 1 X 1 is voeg hem dan toe aan positions lijst
                {
                    positions.Add(new Point(r.PositionX, r.PositionY));
                }
            }

            //maak een lift aan
            Elevator elevator = (Elevator)roomFactory.CreateElevator("Elevator", 1, 1, maxX + 1, 0);

            //voeg lift en trap toe aan roomlist en zijn positie aan de positions lijst
            for (int i = 0; i <= maxY; i++)
            {
                //voeg de trap en zijn positie toe
                Roomlist.Add(roomFactory.CreateStairwell("Stairwell", 1, 1, 0, i));
                positions.Add(new Point(0, i));

                //maak een nieuwe shaft geef hem een refference naar de lift en voeg hem toe aan room list
                ElevatorShaft tempShaft = (ElevatorShaft)roomFactory.CreateElevatorshaft("Elevatorshaft", 1, 1, maxX + 1, i);
                tempShaft.setElevator(ref elevator);
                Roomlist.Add(tempShaft);

                //zet de lift op de positie van lift schaft
                if (i == 0)
                {
                    elevator.currentPosition = tempShaft;
                }

                //voeg de positie aan positions lijst
                positions.Add(new Point(maxX + 1, i));
            }



            //voeg hallway toe om lege ruimtes op te vullen
            for (int x = 0; x <= maxX; x++)
            {
                for (int y = 0; y <= maxY; y++)
                {
                    //als de positie niet gevuld is maak dan een hallway met die positie
                    if (!positions.Contains(new Point(x, y)))
                    {
                        Roomlist.Add(roomFactory.CreateHallway("Hallway", 1, 1, x, y));
                    }
                }
            }

            //buren toe voegen
            foreach (AbstractRoom r in Roomlist)
            {
                //als het een trap of een lift schaft is
                if (r.AreaType == "Stairwell" || r.AreaType == "Elevatorshaft")
                {
                    //kijk of er boven buren zijn
                    if (Roomlist.Any(x => x.PositionY == r.PositionY + 1 && x.PositionX == r.PositionX))
                    {
                        //selecteer de boven buur
                        var linq = (from a in Roomlist
                                    where (r.PositionY + 1) == a.PositionY && r.PositionX == a.PositionX
                                    select a).ToList();

                        //maak er een Abstractroom van en voeg hem toe aan buren
                        AbstractRoom result = linq.First();
                        r.AddNeighbour(ref result, 1);
                    }

                    //kijk of er onder buren zijn
                    if (Roomlist.Any(x => x.PositionY == r.PositionY - 1 && x.PositionX == r.PositionX))
                    {
                        //selecteer de onder buur
                        var linq = (from a in Roomlist
                                    where (r.PositionY - 1) == a.PositionY && r.PositionX == a.PositionX
                                    select a).ToList();

                        //maak er een Abstractroom van en voeg hem toe aan buren
                        AbstractRoom result = linq.First();
                        r.AddNeighbour(ref result, 1);
                    }
                }

                //kijk of er rechter buren zijn
                if (Roomlist.Any(x => x.PositionY == r.PositionY && x.PositionX == r.PositionX + r.DimensionX))
                {
                    //selecteer rechter buur zolang het geen lift is
                    var linq = (from a in Roomlist
                                where r.PositionY == a.PositionY && (r.PositionX + r.DimensionX) == a.PositionX &&
                                a.AreaType != "Elevator" select a).ToList();

                    //maak er een Abstractroom van en voeg hem toe aan buren
                    AbstractRoom result = linq.First();
                    r.AddNeighbour(ref result, r.DimensionX);
                }
                else     //als er geen rechter buur is
                {
                    //kijk naar rechts tot je iets vindt of de maxX is bereikt
                    for (int i = r.PositionX + 1; i <= maxX + 1; i++)
                    {
                        //als er een kamer is gevonden die deze positie heeft
                        if (Roomlist.Any(x => x.PositionY == r.PositionY && x.PositionX == i))
                        {
                            //selecteer rechter buur
                            var linq = (from a in Roomlist
                                        where r.PositionY == a.PositionY && i == a.PositionX
                                        select a).ToList();

                            //maak er een Abstractroom van en voeg hem toe aan buren
                            AbstractRoom result = linq.First();
                            r.AddNeighbour(ref result, 1);

                            break;
                        }
                    }
                }


                //kijk of er linker buren zijn
                if (Roomlist.Any(x => x.PositionY == r.PositionY && x.PositionX == r.PositionX - 1))
                {
                    //selecteer linker buur
                    var linq = (from a in Roomlist
                                where r.PositionY == a.PositionY && (r.PositionX - 1) == a.PositionX
                                select a).ToList();

                    //maak er een Abstractroom van en voeg hem toe aan buren
                    AbstractRoom result = linq.First();
                    r.AddNeighbour(ref result, 1);
                }
                else     //als er geen linker buur is
                {
                    //kijk naar links tot je iets vindt of het begin is bereikt
                    for (int i = r.PositionX - 1; i >= 0; i--)
                    {
                        //als er een kamer is gevonden die deze positie heeft
                        if (Roomlist.Any(x => x.PositionY == r.PositionY && x.PositionX == i))
                        {
                            //selecteer linker buur
                            var linq = (from a in Roomlist
                                        where r.PositionY == a.PositionY && i == a.PositionX
                                        select a).ToList();

                            //maak er een Abstractroom van en voeg hem toe aan buren
                            AbstractRoom result = linq.First();
                            r.AddNeighbour(ref result, 1);

                            break;
                        }
                    }
                }
            }

            //voeg lift toe aan roomlist
            Roomlist.Add(elevator);
        }
Beispiel #11
0
        public void ElevatorShaftConstructor()
        {
            ElevatorShaft room = new ElevatorShaft(1, new Point(0, 0));

            Assert.IsNotNull(room);
        }