예제 #1
0
    public override void InsertBetween(DynShelterModule prev, DynShelterModule next)
    {
        if(next == null && prev == null)
            return;

        if(next == null) // la facade est le dernier module
        {
        //			Debug.Log("dernier module");
            //Retourne la facade
        //			Vector3 flip = new Vector3(0,180,0);
        //			Quaternion flipQuat = new Quaternion(0,0,0,0);
        //			flipQuat.eulerAngles = flip;
        //			_moduleGameObj.transform.localRotation = flipQuat;
            foreach(Transform t in _moduleGameObj.transform)
            {
                Vector3 pos = t.localPosition;
                pos.z = -pos.z;
                t.localPosition = pos;
        //			Debug.Log("pos : "+pos);
            }

            prev.SetNextModule(this);
            this.SetPrevModule(prev);
        }
        /*else*/ //prev = null, la facade est le premier module
        if(prev == null)
        {
        //			Debug.Log("premier module");
            next.SetPrevModule(this);
            this.SetNextModule(next);
        }
    }
예제 #2
0
 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);
     }
 }
예제 #3
0
    //CONSTRUCTOR---
    public DynShelterModule(int size,string style,FunctionConf_Dynshelter.ModuleType type,Color32 color,FunctionConf_Dynshelter parent)
    {
        _size = size;
        _style = style;
        _type = type;
        _color = color;
        _parentConf = parent;

        //--------------------------------------------

        _tag = _type.ToString()+"_t"+_size+"_"+_style;
        _canMoveNext = true;
        _canMovePrev = true;
        _lockNext = true;
        _lockPrev = true;
        _isAnchored = false;
        _nextModule = null;
        _prevModule = null;

        _transparent = new Material(Shader.Find("Transparent/Diffuse"));
        _transparent.color = new Color(1,1,1,0.25f);
        _backUpMaterials = new ArrayList();
    }
예제 #4
0
    public override bool MoveModuleV2(float delta, DynShelterModule startPoint,bool actOnPrevs=true,bool actOnNexts=true)
    {
        //		Debug.Log ("delta : "+delta+", actOnPrevs : "+actOnPrevs+", actOnNexts : "+actOnNexts);
        if(_nextModule != null)
        {
        //			Debug.Log ("next module");
            if(startPoint != _nextModule)
            {
        //				Debug.Log ("startPoint != _nextModule");
                return _nextModule.MoveModuleV2(delta,null);
            }
            else
            {
        //				Debug.Log ("false startPoint != _nextModule");
                SetPos(false,GetMyPos(false));
                return true;
            }
        }

        else if(_prevModule != null)
        {
        //			Debug.Log ("prev module");
            if(startPoint != _prevModule)
            {
        //				Debug.Log ("startPoint != _nextModule");
                return _prevModule.MoveModuleV2(delta,null);
            }
            else
            {
        //				Debug.Log ("false startPoint != _nextModule");
                SetPos(false,GetMyPos(true));
                return true;
            }
        }
        else
            return false;
    }
예제 #5
0
    //Mets a jours le module courant
    public void UpdateCurrentModule()
    {
        //Debug.Log("selectedIndex : "+_selectedIndex+" count : "+_modules.Count );
        if(_modules.Count > 0)
        {
            /*if(_selectedIndex==-1)
                _selectedIndex = 0;
            if(_selectedIndex>=_modules.Count)
                _selectedIndex =_modules.Count-1;*/
            if(_selectedIndex==-1)
                return;
            if(_selectedIndex>=_modules.Count)
                return;
            _currentModule = (DynShelterModule) _modules[_selectedIndex];
            _tmpStylesNames = _dsMdl.GetStylesNameOfSize(_currentModule.GetSize(),_currentModule.GetModuleType());
            _tmpStylesThumbs = _dsMdl.GetStylesThumbsOfSize(_tmpStylesNames);

            _currentType = _currentModule.GetType().ToString();//_currentModule.GetModuleType().ToString();
            for(int i=0;i<_tmpStylesNames.Length;i++)
            {
                if(_tmpStylesNames[i] == _currentModule.GetStyle())
                {
                    _currentStyle = i;
                }
            }
            UpdateRules();

            //Locks -------------------------
            _isLockedNext = _currentModule.GetNextLock();
            _isLockedPrev = _currentModule.GetPrevLock();

            //Mods
            _modManager.UpdateLocalMods(_currentModule.GetGameObj());
        }
        else
        {
            //CAS OU PLUS DE MODULES
            _currentModule = null;
        }
        UI.SetSelectedItem(_selectedIndex);
        UI.SetSelectedLocks(_isLockedPrev,_isLockedNext);

        if(szbrand == "PoolCover")
        {
            UpdateVisibility();
        }
    }
