Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private readonly Hotel _hotel;
- public Dictionary<HotelEvent, int> events;
- /// <summary>
- /// Constructor
- /// </summary>
- /// <param name="hotel"></param>
- public HotelEventHandler(Hotel hotel)
- {
- _hotel = hotel;
- HotelEventManager.Register(this);
- events = new Dictionary<HotelEvent, int>();
- }
- /// <summary>
- /// Notify handler
- /// </summary>
- /// <param name="evt"></param>
- public void Notify(HotelEvent evt)
- {
- if(evt != null)
- events.Add(evt, evt.Time);
- }
- public void Update(int time)
- {
- HotelEventManager.Pauze(); //pause the hotel from giving events
- Dictionary<HotelEvent, int> toRemove = new Dictionary<HotelEvent, int>();
- foreach (var @event in events.Where(x => time > x.Value))
- {
- if (!@event.Equals(null))
- {
- switch (@event.Key.EventType)
- {
- case HotelEventType.CHECK_IN:
- HandleCheckIn(@event.Key);
- break;
- case HotelEventType.CHECK_OUT:
- HandleCheckOut(@event.Key);
- break;
- case HotelEventType.NEED_FOOD:
- HandleNeedFood(@event.Key);
- break;
- case HotelEventType.GOTO_CINEMA:
- HandleGotoCinema(@event.Key);
- break;
- case HotelEventType.START_CINEMA:
- HandleStartCinema(@event.Key);
- break;
- case HotelEventType.GOTO_FITNESS:
- HandleGotoFitness(@event.Key);
- break;
- case HotelEventType.CLEANING_EMERGENCY:
- HandleCleaningEmergency(@event.Key);
- break;
- default:
- Console.WriteLine("MISSING EVENT" + @event.Key.EventType);
- break;
- }
- }
- toRemove.Add(@event.Key, @event.Value);
- }
- foreach (var @event in toRemove)
- {
- events.Remove(@event.Key);
- }
- HotelEventManager.Pauze(); //resume
- }
- /// <summary>
- /// Handles GOTO_FITNESS event
- /// </summary>
- /// <param name="evt"></param>
- private void HandleGotoFitness(HotelEvent evt)
- {
- foreach (var pair in evt.Data)
- {
- BaseNpc guest = _hotel.GetGuest(int.Parse(pair.Value));
- guest.UpdateDestination(_hotel.algoritm.GetNearestRoom(AreaTypes.Fitness, guest.currentPosition).tile);
- Console.WriteLine("Guest is walking to fitness!");
- }
- }
- /// <summary>
- /// Handles START_CINEMA event
- /// </summary>
- /// <param name="evt"></param>
- private void HandleStartCinema(HotelEvent evt)
- {
- foreach (var pair in evt.Data)
- {
- Cinema cinema = (Cinema)_hotel.GetRoomById(int.Parse(pair.Value));
- cinema.isPlaying = true;
- }
- }
- /// <summary>
- /// Handles GOTO_CINEMA event
- /// </summary>
- /// <param name="evt"></param>
- private void HandleGotoCinema(HotelEvent evt)
- {
- foreach (var pair in evt.Data)
- {
- BaseNpc guest = _hotel.GetGuest(int.Parse(pair.Value));
- guest.UpdateDestination(_hotel.algoritm.GetNearestRoom(AreaTypes.Cinema, guest.currentPosition).tile);
- Console.WriteLine("Guest is walking to cinema!");
- }
- }
- /// <summary>
- /// Handles the CLEANING_EMERGENCY event
- /// </summary>
- /// <param name="evt"></param>
- private void HandleCleaningEmergency(HotelEvent evt)
- {
- BaseNpc c = _hotel.GetCleaner();
- BaseRoom roomToClean = _hotel.GetRoomById(int.Parse(evt.Data.Values.First()));
- if (c is Cleaner cleaner)
- {
- cleaner.WorkingOn = roomToClean;
- cleaner.HteCleaning = int.Parse(evt.Data.Values.Last());
- cleaner.IsWorking = true;
- cleaner.UpdateDestination(cleaner.WorkingOn.tile);
- }
- }
- /// <summary>
- /// Handles the NEED_FOOD event
- /// </summary>
- /// <param name="evt"></param>
- private void HandleNeedFood(HotelEvent evt)
- {
- foreach (var pair in evt.Data)
- {
- BaseNpc guest = _hotel.GetGuest(int.Parse(pair.Value));
- guest.UpdateDestination(_hotel.algoritm.GetNearestRoom(AreaTypes.Restaurant, guest.currentPosition).tile);
- Console.WriteLine("Guest is walking to restaurant!");
- }
- }
- /// <summary>
- /// Handles the CHECK_OUT event
- /// </summary>
- /// <param name="evt"></param>
- private void HandleCheckOut(HotelEvent evt)
- {
- foreach (var pair in evt.Data)
- {
- Guest guest = (Guest)_hotel.GetGuest(int.Parse(pair.Value));
- BaseNpc c = _hotel.GetCleaner();
- if (c is Cleaner cleaner)
- {
- cleaner.WorkingOn = guest.reservedRoom;
- cleaner.IsWorking = true;
- cleaner.UpdateDestination(cleaner.WorkingOn.tile);
- }
- guest.UpdateDestination(_hotel.grid.tiles[1,0]);
- Console.WriteLine("Guest checks out!");
- if (guest.DestinationReached())
- {
- _hotel.GetCleaner().texture = null;
- }
- }
- }
- /// <summary>
- /// Handles the check in when a CHECK_IN event happens
- /// </summary>
- /// <param name="event"></param>
- private void HandleCheckIn(HotelEvent @event)
- {
- if (!@event.Message.Contains("Test"))
- {
- Console.WriteLine("Trying to check in guest..");
- foreach (var pair in @event.Data)
- {
- var requestedClassification = int.Parse(pair.Value[8] + "");
- Guest guest = new Guest();
- guest.id = int.Parse(pair.Key.Substring(4));
- guest.currentPosition = _hotel.grid.tiles[1, 0];
- guest.AssignRoom(_hotel.algoritm.GetNearestBedRoom(guest.currentPosition, requestedClassification));
- _hotel.npcsToAdd.Add(guest);
- }
- }
- else
- {
- Console.WriteLine("Test event.");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement