コード例 #1
0
        protected override void Operation()
        {
            this.Transporter.onRoad = false;
            if (this.transporter.Route[0].Content.Count < this.transporter.Route[0].Capacity)
            {
                transporter.Route[0].Receive(this.Time, transporter);
                transporter.BecomeFree(this.Time);
            }
            else
            {
                transporter.Route[0].TransporterQueue.add(transporter)
                transporter.BecomeBlocked(this.Time);
                return;
            }
            if (transporter.Location = transporter.ParkNode)
            {
                if (transporter.assignedStorage != null)
                {
                    this.Manager.EventCalendar.ScheduleSeizeNodeEvent(this.Time + transporter.TravelTime.GenerateValue(), transporter);
                    transporter.Route[0].Release(this.Time, transporter);
                    transporter.onRoad = true;
                    return;
                }
            }
            if (transporter.Route.Count == 0)
            {
                if (transporter.Content.Count > 0)
                {
                    this.Manager.EventCalendar.ScheduleEndLoadUnloadEvent(this.Time + transporter.TransferTime.GenerateValue(), transporter);
                    transporter.InTransfer = true;
                    foreach (Bin bin in transporter.Content)
                    {
                        bin.InTransfer = true;
                    }
                    return;
                }
                else
                {
                    this.Manager.TriggerSupermarketControllerAlgorithm(this.transporter.assignedStorage);
                    return;
                }
            }

            if (transporter.Route.Count > 0)
            {
                BinList binsToUnload  = transporter.Route[0].GetBinsToUnload((Storage)transporter.Location);
                BinList binsToCollect = this.Manager.BinCollectorAlgorithm.Execute(binsToUnload, (Storage)transporter.Location);

                //ScheduleEndLoadUnloadEvent icine binsToCollect almiyor ona gore duzenlememiz gerekiyor. Bunun disinda icine neden binmagazine aldigina bakip guncellememiz gerekiyr.
                this.Manager.EventCalendar.ScheduleEndLoadUnloadEvent(this.Time + transporter.TravelTime.GenerateValue(), binsToUnload, transporter, binsToCollect);

                foreach (Bin bin in binsToUnload)
                {
                    bin.InTransfer = true;
                }
                foreach (Bin bin in binsToCollect)
                {
                    bin.InTransfer = true;
                }
                return;
            }
        }