예제 #6
0
 //--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;
     }
 }
예제 #7
0
    public override bool MoveModuleV2(float delta, DynShelterModule startPoint,bool actOnPrevs=true,bool actOnNexts=true)
    {
        bool outPut = true;

        outPut = MoveMulti(delta,this,actOnPrevs,actOnNexts); // Test déplacement de tout l'ensemble

        if(_nextModule != null && outPut)
        {
            if(_nextModule.GetType() == GetType() && _nextModule.GetSize() == GetSize()) // propagation du mouvement aux nexts
            {
                ((DynShelterMultiBloc) _nextModule).MoveModuleLocal(delta,false,false,true);
            }
        }

        if(_prevModule != null && outPut)
        {
            if(_prevModule.GetType() == GetType() && _prevModule.GetSize() == GetSize()) // propagation du mouvement aux prevs
            {
                ((DynShelterMultiBloc) _prevModule).MoveModuleLocal(delta,false,true,false);
            }
        }

        return outPut;
    }
예제 #8
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;
        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);
    }
예제 #9
0
 private bool CheckCollisionPossibilityF(float delta,bool checkNext,DynShelterModule cmp)
 {
     if(checkNext)//Checks with nexts
     {
         if(_size >= cmp.GetSize())//Meme taille
         {
             return Contact(delta,AR,true,AV,true,cmp,checkNext);
         }
         else return false;
     }
     else//Checks with prevs
     {
         if(_size >= cmp.GetSize())//Meme taille
         {
             return Contact(delta,AV,true,AR,true,cmp,checkNext);
         }
         else return false;
     }
 }
예제 #10
0
 //Next/Prev Module
 public virtual void SetPrevModule(DynShelterModule prev)
 {
     _prevModule = prev;
 }
예제 #11
0
 public override void SetNextModule(DynShelterModule next)
 {
     if(next != null && next.GetType() == GetType() && _size == next.GetSize())
     {
         ARSubObj.SetActive(false);
     }
     else
     {
         ARSubObj.SetActive(true);
     }
     _nextModule = next;
 }
예제 #12
0
 public virtual void InsertBetween(DynShelterModule prev, DynShelterModule next)
 {
     //A implémenter dans les classes filles
 }
예제 #13
0
 public virtual void SetNextModule(DynShelterModule next)
 {
     _nextModule = next;
 }
예제 #14
0
 private bool CheckCollisionPossibility(float delta,bool checkNext,DynShelterModule cmp)
 {
     if(checkNext)//Checks with nexts
     {
         if(cmp == _nextModule && _lockNext)
             return false;
         if(_size == cmp.GetSize())//Meme taille
         {
             return Contact(delta,AR,true,AV,true,cmp,checkNext);
         }
         else if(cmp.GetSize() >= _size && cmp.IsLastEnd() )
         {
             return Contact(delta,AR,true,AR,false,cmp,checkNext);
         }
         else
             return false;
     }
     else//Checks with prevs
     {
         if(cmp == _prevModule && _lockPrev)
             return false;
         if(_size == cmp.GetSize() /*|| (cmp.GetModuleType() != FunctionConf_Dynshelter.ModuleType.bloc && _size <= cmp.GetSize())*/)//Meme taille
         {
             return Contact(delta,AV,true,AR,true,cmp,checkNext);
         }
         else if(cmp.GetSize() >= _size && cmp.IsFirstEnd())
         {
             return Contact(delta,AV,true,AV,false,cmp,checkNext);
         }
         else//--------------------//pas meme taille
         {
             return false;
         }
     }
 }
