/// <summary> /// Pour chaque Tick du timer /// </summary> protected void OnTick(object sender, EventArgs e) { //Savoir si actuellement la file d'attente de la caisse est pleine bool isWaitingQueueFull = CustomersWaiting.Count == NB_MAX_CUSTOMER; //Indiquer au magasin que ce client a terminé OnCustomerDoneAtCheckout(new CustomerDoneAtCheckoutEventArgs(CustomersWaiting[0])); //Enlever le client de la liste CustomersWaiting.RemoveAt(0); //Lancer le prochain timer pour le client suivant, sinon le couper if (CustomersWaiting.Count > 0) { SetTimer(); } else { tmrWait.Enabled = false; } //Si la file d'attente était pleine, indiquer que ce n'est plus le cas if (isWaitingQueueFull) { //Indiquer que la caisse a une/des place(s) disponible(s) OnCheckoutAvailable(EventArgs.Empty); } }
/// <summary> /// Ajouter un client à la file d'attente de la caisse /// </summary> /// <param name="customer">Le client</param> public void AddCustomer(Customer customer) { CustomersWaiting.Add(customer); //Premier client if (CustomersWaiting.Count == 1) { SetTimer(); } //Caisse pleine if (CustomersWaiting.Count >= NB_MAX_CUSTOMER) { OnCheckoutFull(EventArgs.Empty); } }
/// <summary> /// Retourne l'emplacement dans la file d'attente en fonction de la position dans la file d'attente /// </summary> /// <param name="c">CLient qui demande sa position dans la file d'attente</param> /// <returns>Emplacement dans la file d'attente</returns> public PointF GetNextWaitingLocation(Customer c) { return(new PointF( location.X, location.Y - Properties.Settings.Default.SIZE_CHECKOUT_CUSTOMER.Height - (CustomersWaiting.IndexOf(c) * (OFFEST_WAITING + Properties.Settings.Default.SIZE_CHECKOUT_CUSTOMER.Height)) )); }