Esempio n. 1
0
 public void Detach(IEntityController controller)
 {
     if (_controllerAddQueue.Contains(controller))
     {
         lock (_controllerAddQueue)
         {
             if (_controllerAddQueue.Contains(controller))
             {
                 _controllerAddQueue.Remove(controller);
                 if (controller.Entity == this)
                 {
                     controller.Detach();
                 }
             }
         }
     }
     else if (_controllerRemoveQueue.Contains(controller))
     {
         // Do nothing.
     }
     else if (_controllerList.Contains(controller))
     {
         if (_isUpdating)
         {
             lock (_controllerRemoveQueue)
             {
                 if (_controllerRemoveQueue.Contains(controller) == false)
                 {
                     _controllerRemoveQueue.Add(controller);
                     if (controller.Entity == this)
                     {
                         controller.Detach();
                     }
                 }
             }
         }
         else
         {
             lock (_controllerList)
             {
                 _controllerList.Remove(controller);
                 if (controller.Entity == this)
                 {
                     controller.Detach();
                 }
             }
         }
     }
 }