public override void InsertBetween(DynShelterModule prev, DynShelterModule next) { int nxtSize = next!=null? next.GetSize() : -1; int prvSize = prev!=null? prev.GetSize() : -1; float newPos = 0.0f; float off7 = 0.0f; if(next != null && prev != null) //Cas d'ajout entre deux modules { //--vv--configuration des modules--vv-- if(next.GetModuleType() != FunctionConf_Dynshelter.ModuleType.bloc) { _last = this; } next.SetPrevModule(this); if(prev.GetModuleType() != FunctionConf_Dynshelter.ModuleType.bloc) { _first = this; } prev.SetNextModule(this); // SetNextPrevModule(prev,next); SetPrevModule(prev); SetNextModule(next); WhoIs(true); WhoIs(false); //--vv--Placement--vv-- if(_size == nxtSize && (_size != prvSize || prev.GetModuleType() != FunctionConf_Dynshelter.ModuleType.bloc)) //Le suivant est de la mm taille mais pas le précedent { //Add collé au next newPos = next.GetPos().z; off7 = -_length; if(next.GetType() == GetType()) off7 += _AvArSize;//TAILLE DU MONTANT DynShelterModule nxt = next; while(nxt != null) { nxt.SetPos(true,off7); nxt = nxt.GetNextModule(); } } else if(_size == prvSize && (_size != nxtSize || next.GetModuleType() != FunctionConf_Dynshelter.ModuleType.bloc)) //le précedent est de la meme taille mais pas le suivant { //Add collé au prev newPos = prev.GetPos().z; off7 = _length; if(prev.GetType() == GetType()) off7 -= ((DynShelterMultiBloc)prev).GetAvArSize();//TAILLE DU MONTANT DynShelterModule prv = prev; while(prv != null) { prv.SetPos(true,off7); prv = prv.GetPrevModule(); } } else //if(_size == nxtSize && _size == prvSize) // le precedent et le suivant ont la meme taille que le courant { DynShelterModule nxt = next; off7 = -_length; if(next.GetType() == GetType()) off7 += _AvArSize;//TAILLE DU MONTANT while(nxt != null) { nxt.SetPos(true,off7/2); nxt = nxt.GetNextModule(); } off7 = _length; if(prev.GetType() == GetType()) off7 -= ((DynShelterMultiBloc)prev).GetAvArSize();//TAILLE DU MONTANT DynShelterModule prv = prev; while(prv != null) { prv.SetPos(true,off7/2); prv = prv.GetPrevModule(); } newPos = (next.GetPos()+prev.GetPos()).z/2; } // else // le precedent et le suivant ont une taille différente du courant // { // DynShelterModule nxt = next; // while(nxt != null) // { // nxt.SetPos(true,-_length/2); // nxt = nxt.GetNextModule(); // } // // DynShelterModule prv = prev; // while(prv != null) // { // prv.SetPos(true,_length/2); // prv = prv.GetPrevModule(); // } // // newPos = (next.GetPos()+prev.GetPos()).z/2; // } } else //(next == null || prev == null) // Cas d'ajout aux extremites (1er ou dernier) { if(next !=null) // this est le 1er module { next.SetPrevModule(this); SetNextModule(next); WhoIs(true); WhoIs(false); if(_size == nxtSize) { //Add collé au next newPos = next.GetPos().z + (_length/2 + next.GetIntOffSet()/*next.GetLength()/2*/); } else { //Add collé au next ou a cheval si pas la place newPos = next.GetExtPos(AV).z; } } else//(prev != null) // this est le dernier module { prev.SetNextModule(this); SetPrevModule(prev); WhoIs(true); WhoIs(false); if(_size == prvSize) { //Add collé au prev newPos = prev.GetPos().z - (_length/2 + prev.GetIntOffSet() /*prev.GetLength()/2*/); } else { //Add collé au prev ou a cheval si pas la place newPos = prev.GetExtPos(AR).z; } } } //Applying Position SetPos(false,newPos); }