public override void InsertBetween(DynShelterModule prev, DynShelterModule next) { if(next == null) // la facade est le dernier module { SetPos(false,prev.GetExtPos(AR).z); prev.SetNextModule(this); this.SetPrevModule(prev); } else //prev = null, la facade est le premier module { SetPos(false,next.GetExtPos(AV).z); next.SetPrevModule(this); this.SetNextModule(next); } }
//--vv--FCN's spécifiques--vv-------- private bool Push(bool prev,float delta,DynShelterModule comp) { if(prev) { if(Mathf.Sign((comp.GetExtPos(AR)-(GetExtPos(AV) + new Vector3(0,0,delta))).z)<0) return true; else return false; } else { if(Mathf.Sign((comp.GetExtPos(AV) - (GetExtPos(AR) + new Vector3(0,0,delta))).z)>0) return true; else return false; } }
//Créé un vecteur "test" entre avant/arriere intérieur/exterieur entre le current et le cmp(comparé) //renvoie true si avec le déplacement delta il y a contact protected bool Contact(float delta,bool curAvt,bool curExt, bool cmpAvt,bool cmpExt,DynShelterModule cmp,bool cmpIsNext) { Vector3 toTest; if(cmpExt) { toTest = cmp.GetExtPos(cmpAvt); } else//int { toTest = cmp.GetIntPos(cmpAvt); } if(curExt) { toTest = toTest - (GetExtPos(curAvt)+ new Vector3(0,0,delta)); } else//int { toTest = toTest - (GetIntPos(curAvt)+ new Vector3(0,0,delta)); } if(cmpIsNext) { if(toTest.z >= 0) //>= return true; else return false; } else { if(toTest.z <= 0)//<= return true; else return false; } }
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); }