コード例 #1
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;
    }
コード例 #2
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
             }
         }
     }
 }