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