예제 #15
0
    public override bool MoveModuleV2(float delta, DynShelterModule startPoint,bool actOnPrevs=true,bool actOnNexts=true)
    {
        //test des limites-------------------------------
        bool notBlockedByLimits = CheckLimitMove(delta);
        if(!notBlockedByLimits)
        {
        //			Debug.Log(_tag + "Blocked by limits");
            return false;
        }

        //test Ancrage du module
        if(_isAnchored)
        {
            return false;
        }

        //test déplacement telescopique-------------------------------
        bool notBlockedByNext = true;
        bool notBlockedByPrev = true;

        if(delta > 0)
        {
            //Test PushPrev
            if(_prevModule != null && actOnPrevs && _prevModule != startPoint && _lockPrev)
                if(CheckTelescopicMove(delta,false))
                    notBlockedByPrev = _prevModule.MoveModuleV2(delta,this,true,false);//true,true
            //SI pushPrev > test PullNext
            if(notBlockedByPrev)
                if(_nextModule != null && actOnNexts && _nextModule != startPoint && _lockNext)
                    if(CheckTelescopicMove(delta,true))
                        notBlockedByNext = _nextModule.MoveModuleV2(delta,this,false,true);//true,true
        }
        else //delta <0
        {
            //Test PushNext
            if(_nextModule != null && actOnNexts && _nextModule != startPoint && _lockNext)
                if(CheckTelescopicMove(delta,true))
                    notBlockedByNext = _nextModule.MoveModuleV2(delta,this,false,true);//true,true
            //SI PushNext > test PullPrev
            if(notBlockedByNext)
                if(_prevModule != null && actOnPrevs && _prevModule != startPoint && _lockPrev)
                    if(CheckTelescopicMove(delta,false))
                        notBlockedByPrev = _prevModule.MoveModuleV2(delta,this,true,false);//true,true
        }

        if(!notBlockedByNext || !notBlockedByPrev)
        {
            return false;
        }

        //test éventuelles collision-------------------------------
        if(delta>0)	//test with prevs
        {
            DynShelterModule prev;
            if(_prevModule != null)
            {
                if(_prevModule.GetModuleType() == FunctionConf_Dynshelter.ModuleType.bloc)
                    prev = (DynShelterModule)_prevModule;
                else
                    prev = null;
            }
            else prev = null;

            while(prev != null)
            {
                if(CheckCollisionPossibility(delta,false,prev))
                {
                    if(!prev.MoveModuleV2(delta,this))
                        return false;
                }
                if(prev.GetPrevModule() != null)
                {
                    if(prev.GetPrevModule().GetModuleType() == FunctionConf_Dynshelter.ModuleType.bloc)
                        prev = (DynShelterModule)prev.GetPrevModule();
                    else
                        prev = null;
                }
                else
                    prev = null;
            }
        }
        else 		//test with nexts
        {
            DynShelterModule next;
            if(_nextModule != null)
            {
                if(_nextModule.GetModuleType() == FunctionConf_Dynshelter.ModuleType.bloc)
                    next = (DynShelterModule)_nextModule;
                else
                    next = null;
            }
            else next = null;

            while(next != null)
            {
                if(CheckCollisionPossibility(delta,true,next))
                {
                    if(!next.MoveModuleV2(delta,this))
                        return false;
                }
                if(next.GetNextModule() != null)
                {
                    if(next.GetNextModule().GetModuleType() == FunctionConf_Dynshelter.ModuleType.bloc)
                        next = (DynShelterModule) next.GetNextModule();
                    else
                        next = null;
                }
                else
                    next = null;
            }
        }

        //IF CAN MOVE -----
        SetPos(true,delta);

        if(_isFirstEnd)
        {
            _prevModule.MoveModuleV2(delta,this);
        }
        if(_isLastEnd)
        {
            _nextModule.MoveModuleV2(delta,this);
        }

        return true;
    }
예제 #16
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);
    }
