Advertisement
Guest User

Untitled

a guest
Oct 15th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.19 KB | None | 0 0
  1. private readonly Hotel _hotel;
  2.  
  3.  
  4.         public Dictionary<HotelEvent, int> events;
  5.        
  6.        
  7.         /// <summary>
  8.         /// Constructor
  9.         /// </summary>
  10.         /// <param name="hotel"></param>
  11.         public HotelEventHandler(Hotel hotel)
  12.         {
  13.             _hotel = hotel;
  14.             HotelEventManager.Register(this);
  15.             events = new Dictionary<HotelEvent, int>();
  16.         }
  17.  
  18.         /// <summary>
  19.         /// Notify handler
  20.         /// </summary>
  21.         /// <param name="evt"></param>
  22.         public void Notify(HotelEvent evt)
  23.         {
  24.             if(evt != null)
  25.                 events.Add(evt, evt.Time);
  26.         }
  27.  
  28.         public void Update(int time)
  29.         {
  30.             HotelEventManager.Pauze(); //pause the hotel from giving events
  31.  
  32.             Dictionary<HotelEvent, int> toRemove = new Dictionary<HotelEvent, int>();
  33.             foreach (var @event in events.Where(x => time > x.Value))
  34.             {
  35.                 if (!@event.Equals(null))
  36.                 {            
  37.                     switch (@event.Key.EventType)
  38.                     {
  39.                         case HotelEventType.CHECK_IN:
  40.                             HandleCheckIn(@event.Key);
  41.                             break;
  42.                         case HotelEventType.CHECK_OUT:
  43.                             HandleCheckOut(@event.Key);
  44.                             break;
  45.                         case HotelEventType.NEED_FOOD:
  46.                             HandleNeedFood(@event.Key);
  47.                             break;
  48.                         case HotelEventType.GOTO_CINEMA:
  49.                             HandleGotoCinema(@event.Key);
  50.                             break;
  51.                         case HotelEventType.START_CINEMA:
  52.                             HandleStartCinema(@event.Key);
  53.                             break;
  54.                         case HotelEventType.GOTO_FITNESS:
  55.                             HandleGotoFitness(@event.Key);
  56.                             break;
  57.                         case HotelEventType.CLEANING_EMERGENCY:
  58.                             HandleCleaningEmergency(@event.Key);
  59.                             break;
  60.                         default:
  61.                             Console.WriteLine("MISSING EVENT" + @event.Key.EventType);
  62.                             break;
  63.                     }
  64.  
  65.                 }
  66.  
  67.                 toRemove.Add(@event.Key, @event.Value);  
  68.             }
  69.            
  70.             foreach (var @event in toRemove)
  71.             {
  72.                 events.Remove(@event.Key);
  73.             }
  74.             HotelEventManager.Pauze(); //resume
  75.  
  76.         }
  77.  
  78.         /// <summary>
  79.         /// Handles GOTO_FITNESS event
  80.         /// </summary>
  81.         /// <param name="evt"></param>
  82.         private void HandleGotoFitness(HotelEvent evt)
  83.         {
  84.             foreach (var pair in evt.Data)
  85.             {
  86.                 BaseNpc guest = _hotel.GetGuest(int.Parse(pair.Value));
  87.                 guest.UpdateDestination(_hotel.algoritm.GetNearestRoom(AreaTypes.Fitness, guest.currentPosition).tile);
  88.                 Console.WriteLine("Guest is walking to fitness!");
  89.             }
  90.         }
  91.  
  92.  
  93.         /// <summary>
  94.         /// Handles START_CINEMA event
  95.         /// </summary>
  96.         /// <param name="evt"></param>
  97.         private void HandleStartCinema(HotelEvent evt)
  98.         {
  99.             foreach (var pair in evt.Data)
  100.             {
  101.                 Cinema cinema = (Cinema)_hotel.GetRoomById(int.Parse(pair.Value));
  102.                 cinema.isPlaying = true;
  103.             }
  104.         }
  105.        
  106.         /// <summary>
  107.         /// Handles GOTO_CINEMA event
  108.         /// </summary>
  109.         /// <param name="evt"></param>
  110.         private void HandleGotoCinema(HotelEvent evt)
  111.         {
  112.             foreach (var pair in evt.Data)
  113.             {
  114.                 BaseNpc guest = _hotel.GetGuest(int.Parse(pair.Value));
  115.                 guest.UpdateDestination(_hotel.algoritm.GetNearestRoom(AreaTypes.Cinema, guest.currentPosition).tile);
  116.                 Console.WriteLine("Guest is walking to cinema!");
  117.             }
  118.         }
  119.  
  120.         /// <summary>
  121.         /// Handles the CLEANING_EMERGENCY event
  122.         /// </summary>
  123.         /// <param name="evt"></param>
  124.         private void HandleCleaningEmergency(HotelEvent evt)
  125.         {
  126.             BaseNpc c = _hotel.GetCleaner();
  127.             BaseRoom roomToClean = _hotel.GetRoomById(int.Parse(evt.Data.Values.First()));
  128.             if (c is Cleaner cleaner)
  129.             {
  130.                 cleaner.WorkingOn = roomToClean;
  131.                 cleaner.HteCleaning = int.Parse(evt.Data.Values.Last());
  132.                 cleaner.IsWorking = true;
  133.                 cleaner.UpdateDestination(cleaner.WorkingOn.tile);
  134.             }
  135.         }
  136.  
  137.         /// <summary>
  138.         /// Handles the NEED_FOOD event
  139.         /// </summary>
  140.         /// <param name="evt"></param>
  141.         private void HandleNeedFood(HotelEvent evt)
  142.         {
  143.             foreach (var pair in evt.Data)
  144.             {
  145.                 BaseNpc guest = _hotel.GetGuest(int.Parse(pair.Value));
  146.                 guest.UpdateDestination(_hotel.algoritm.GetNearestRoom(AreaTypes.Restaurant, guest.currentPosition).tile);
  147.                 Console.WriteLine("Guest is walking to restaurant!");
  148.             }
  149.         }
  150.        
  151.         /// <summary>
  152.         /// Handles the CHECK_OUT event
  153.         /// </summary>
  154.         /// <param name="evt"></param>
  155.         private void HandleCheckOut(HotelEvent evt)
  156.         {
  157.             foreach (var pair in evt.Data)
  158.             {
  159.                 Guest guest = (Guest)_hotel.GetGuest(int.Parse(pair.Value));
  160.                 BaseNpc c = _hotel.GetCleaner();
  161.                 if (c is Cleaner cleaner)
  162.                 {
  163.                     cleaner.WorkingOn = guest.reservedRoom;
  164.                     cleaner.IsWorking = true;
  165.                     cleaner.UpdateDestination(cleaner.WorkingOn.tile);
  166.                 }
  167.  
  168.                 guest.UpdateDestination(_hotel.grid.tiles[1,0]);
  169.                 Console.WriteLine("Guest checks out!");
  170.                 if (guest.DestinationReached())
  171.                 {
  172.                     _hotel.GetCleaner().texture = null;
  173.                 }
  174.             }
  175.         }
  176.  
  177.         /// <summary>
  178.         /// Handles the check in when a CHECK_IN event happens
  179.         /// </summary>
  180.         /// <param name="event"></param>
  181.         private void HandleCheckIn(HotelEvent @event)
  182.         {
  183.             if (!@event.Message.Contains("Test"))
  184.             {
  185.                 Console.WriteLine("Trying to check in guest..");
  186.                 foreach (var pair in @event.Data)
  187.                 {
  188.                     var requestedClassification = int.Parse(pair.Value[8] + "");
  189.                         Guest guest = new Guest();
  190.                         guest.id = int.Parse(pair.Key.Substring(4));
  191.                         guest.currentPosition = _hotel.grid.tiles[1, 0];
  192.                         guest.AssignRoom(_hotel.algoritm.GetNearestBedRoom(guest.currentPosition, requestedClassification));
  193.                         _hotel.npcsToAdd.Add(guest);
  194.                 }
  195.             }
  196.             else
  197.             {
  198.                 Console.WriteLine("Test event.");
  199.             }
  200.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement