public Entry_Components AddObserver() { Entry_Components componentEntry = ScriptableObject.CreateInstance <Entry_Components>(); AssetsPath.CreateAsset(componentEntry, AssetsPath.AssetName_TemplateEntryObserver); //add observer components ComponentTemplatesList.ForEach(x => componentEntry.Componets.Add(x.AddObserver())); //set observer settings componentEntry.ShowAddButton = componentEntry.ShowRemoveButton = componentEntry.ShowDraggableButton = componentEntry.ShowEditModeOption = false; //add observer to list ObserversList.Add(componentEntry); return(componentEntry); }
public void ClearObservers() { ComponentTemplatesList.ForEach(x => x.ClearObservers()); ObserversList.ForEach(AssetsPath.DestroyAsset); ObserversList.Clear(); }
private void OnComponentChanged(ListChangeType listChangeType, int i1, int i2) { switch (listChangeType) { //--------------------------------------------------------------------------------------------------------------------- case ListChangeType.Add: ComponentTemplatesList.Add(new EntryComponentTemplate(TemplateInstance.Componets[i1])); ObserversList.ForEach(x => x.Componets.Add(ComponentTemplatesList[ComponentTemplatesList.Count - 1].AddObserver())); TemplateInstance.Componets[i1].OnEditModeModified += () => ApplyComponentToObservers(TemplateInstance.Componets.IndexOf(TemplateInstance.Componets[i1])); break; //--------------------------------------------------------------------------------------------------------------------- case ListChangeType.Duplicate: ComponentTemplatesList.Insert(i1 + 1, new EntryComponentTemplate(TemplateInstance.Componets[i1 + 1])); ObserversList.ForEach(x => x.Componets.Insert(i1 + 1, ComponentTemplatesList[i1 + 1].AddObserver())); TemplateInstance.Componets[i1].OnEditModeModified += () => ApplyComponentToObservers(TemplateInstance.Componets.IndexOf(TemplateInstance.Componets[i1])); break; //--------------------------------------------------------------------------------------------------------------------- case ListChangeType.Remove: if (ComponentTemplatesList.Count == 0) { goto case ListChangeType.Clear; } ComponentTemplatesList[i1].ClearObservers(); //remove component from entry observers ObserversList.ForEach(x => { x.Componets.RemoveAt(i1); }); //remove component from template ComponentTemplatesList.RemoveAt(i1); break; //--------------------------------------------------------------------------------------------------------------------- case ListChangeType.Clear: foreach (var entryComponent in ComponentTemplatesList) { entryComponent.ClearObservers(); } ComponentTemplatesList.Clear(); ObserversList.ForEach(x => { x.Componets.Clear(); }); break; //--------------------------------------------------------------------------------------------------------------------- case ListChangeType.Reorder: var temp = ComponentTemplatesList[i1]; ComponentTemplatesList[i1] = ComponentTemplatesList[i2]; ComponentTemplatesList[i2] = temp; foreach (var observer in ObserversList) { var temp2 = observer.Componets[i1]; observer.Componets[i1] = observer.Componets[i2]; observer.Componets[i2] = temp2; } break; //--------------------------------------------------------------------------------------------------------------------- case ListChangeType.None: case ListChangeType.DataChanged: default: break; //--------------------------------------------------------------------------------------------------------------------- } }