예제 #17
0
    //-------------------------vv--FCNS--vv------------------------------------------------------
    private bool MoveMulti(float delta, DynShelterModule startPoint,bool actOnPrevs=true,bool actOnNexts=true)
    {
        _canMoveNext = true;
        _canMovePrev = true;

        DynShelterModule multiNext = _last.GetNextModule(); //multiNext equivalent du _nextModule
        DynShelterModule multiPrev = _first.GetPrevModule();//multiPrev equivalent du _prevModule

        //test des limites-------------------------------
        bool notBlockedByLimits = CheckLimitMove(delta);

        if( (!notBlockedByLimits) && !_parentConf.IsAbrifixe())
        {
            Debug.Log(_tag + "Blocked by limits");
            return false;
        }

        //test Ancrage du module
        bool test = true;
        DynShelterModule testModule = _first;
        while(testModule != _last && test)
        {
            if(testModule.IsAnchored())
            {
                test = false;
            }
            else
            {
                testModule = testModule.GetNextModule();
            }
        }
        if(!test)
        {
            Debug.Log("Anchored");
            return false;
        }

        //test déplacement telescopique-------------------------------
        bool notBlockedByNext = true;
        bool notBlockedByPrev = true;

        if(delta > 0)
        {
            //Test PushPrev
            if(multiPrev != null && actOnPrevs && multiPrev != startPoint && _lockPrev)
                if(CheckTelescopicMove(delta,false,multiNext,multiPrev))
                    notBlockedByPrev = multiPrev.MoveModuleV2(delta,this,true,false);//true,true
            //SI pushPrev > test PullNext
            if(notBlockedByPrev)
                if(multiNext != null && actOnNexts && multiNext != startPoint && _lockNext)
                    if(CheckTelescopicMove(delta,true,multiNext,multiPrev))
                        notBlockedByNext = multiNext.MoveModuleV2(delta,this,false,true);//true,true
        }
        else //delta <0
        {
            //Test PushNext
            if(multiNext != null && actOnNexts && multiNext != startPoint && _lockNext)
                if(CheckTelescopicMove(delta,true,multiNext,multiPrev))
                    notBlockedByNext = multiNext.MoveModuleV2(delta,this,false,true);//true,true
            //SI PushNext > test PullPrev
            if(notBlockedByNext)
                if(multiPrev != null && actOnPrevs && multiPrev != startPoint && _lockPrev)
                    if(CheckTelescopicMove(delta,false,multiNext,multiPrev))
                        notBlockedByPrev = multiPrev.MoveModuleV2(delta,this,true,false);//true,true
        }

        if(!notBlockedByNext || !notBlockedByPrev)
        {
            Debug.Log("Blockedbynextprev");
            return false;
        }

        //test éventuelles collision-------------------------------
        if(delta>0)	//test with prevs
        {
            DynShelterModule prev;
            if(multiPrev != null)
            {
                if(multiPrev.GetModuleType() == FunctionConf_Dynshelter.ModuleType.bloc)
                    prev = (DynShelterModule)multiPrev;
                else
                    prev = null;
            }
            else prev = null;

            while(prev != null)
            {
                if(CheckCollisionPossibility(delta,false,prev))
                {
                    if(!prev.MoveModuleV2(delta,this))
                        return false;
                }
                if(prev.GetPrevModule() != null)
                {
                    if(prev.GetPrevModule().GetModuleType() == FunctionConf_Dynshelter.ModuleType.bloc)
                        prev = (DynShelterModule)prev.GetPrevModule();
                    else
                        prev = null;
                }
                else
                    prev = null;
            }
        }
        else 		//test with nexts
        {
            DynShelterModule next;
            if(multiNext != null)
            {
                if(multiNext.GetModuleType() == FunctionConf_Dynshelter.ModuleType.bloc)
                    next = (DynShelterModule)multiNext;
                else
                    next = null;
            }
            else next = null;

            while(next != null)
            {
                if(CheckCollisionPossibility(delta,true,next))
                {
                    if(!next.MoveModuleV2(delta,this))
                        return false;
                }
                if(next.GetNextModule() != null)
                {
                    if(next.GetNextModule().GetModuleType() == FunctionConf_Dynshelter.ModuleType.bloc)
                        next = (DynShelterModule) next.GetNextModule();
                    else
                        next = null;
                }
                else
                    next = null;
            }
        }

        //IF CAN MOVE -----
        SetPos(true,delta);

        if(_isFirstEnd)
        {
            multiPrev.MoveModuleV2(delta,this);
        }
        /*else
        {
            if(GetPrevModule()!=null)
                if(GetPrevModule().GetType()==typeof(DynShelterFacade))
                    multiPrev.MoveModuleV2(delta,this);
        }*/
        if(_isLastEnd)
        {
            multiNext.MoveModuleV2(delta,this);
        }
        /*else
        {
            if(GetNextModule()!=null)
                if(GetNextModule().GetType()==typeof(DynShelterFacade))
                    multiPrev.MoveModuleV2(delta,this);
        }*/

        return true;
    }
