예제 #1
0
 public override void Execute()
 {
     for (int x = 0; x < field.Height; ++x)
     {
         for (int y = 0; y < field.Width; ++y)
         {
             if (field.isChanged(x, y))
             {
                 for (int i = -1; i <= 1; ++i)
                 {
                     for (int j = -1; j <= 1; ++j)
                     {
                         UpdateCellEvent EV = new UpdateCellEvent(field, x + i, y + j);
                         EV.eTime = eTime + 1;
                         DEVS.ModelEvent.Enque(EV);
                     }
                 }
             }
         }
     }
     field.Swap();
 }
예제 #2
0
        public override void Execute()
        {
            List <LocalEvent> eventsToDelete = new List <LocalEvent>();

            foreach (var ev in DEVS.EventQueue)
            {
                bool deleteThis = true;
                if (ev is LocalEvent)
                {
                    var locEv = (LocalEvent)ev;
                    int x     = locEv.X;
                    int y     = locEv.Y;

                    for (int i = -1; i <= 1; ++i)
                    {
                        for (int j = -1; j <= 1; ++j)
                        {
                            if (field.isChanged(x + i, y + j))
                            {
                                deleteThis = false;
                            }
                        }
                    }
                    if (deleteThis)
                    {
                        eventsToDelete.Add(locEv);
                    }
                }
            }

            foreach (var locEv in eventsToDelete)
            {
                DEVS.ModelEvent.Delete(locEv.X, locEv.Y);
                locEv.Remove();
            }
        }