private static IPanelGroupElement Deserialize(DynamicPanelsCanvas canvas, ISerializedElement element) { if (element == null) { return(null); } if (element is SerializedDummyPanel) { return(canvas.Internal.DummyPanel); } if (element is SerializedPanel) { SerializedPanel serializedPanel = (SerializedPanel)element; Panel panel = null; SerializedPanelTab[] tabs = serializedPanel.tabs; for (int i = 0; i < tabs.Length; i++) { PanelTab tab; if (!PanelNotificationCenter.TryGetTab(tabs[i].id, out tab)) { continue; } if (panel == null) { panel = tab.Detach(); canvas.UnanchoredPanelGroup.AddElement(panel); } else { panel.AddTab(tab); } //if( tab != null ) //{ // tab.MinSize = tabs[i].minSize; // tab.Label = tabs[i].label; //} } if (panel != null) { if (serializedPanel.activeTab < tabs.Length) { int activeTabIndex = panel.GetTabIndex(tabs[serializedPanel.activeTab].id); if (activeTabIndex >= 0) { panel.ActiveTab = activeTabIndex; } } if (serializedPanel is SerializedUnanchoredPanel) { SerializedUnanchoredPanel unanchoredPanel = (SerializedUnanchoredPanel)serializedPanel; panel.RectTransform.anchoredPosition = unanchoredPanel.position; panel.gameObject.SetActive(unanchoredPanel.active); } panel.FloatingSize = serializedPanel.floatingSize; } return(panel); } if (element is SerializedPanelGroup) { SerializedPanelGroup serializedPanelGroup = (SerializedPanelGroup)element; ISerializedElement[] children = serializedPanelGroup.children; if (children == null || children.Length == 0) { return(null); } PanelGroup panelGroup = new PanelGroup(canvas, serializedPanelGroup.horizontal ? Direction.Right : Direction.Top); for (int i = 0; i < children.Length; i++) { if (children[i] == null) { continue; } IPanelGroupElement childElement = Deserialize(canvas, children[i]); if (childElement != null) { panelGroup.AddElement(childElement); sizesHolder.Add(new GroupElementSizeHolder(childElement, children[i].size)); } } if (panelGroup.Count > 0) { return(panelGroup); } } return(null); }
private static ISerializedElement Serialize(IPanelGroupElement element) { if (element == null) { return(null); } if (element is Panel) { Panel panel = (Panel)element; if (panel.Internal.IsDummy) { return new SerializedDummyPanel() { size = panel.Size } } ; tabsTemp.Clear(); for (int i = 0; i < panel.NumberOfTabs; i++) { PanelTab tab = panel[i]; tabsTemp.Add(new SerializedPanelTab() { id = tab.ID, //minSize = tab.MinSize, //label = tab.Label }); } if (tabsTemp.Count == 0) { return(null); } if (panel.IsDocked) { return(new SerializedPanel() { activeTab = panel.ActiveTab, tabs = tabsTemp.ToArray(), size = panel.Size, floatingSize = panel.FloatingSize }); } else { return(new SerializedUnanchoredPanel() { active = panel.gameObject.activeSelf, activeTab = panel.ActiveTab, tabs = tabsTemp.ToArray(), position = panel.Position, size = panel.Size, floatingSize = panel.Size }); } } PanelGroup panelGroup = (PanelGroup)element; ISerializedElement[] children = new ISerializedElement[panelGroup.Count]; for (int i = 0; i < panelGroup.Count; i++) { children[i] = Serialize(panelGroup[i]); } return(new SerializedPanelGroup() { horizontal = panelGroup.IsInSameDirection(Direction.Right), children = children, size = panelGroup.Size }); }