예제 #18
0
    //Déplacement tests
    private bool CheckTelescopicMove(float delta,bool checkNext,DynShelterModule nxt,DynShelterModule prv)
    {
        bool pushNext = false;
        bool pullNext = false;
        bool pushPrev = false;
        bool pullPrev = false;

        if(delta <0)//---------------------------------------------------------------------dep Z-
        {
            if(nxt != null && _lockNext && checkNext)
            {
                if(nxt.GetSize()!=GetSize())//---Si c'est un bloc
                {
                    if(Push(false,delta))
                    {
                        pushNext = true;
                    }
                }
                else//-------------------------------------------------------------------------Si c'est un bloc de mm taille
                {
                    pushNext = true;
                }
            }

            if(prv != null && _lockPrev && !checkNext)
            {
                if(prv.GetSize()!=GetSize())//---Si c'est un bloc
                {
                    if(Pull(true,delta))
                    {
                        pullPrev = true;
                    }
                }
                else//-------------------------------------------------------------------------Si c'est une facade ou une extremité ou un bloc de mm taille
                {
                    pullPrev = true;
                    if(Contact(delta,AV,true,AR,true,prv,false))
                        pullPrev = false;
                }
            }
        }
        else if(delta >0)//-----------------------------------------------------------------------------dep Z+
        {
            if(nxt != null && _lockNext && checkNext)
            {
                if(nxt.GetSize()!=GetSize())//---Si c'est un bloc
                {
                    if(Pull(false,delta))
                    {
                        pullNext = true;
                    }
                }
                else//-------------------------------------------------------------------------Si c'est une facade ou une extremité ou un bloc de mm taille
                {
                    pullNext = true;
                    if(Contact(delta,AR,true,AV,true,nxt,true))
                        pullNext = false;
                }
            }

            if(prv != null && _lockPrev && !checkNext)
            {
                if(prv.GetSize()!=GetSize())//---Si c'est un bloc
                {
                    if(Push(true,delta))
                    {
                        pushPrev = true;
                    }
                }
                else//-------------------------------------------------------------------------Si c'est un bloc de mm taille
                {
                        pushPrev = true;
                }
            }
        }

        if(checkNext)
        {
            if((pushNext||pullNext))
                return true;
            else
                return false;
        }
        else
        {
            if((pushPrev||pullPrev))
                return true;
            else
                return false;
        }
    }
예제 #19
0
 public virtual bool MoveModuleV2(float delta, DynShelterModule startPoint,bool actOnPrevs=true,bool actOnNexts=true)
 {
     return true;
 }
