public PassengerEventArgs(Passenger PassengerWhoRisedAnEvent) { this.PassengerWhoRisedAnEvent = PassengerWhoRisedAnEvent; }
public void RemovePassenger(Passenger PassengerToRemove) { lock (locker) //Can be invoked by multiple passengers at once { this.listOfPeopleInside.Remove(PassengerToRemove); this.IsFull = false; } }
private void AddRemoveNewPassengerToTheQueue(Passenger PassengerToAddOrRemvove, bool AddFlag) { //Lock not needed. Only two references (from this), both already locked if (AddFlag) //Add passenger { int? FirstFreeSlotInQueue = FindFirstFreeSlotInQueue(); //Make sure there is a space to add new passenger if (FirstFreeSlotInQueue != null) { //Add passenger object to an array this.arrayOfPeopleWaitingForElevator[(int)FirstFreeSlotInQueue] = PassengerToAddOrRemvove; //Add passenger control to the UI int NewPassengerVerticalPosition = this.beginOfTheQueue + (this.widthOfSlotForSinglePassenger * (int)FirstFreeSlotInQueue); PassengerToAddOrRemvove.PassengerPosition = new Point(NewPassengerVerticalPosition, GetFloorLevelInPixels()); //Add passenger to Building's list myBuilding.ListOfAllPeopleWhoNeedAnimation.Add(PassengerToAddOrRemvove); } } else //Remove passenger { int PassengerToRemoveIndex = Array.IndexOf<Passenger>(GetArrayOfPeopleWaitingForElevator(), PassengerToAddOrRemvove); this.GetArrayOfPeopleWaitingForElevator()[PassengerToRemoveIndex] = null; } }
public bool AddNewPassengerIfPossible(Passenger NewPassenger, Floor TargetFloor) { //Passengers are added synchronically. Lock not needed. if (!IsFull && //check, if there is a place for another passenger ((GetElevatorStatus() == ElevatorStatus.Idle) || (GetElevatorStatus() == ElevatorStatus.WaitingForPassengersToGetInAndGetOut))) { //Reset elevator timer, so the passenger has time to get in this.ResetElevatorTimer(); this.listOfPeopleInside.Add(NewPassenger); //add new passenger this.AddNewFloorToTheList(TargetFloor); //add new floor if (this.listOfPeopleInside.Count >= this.maximumPeopleInside) //set flag, if needed { this.IsFull = true; this.SetElevatorStatus(ElevatorStatus.PreparingForJob); // to prevent other passengers attempt to get in } return true; //new passenger added successfully } else return false; //new passenger not added due to lack of space in the elevator }