public override PersonnageAbstrait CreerPersonnage(int typePerso, SujetObserveAbstrait unEtatMajor, string unNom, ZoneAbstraite unePosition)
        {
            PersonnageAbstrait perso;

            switch (typePerso)
            {
            case typeCamion:
                perso = new Camion();
                break;

            case typeVoiture:
                perso = new Voiture();
                perso.comportementSeDeplacer            = new ComportementSeDeplacerVoiture();
                perso.comportementSeDeplacer.personnage = perso;
                break;

            case typeMoto:
            default:
                perso = new Moto();
                break;
            }
            perso.Nom      = unNom;
            perso.Position = unePosition;
            unePosition.listePersonnages.Add(perso);

            if (unEtatMajor != null)
            {
                unEtatMajor.AjouterObservateur(perso);
            }

            return(perso);
        }
        public void LinkObject(Coordonnees coor, SujetObserveAbstrait obj, Grille grille)
        {
            if (coor == null)
            {
                return;
            }
            if (!coor.EstValide())
            {
                return;
            }
            if (grille == null)
            {
                return;
            }
            if (TestNullObject(obj))
            {
                return;
            }
            var node = GetNode(coor, grille);

            if (node == null)
            {
                Console.WriteLine("LinkCaseToZone: Impossible de récupérer une node viable en " + coor);
                return;
            }
            AttachObjectToCase(node, obj);
            AttachCaseToObject(node, obj);
        }
 protected virtual void AttachCaseToObject(Node <Case> node, SujetObserveAbstrait obj)
 {
     if (obj != null)
     {
         obj.Attach(node.Value);
     }
 }
 private bool TestNullObject(SujetObserveAbstrait obj)
 {
     if (obj == null)
     {
         throw  new NullReferenceException("L'objet à relier est null !");
     }
     return(false);
 }
 public void LinkObject(Coordonnees coor, SujetObserveAbstrait obj, Grille grille)
 {
     if (coor == null) return;
     if (!coor.EstValide()) return;
     if(grille == null) return;
     if (TestNullObject(obj)) return;
     var node = GetNode(coor,grille);
     if (node == null)
     {
         Console.WriteLine("LinkCaseToZone: Impossible de récupérer une node viable en " + coor);
         return;
     }
     AttachObjectToCase(node, obj);
     AttachCaseToObject(node, obj);
 }
 protected override sealed void AttachCaseToObject(Node<Case> node, SujetObserveAbstrait obj)
 {
     //obj.DeAttachAll(); // L'objet,La zone et le personnages ne doivent avoir que la case comme IObserverAbstrait !
     /* Retire les objets cases parmi les observers */
     var list = obj.GetObservers();
     int count = list.Count;
     for (int i=0; i< count; ++i)
     {
         if (list[i] is Case)
         {
             list.RemoveAt(i);
             --i;
             --count;
         }
     }
 }
        protected sealed override void AttachCaseToObject(Node <Case> node, SujetObserveAbstrait obj)
        {
            //obj.DeAttachAll(); // L'objet,La zone et le personnages ne doivent avoir que la case comme IObserverAbstrait !
            /* Retire les objets cases parmi les observers */
            var list  = obj.GetObservers();
            int count = list.Count;

            for (int i = 0; i < count; ++i)
            {
                if (list[i] is Case)
                {
                    list.RemoveAt(i);
                    --i;
                    --count;
                }
            }
        }
 public override PersonnageAbstrait CreerPersonnage(int typePerso, SujetObserveAbstrait unEtatMajor, string unNom, ZoneAbstraite unePosition)
 {
     throw new NotImplementedException();
 }
 protected override void AttachObjectToCase(Node <Case> node, SujetObserveAbstrait obj)
 {
     node.Value.SetZoneToObserve(null);
 }
 protected abstract override void AttachObjectToCase(Node <Case> node, SujetObserveAbstrait obj);
 protected override void AttachObjectToCase(Node <Case> node, SujetObserveAbstrait obj)
 {
     node.Value.SetPersonnageToObserve((PersonnageAbstract)obj);
 }
 protected abstract override void AttachObjectToCase(Node<Case> node, SujetObserveAbstrait obj);
 protected override void AttachObjectToCase(Node<Case> node, SujetObserveAbstrait obj)
 {
     node.Value.SetPersonnageToObserve(null);
 }
 private bool TestNullObject(SujetObserveAbstrait obj)
 {
     if (obj == null) throw  new NullReferenceException("L'objet à relier est null !");
     return false;
 }
 protected virtual void AttachCaseToObject(Node<Case> node, SujetObserveAbstrait obj)
 {
     if (obj != null) obj.Attach(node.Value);
 }
 protected override void AttachObjectToCase(Node<Case> node, SujetObserveAbstrait obj)
 {
     node.Value.SetZoneToObserve((ZoneFinale) obj);
 }