예제 #20
0
    public IEnumerator AddModule(int size,string style,ModuleType typ,Color32 color,bool fromInit=false, bool bsensfacade=false)
    {
        //Debug.Log("t : "+size+", styl : "+style+",ModuleType : "+ typ.ToString()+", bool "+fromInit);

        bool noNeedLimitToBeRecalculate = fromInit;
        _isBuilding = true;
        //-------vv-Récupération du mesh-vv------------
        DynShelterModule newModule = null;
        string newStyle= string.Copy(style);
        string tag = CheckAndCreateTag(size,style,typ,out newStyle);
        style = string.Copy(newStyle);

        GameObject go = null;
        bool bextrem = false;

        //--vv--Si il na pas deja été créé, ben tant pis on ouvre--vv--
        if(go == null)
        {
        //			OSLib libObj = GetComponent<ObjData>().GetObjectModel().GetLibrary();
            WWW www = WWW.LoadFromCacheOrDownload (_lib.GetAssetBundlePath (), _lib.GetVersion ());
            yield return www;
            if (www.error != null)
            {
                Debug.Log ("AssetBundle ERROR" + www.error);
            }
            else
            {
                _assetBundle = www.assetBundle;
                if (_assetBundle != null)
                {
                    string sz = _assetBundle.name;

                    if(sz.Contains("extrem"))
                    {
                        bextrem = true;
                    }

                //	Debug.Log("assetBundle.load  : "+tag);
                    Object original = _assetBundle.LoadAsset (tag, typeof(GameObject));
                    if(original!=null){
                        go = (GameObject) Instantiate (original);
                    }
                    /*else
                    {

                        _assetBundle.Unload (false);
                        www.Dispose();
                    }*/

                }
                _assetBundle.Unload (false);
            }
            www.Dispose();
        }

        //-------vv-Création du module-vv---------------
        switch(typ)
        {
        case ModuleType.bloc:
            newModule = new DynShelterBloc(size,style,typ,color,this);
            break;
        case ModuleType.facade:
            noNeedLimitToBeRecalculate=true;
            newModule = new DynShelterFacade(size,style,typ,color,this);
            m_icounterFacade++;
            break;
        case ModuleType.extremite:
            newModule = new DynShelterExtrem(size,style,typ,color,this);
            break;
        case ModuleType.multiBloc:
            newModule = new DynShelterMultiBloc(size,style,ModuleType.bloc,color,this);
            if(_currentModule==null)
            {
                break;
            }
            if(_currentModule.GetType() == typeof(DynShelterBloc))
            {
                DynShelterMultiBloc newCurrent = new DynShelterMultiBloc((DynShelterBloc)_currentModule);
                foreach(DynShelterModule dm in _modules)
                {
                    if(dm.GetPrevModule() == _currentModule)
                        dm.SetPrevModule(newCurrent);
                    if(dm.GetNextModule() == _currentModule)
                        dm.SetNextModule(newCurrent);
                }

                _currentModule = newCurrent;
                _modules[_selectedIndex] = _currentModule;
            }
            else
            {
                if(_currentModule.GetPrevModule() != null)
                {
                    if(_currentModule.GetPrevModule().GetSize() == size && _currentModule.GetPrevModule().GetType() == typeof(DynShelterBloc))
                    {
                        Debug.Log("Modifying Prev");
                        DynShelterMultiBloc newPrev = new DynShelterMultiBloc((DynShelterBloc)_currentModule.GetPrevModule());
                        int idx = _modules.IndexOf(_currentModule.GetPrevModule());
                        _modules[idx] = newPrev;
                        _currentModule.SetNextModule(newPrev);
                    }
                }

                if(_currentModule.GetNextModule() != null)
                {
                    Debug.Log("Modifying Next");
                    if(_currentModule.GetNextModule().GetSize() == size && _currentModule.GetNextModule().GetType() == typeof(DynShelterBloc))
                    {
                        DynShelterMultiBloc newNext = new DynShelterMultiBloc((DynShelterBloc)_currentModule.GetNextModule());
                        int idx = _modules.IndexOf(_currentModule.GetNextModule());
                        _modules[idx] = newNext;
                        _currentModule.SetNextModule(newNext);
                    }
                }
            }
            break;
        }

        SaveTransform();
        go.transform.parent = transform;
        go.transform.localPosition = Vector3.zero;

        if(_currentModule != null)
        {
            if(bsensfacade && bextrem)
            {
                _currentModule.bextrem = true;
                go.transform.Rotate(0.0f, 180.0f, 0.0f);
            }
            else
            {
                _currentModule.bextrem = false;
            }
        }

        newModule.SetGameObject(go);
        _modManager.TestModuleForGlobalMods(go);

        //-------vv-Placement-vv-----------------------
        if(_currentModule != null)
        {
        //			Debug.Log(" _currentModule not null");
            if(_nextInsertion)
            {
        //				Debug.Log(" _nextInsertion");
                newModule.InsertBetween(_currentModule,_currentModule.GetNextModule());
                print ("_selectedIndex :"+ _selectedIndex );
                if( _selectedIndex+1 <= _modules.Count)
                {
                    _modules.Insert(_selectedIndex+1,newModule);
                    _selectedIndex++;
                }
            }
            else
            {
        //				Debug.Log("Not _nextInsertion");
            /*	if(_currentModule.GetType() == typeof(DynShelterMultiBloc)
                    && newModule.GetType() == typeof(DynShelterMultiBloc)
                    && _currentModule.GetPrevModule().GetType() == typeof(DynShelterFacade))
                {
                    newModule.InsertBetween(_currentModule,_currentModule.GetNextModule());
                    _modules.Insert(_selectedIndex+1,newModule);
                }
                else*/
                {
                    newModule.InsertBetween(_currentModule.GetPrevModule(),_currentModule);
                    _modules.Insert(_selectedIndex,newModule);
                }
            }

            //Déplacement Immobile ^^ QUICKFIX placement des facades a l'ajout de celles-ci
            _currentModule.MoveModuleV2(0,_currentModule,true,true);
        }
        else
        {
        //			Debug.Log(" _currentModule  null");
            newModule.SetPos(false,0);
            newModule.SetNextPrevModule(null,null);
            newModule.SetNextPrevLocks(true,true);
            _modules.Add(newModule);
            //_selectedIndex = 0;
        }
        UI.SetItemsNb(_modules.Count);
        UpdateCurrentModule();
        _removeModule = false;
        ChangeModuleColor(_currentColor);

        UpdateLimits(noNeedLimitToBeRecalculate);

        ReapplyTransform();

        if(szbrand == "PoolCover")
        {
            UpdateBoxCollider();
            UpdateVisibility();
        }

        //CenterDeployAndFeetLimit();

        yield return new WaitForEndOfFrame();
        _isBuilding = false;
    }
