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); }