private void LeaveElevator(int tick, IElevator elev) { // Added by Xiaobin SenElevator senElev = elev as SenElevator; senElev.AddCapability(_weight); Console.WriteLine("[Passenger] {0} leave elevator {1}, floor {2}", _name, elev.ID, _targetFloor); _reqCompleteTime = tick; _isArrived = true; _isInside = false; }
private void EnterElevator(IScheduler scheduler, int tick, IElevator elev) { SenElevator senElev = elev as SenElevator; if (senElev.FreeCapability >= _weight) { Console.WriteLine("[Passenger] {0} enter elevator {1}, at floor {2}", _name, elev.ID, _sourceFloor); _isInside = true; _targetReqTime = tick; _myElev = elev; senElev.SubCapability(_weight); PassengerReq req = new PassengerReq(RequestType.DestinationReq, tick, _targetFloor, Direction.No); req.SetReqInElevator(senElev); scheduler.QueueReq(req); } else if (senElev.CurrentStatus.DoorCloseOpenTicks < 4) //wait for one tick to try enter again. { Console.WriteLine("[Passenger] {0} can't get in due to over-weighted, press up/down again", this.Name); scheduler.QueueReq( new PassengerReq(RequestType.DirectionReq, tick, this._sourceFloor, this.UpDown)); } }
public static List <SenElevator> LoadElevators(List <ElevatorConf> conf) { List <SenElevator> all = new List <SenElevator>(); try { foreach (var ele in conf) { SenElevator obj = new SenElevator(null, ele.ID, ele.Capability, ele.FloorHeight, ele.FloorMax, ele.InitHeight ); all.Add(obj); } } catch (Exception e) { Console.WriteLine(e); } return(all); }