예제 #21
0
 public void SetNextPrevModule(DynShelterModule prev,DynShelterModule next)
 {
     _prevModule = prev;
     _nextModule = next;
 }
예제 #22
0
    /* LoadShelter()
     * Chargement de la configuration d'abri lors du chargement de montage
     **/
    private IEnumerator LoadShelter(ArrayList CustomConf = null,ArrayList PosConf = null)
    {
        while(_isBuilding)
            yield return null;

        foreach(DynShelterModule m in _modules)
        {
            m.RemoveModule();
        }
        _modules.Clear();
        _modManager.ClearManager();
        _currentModule = null;
        _selectedIndex = 0;

        yield return null;

        _isBuilding = true;
        //Attend que le objdata soit configuré
        while(gameObject.GetComponent<ObjData>().GetObjectModel() == null)
        {
            yield return new WaitForEndOfFrame();
        }

        //Création de l'abri par default
        ArrayList stConf = CustomConf;

        if(stConf.Count > 0)
        {
            Color32 c = new Color32(255,255,255,255);
        //			SaveTransform();
            for(int i=0;i<stConf.Count-2;i=i+8)
            {
                ModuleType typ = ModuleType.bloc;
                switch ((string)stConf[i]) //TYP >0
                {
                case "facade":
                    typ = ModuleType.facade;
                    break;
                case "bloc":
                    typ = ModuleType.bloc;
                    break;
                case "extremite":
                    typ = ModuleType.extremite;
                    break;
                }

                int t = (int) stConf[i+1]; //TAILLE >1

                string styl = (string) stConf[i+2]; //STYLE >2

                _nextInsertion = true;
                _decalZ = 0.0f;
                yield return StartCoroutine(AddModule(t,styl,typ,_currentColor));

                c = (Color32)stConf[i+3]; //color > 3
                _currentModule.SetColor(c);

                _currentModule.SetNextLocks((bool)stConf[i+4]);//NLock> 4
                _currentModule.SetPrevLocks((bool)stConf[i+5]);//PLock> 5
                _currentModule.SetAnchor((bool)stConf[i+6]); //Anchor > 6

                yield return new WaitForEndOfFrame();

                _modManager.UpdateLocalMods(_currentModule.GetGameObj(),true);
                _modManager.ApplyLoadConf((string[])stConf[i+7]); //ModConf>7
            }
            ChangeModuleColor(c);
            _isBuilding = false;
        }

        _selectedIndex = 0;
        UpdateCurrentModule();

        for(int i=0;i<_modules.Count;i++)
        {
            ((DynShelterModule)_modules[i]).SetPos(false,(float)PosConf[i]);
        }

        UpdateBoxCollider();

        enabled = false;
        ShowArrows(false);
        CenterDeployAndFeetLimit();
        yield return null;
    }
예제 #23
0
    //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;
        }
    }
예제 #24
0
 public override void SetNextModule(DynShelterModule next)
 {
     _nextModule = next;
     if(next == null)
         return;
     ((DynShelterModule) next).SetIsFirstEnd(true);
     SetPos(false,GetMyPos(false));
 }
예제 #25
0
 public override void SetPrevModule(DynShelterModule prev)
 {
     _prevModule = prev;
     if(prev == null)
         return;
     ((DynShelterModule) prev).SetIsLastEnd(true);
     SetPos(false,GetMyPos(true));
 }
예제 #26
0
 public void IAm(bool first,DynShelterMultiBloc bloc)
 {
     if(first)
     {
         _first = bloc;
         if(_nextModule != null)
         {
             if(_nextModule.GetType() == GetType() && _nextModule.GetSize()==GetSize())
             {
                 ((DynShelterMultiBloc) _nextModule).IAm(first,bloc);//Propagation de la réponse aux suivants
             }
         }
     }
     else
     {
         _last = bloc;
         if(_prevModule != null)
         {
             if(_prevModule.GetType() == GetType() && _prevModule.GetSize()==GetSize())
             {
                 ((DynShelterMultiBloc) _prevModule).IAm(first,bloc);//Propagation de la reponse aux précedants
             }
         }
     }
 }