Example #1
0
    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);
    }