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; if(next != null && prev != null) //Cas d'ajout entre deux modules { next.SetPrevModule(this); prev.SetNextModule(this); SetNextPrevModule(prev,next); if(_size == nxtSize && next.GetModuleType() == FunctionConf_Dynshelter.ModuleType.bloc) { //Add collé au next next.MoveModuleV2(-_length/2,next); prev.MoveModuleV2(_length/2,prev); newPos = next.GetPos().z + (_length/2+next.GetLength()/2); } if(_size == prvSize && prev.GetModuleType() == FunctionConf_Dynshelter.ModuleType.bloc) { //Add collé au prev if(_size != nxtSize) { next.MoveModuleV2(-_length/2,next); prev.MoveModuleV2(_length/2,prev); } newPos = prev.GetPos().z - (_length/2+prev.GetLength()/2); } if(_size != nxtSize && _size != prvSize) { //add a cheval float space = Vector3.Distance(prev.GetPos(),next.GetPos()); if(space > _length) { newPos = ((prev.GetPos() + next.GetPos()).z)/2; } else { float off7 = (_length - space)/2; next.MoveModuleV2(-off7,next); prev.MoveModuleV2(off7,prev); newPos = (prev.GetPos().z + next.GetPos().z)/2; } } } else //(next == null || prev == null) // Cas d'ajout aux extremites (1er ou dernier) { if(next !=null) { next.SetPrevModule(this); SetNextModule(next); if(_size == nxtSize) { //Add collé au next newPos = next.GetPos().z + (_length/2 + next.GetLength()/2); } else { //Add collé au next ou a cheval si pas la place // newPos = next.GetExtPos(AV).z; newPos = /*next.GetPos().z + */next.GetIntPos(AV).z - GetIntPos(AR).z; } } else//(prev != null) { prev.SetNextModule(this); SetPrevModule(prev); if(_size == prvSize) { //Add collé au prev newPos = prev.GetPos().z - (_length/2 + prev.GetLength()/2); } else { //Add collé au prev ou a cheval si pas la place // newPos = prev.GetExtPos(AR).z; newPos = /*prev.GetPos().z + */prev.GetIntPos(AR).z - GetIntPos(AV).z; } } } //Applying SetPos(false,newPos); }
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); }