Beispiel #1
0
        /// <summary>
        /// This handles events.
        /// </summary>
        /// <param name="evt">An event.</param>
        public void HandleEvent(HotelEvent evt)
        {
            switch (evt.EventType)
            {
            // The 'NONE' event.
            case HotelEventType.NONE:
                break;

            // Check-in event.
            case HotelEventType.CHECK_IN:
                // Don't allow check ins when in an evacuation.
                if (_hotel.Evacuating)
                {
                    break;
                }

                _hotel.AddGuest(evt.Data.Keys.ElementAt(0), Int32.Parse(Regex.Replace(evt.Data.Values.ElementAt(0), "[^0-9]+", string.Empty)));
                break;

            // Check-out event.
            case HotelEventType.CHECK_OUT:

                // Don't allow check outs when in an evacuation.
                if (_hotel.Evacuating)
                {
                    break;
                }

                // Get the guest that needs to be checked out.
                string objectName = evt.Data.Keys.ElementAt(0) + evt.Data.Values.ElementAt(0);
                if (_hotel.Guests.Keys.Contains(objectName))
                {
                    Guest aGuest = (Guest)_hotel.Guests[objectName];
                    aGuest.FindAndTargetRoom(x => x is Lobby && (x as Lobby).Receptionist != null);
                    aGuest.StayState = StayState.CheckOut;
                }
                break;

            // Cleaning Emergency event.
            case HotelEventType.CLEANING_EMERGENCY:
                // Get the specific room that has an emergency
                Room roomWithEmergency = _hotel.Rooms.Where(x => x.ID == Int32.Parse(evt.Data.Values.ElementAt(0))).FirstOrDefault();
                // Check if the room exists.
                if (roomWithEmergency != null)
                {
                    roomWithEmergency.SetEmergency(float.Parse(evt.Data.Values.ElementAt(1)));
                }
                break;

            // Evecuation event.
            case HotelEventType.EVACUATE:

                Evacuate();

                break;

            // Godzilla event.
            case HotelEventType.GODZILLA:
                Console.WriteLine("AAAAAAAHHHHHHHH!");

                Evacuate();

                break;

            // Guest needs food event.
            case HotelEventType.NEED_FOOD:

                string guestName = evt.Data.Keys.ElementAt(0) + evt.Data.Values.ElementAt(0);
                if (_hotel.Guests.Keys.Contains(guestName))
                {
                    Guest hotelGuest = _hotel.Guests[guestName] as Guest;

                    if (hotelGuest.StayState == StayState.Staying && !_hotel.Evacuating)
                    {
                        hotelGuest.FindAndTargetRoom(x => x is Cafe);
                    }
                }

                break;

            // Guest goes to cinema event.
            case HotelEventType.GOTO_CINEMA:
                string guest = evt.Data.Keys.ElementAt(0) + evt.Data.Values.ElementAt(0);

                // if the guest exists.
                if (_hotel.Guests.Keys.Contains(guest))
                {
                    Guest hotelGuest = _hotel.Guests[guest] as Guest;

                    // if the guest is not checking in or out
                    if (hotelGuest.StayState == StayState.Staying && !_hotel.Evacuating)
                    {
                        hotelGuest.FindAndTargetRoom(x => x is Cinema);
                    }
                }

                break;

            // Guest goes to fitness event.
            case HotelEventType.GOTO_FITNESS:
                string fitnessGuest = evt.Data.Keys.ElementAt(0) + evt.Data.Values.ElementAt(0);
                if (_hotel.Guests.Keys.Contains(fitnessGuest))
                {
                    Guest hotelGuest = _hotel.Guests[fitnessGuest] as Guest;

                    if (hotelGuest.StayState == StayState.Staying && !_hotel.Evacuating)
                    {
                        hotelGuest.FindAndTargetRoom(x => x is Fitness);
                        hotelGuest.SetTimeToStayInRoom(float.Parse(evt.Data.Values.ElementAt(1)));
                    }
                }
                break;

            // Start the cinema event.
            case HotelEventType.START_CINEMA:
                Cinema cinema = (Cinema)_hotel.Rooms.Where(x => x.ID == Int32.Parse(evt.Data.Values.ElementAt(0))).FirstOrDefault();
                cinema?.StartMovie();

                foreach (Person person in _hotel.Guests.Values)
                {
                    if (person.CurrentRoom == cinema && person.Inside)
                    {
                        if (person is Guest)
                        {
                            (person as Guest).SetTimeToStayInRoom(ServiceLocator.Get <ConfigLoader>().GetConfig().FilmDuration);
                        }
                    }
                }

                break;

            // default.
            default:
                break;
            }
        }