/// <summary> /// 判断excel表中是否有新增或者删除 有的话刷新对应的 /// </summary> private void Check() { List <EditorGamingMap> allGamingMaps = m_Root.m_AllGamingMaps; if (allGamingMaps == null || allGamingMaps.Count <= 0) { for (int iStar = m_PlanetAreaContainers.Count - 1; iStar >= 0; iStar--) { PlanetAreaContainer element = m_PlanetAreaContainers[iStar]; if (element == null || element.gameObject == null) { continue; } GameObject.DestroyImmediate(element.gameObject); m_PlanetAreaContainers.Remove(element); Debug.LogError("PlanetPanel 删除了:" + element.m_GamingMapId); } return; } ///判断是否有新增的 有的话添加 for (int iStar = 0; iStar < allGamingMaps.Count; iStar++) { EditorGamingMap starMapVo = allGamingMaps[iStar]; if (starMapVo == null) { continue; } PlanetAreaContainer container = ExistElement(starMapVo.gamingmapId); if (container == null) { CreatePlanetArea(starMapVo); Debug.LogError("PlanetPanel 新增了:" + starMapVo.gamingmapId); } else { container.UpdateElements(starMapVo.areaList); } } //判断是否有删除的 有的话删除 if (m_PlanetAreaContainers != null && m_PlanetAreaContainers.Count > 0) { for (int iStar = m_PlanetAreaContainers.Count - 1; iStar >= 0; iStar--) { PlanetAreaContainer element = m_PlanetAreaContainers[iStar]; if (element == null || element.gameObject == null) { continue; } uint fixedStarId = element.m_GamingMapId; EditorGamingMap vo = GetMapData(fixedStarId); if (vo == null) { GameObject.DestroyImmediate(element.gameObject); m_PlanetAreaContainers.Remove(element); Debug.LogError("PlanetPanel 删除了:" + element.m_GamingMapId); } } } }
public IEnumerator DoEditorUpdate(PlanetAreaContainer container) { m_Container = container; if (m_Resobj != null) { m_Res = m_Resobj.name; } else { m_Res = ""; } transform.localScale = Vector3.one; yield return(null); m_Trails.Clear(); TrailRenderer[] trails = GetComponentsInChildren <TrailRenderer>(); if (trails != null && trails.Length > 0) { for (int iTrail = 0; iTrail < trails.Length; iTrail++) { m_Trails.Add(trails[iTrail]); //trails[iTrail].Clear(); } } yield return(null); if (m_AreaData != null) { ulong[] childArea = m_AreaData.childrenAreaList; if (childArea != null && childArea.Length > 0) { TrailRenderer trailRender = null; for (int iChild = 0; iChild < childArea.Length; iChild++) { if (m_Trails.Count > iChild) { trailRender = m_Trails[iChild]; } else { GameObject trailObj = new GameObject("Trail_" + iChild); trailObj.transform.SetParent(transform); trailRender = trailObj.AddComponent <TrailRenderer>(); } PlanetAreaElement targetElement = m_Container.GetElement(childArea[iChild]); if (targetElement != null) { trailRender.Clear(); trailRender.startWidth = 0.3f; trailRender.AddPosition(transform.position); trailRender.AddPosition(targetElement.transform.position); trailRender.transform.position = targetElement.transform.position; } } } } }
/// <summary> /// 右键响应 /// </summary> /// <param name="instanceID"></param> /// <param name="selectionRect"></param> private void OnHierarchyGUI(int instanceID, Rect selectionRect) { if (Event.current != null && selectionRect.Contains(Event.current.mousePosition) && Event.current.button == 1 && Event.current.type <= EventType.MouseUp) { GameObject selectedGameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject; if (selectedGameObject) { StarMapEditorRoot starMapRoot = selectedGameObject.GetComponent <StarMapEditorRoot>(); if (starMapRoot != null) { RefreshStarMapRootUI(starMapRoot); } FixedStarElement starElement = selectedGameObject.GetComponent <FixedStarElement>(); if (starElement != null) { RefreshFixedStarElementUI(starElement); } StarMapMainPanel starMapMainPanel = selectedGameObject.GetComponent <StarMapMainPanel>(); if (starMapMainPanel != null) { RefreshStarMapMainPanel(starMapMainPanel); } PlanetElement planetElement = selectedGameObject.GetComponent <PlanetElement>(); if (planetElement != null) { RefreshPalnetElement(planetElement); } FixedStarPanel fixedStarPanel = selectedGameObject.GetComponent <FixedStarPanel>(); if (fixedStarPanel != null) { RefreshFixedStarPanel(fixedStarPanel); } PlanetPanel planetPanel = selectedGameObject.GetComponent <PlanetPanel>(); if (planetPanel != null) { RefreshPlanetPanel(planetPanel); } PlanetContainer planetContainer = selectedGameObject.GetComponent <PlanetContainer>(); if (planetContainer != null) { RefreshPlanetContainer(planetContainer); } PlanetAreaContainer planetAreaContainer = selectedGameObject.GetComponent <PlanetAreaContainer>(); if (planetAreaContainer != null) { RefreshPlanetAreaContainer(planetAreaContainer); } } } }
public void Open(PlanetAreaContainer areaContainer) { if (areaContainer == null) { return; } for (int iPlanet = 0; iPlanet < m_PlanetAreaContainers.Count; iPlanet++) { PlanetAreaContainer container = m_PlanetAreaContainers[iPlanet]; container.gameObject.SetActive(container == areaContainer); } }
private void CreatePlanetArea(EditorGamingMap editorData) { GameObject planetContainer = new GameObject(editorData.gamingmapName); planetContainer.SetActive(false); planetContainer.transform.SetParent(transform); planetContainer.transform.localPosition = Vector3.zero; planetContainer.transform.localScale = Vector3.one; PlanetAreaContainer planetAreaConatiner = planetContainer.AddComponent <PlanetAreaContainer>(); m_PlanetAreaContainers.Add(planetAreaConatiner); EditorArea[] areas = editorData.areaList; planetAreaConatiner.Init(this, areas, editorData.gamingmapId); }
/// <summary> /// 保存行星 /// </summary> /// <param name="planets"></param> private void SavePlanet(List <EditorPlanet> planets, int fixedStarId, List <EditorStarMapArea> areaList, EditorFixedStar fixedStar) { List <EditorGamingMap> gamingDatas = null; if (m_GamingMapDatas.TryGetValue(fixedStarId, out gamingDatas)) { PlanetContainer panelContainer = m_FixedStarPanel.GetElement(fixedStarId); if (gamingDatas != null) { for (int iGaming = 0; iGaming < gamingDatas.Count; iGaming++) { EditorGamingMap gamingData = gamingDatas[iGaming]; PlanetElement element = null; //= GetElement(gamingData.gamingmap_id); if (panelContainer != null) { element = panelContainer.GetElement(gamingData.gamingmapId); } EditorPlanet editorPlanet = new EditorPlanet(); planets.Add(editorPlanet); editorPlanet.gamingmapId = gamingData.gamingmapId; editorPlanet.gamingmapName = gamingData.gamingmapName; PlanetAreaContainer areaContainer = m_PlanetPanel.ExistElement(gamingData.gamingmapId); if (areaContainer != null) { editorPlanet.minimapSize = areaContainer.m_MiniMapSize; editorPlanet.bgmapRes = areaContainer.GetStarRes(); editorPlanet.bgmapScale = new EditorPosition2D(areaContainer.m_FixedStarScale); editorPlanet.bgmapPos = new EditorPosition2D(areaContainer.m_FixedStarPos); } if (element != null) { editorPlanet.gamingmapRes = element.m_Res; editorPlanet.position = new EditorPosition2D(element.GetPosition()); editorPlanet.scale = new EditorPosition2D(element.GetScale()); } areaList.Clear(); ulong areaId = 0; SaveArea(gamingData, areaList, ref areaId); if (areaId > 0) { fixedStar.ttGamingMapId = gamingData.gamingmapId; fixedStar.ttGamingAreaId = areaId; } editorPlanet.arealist = areaList.ToArray(); } } } }
public PlanetAreaElement GetElement(uint mapId, ulong areaId) { if (m_PlanetAreaContainers != null && m_PlanetAreaContainers.Count > 0) { for (int iArea = 0; iArea < m_PlanetAreaContainers.Count; iArea++) { PlanetAreaContainer container = m_PlanetAreaContainers[iArea]; if (container.m_GamingMapId == mapId) { return(container.GetElement(areaId)); } } } return(null); }
private void OpenPlanetAreaContainer(PlanetAreaContainer planetAreaContainer) { if (planetAreaContainer == null) { return; } CloseAllPanel(); PlanetPanel planetPanel = planetAreaContainer.m_Panel; if (planetPanel != null) { planetPanel.gameObject.SetActive(true); planetPanel.Open(planetAreaContainer); } }
public PlanetAreaContainer ExistElement(uint starId) { if (m_PlanetAreaContainers != null && m_PlanetAreaContainers.Count > 0) { for (int iFixed = 0; iFixed < m_PlanetAreaContainers.Count; iFixed++) { PlanetAreaContainer element = m_PlanetAreaContainers[iFixed]; if (element == null || element.gameObject == null) { continue; } if (element.m_GamingMapId == starId) { return(element); } } } return(null); }
public void ShowContainer(uint gamingMapId) { if (m_PlanetAreaContainers != null && m_PlanetAreaContainers.Count > 0) { for (int iContainer = 0; iContainer < m_PlanetAreaContainers.Count; iContainer++) { PlanetAreaContainer container = m_PlanetAreaContainers[iContainer]; if (container.m_GamingMapId == gamingMapId) { container.gameObject.SetActive(true); Selection.activeGameObject = container.gameObject; } else { container.gameObject.SetActive(false); } //container.gameObject.SetActive(container.m_GamingMapId == gamingMapId); } } }
public IEnumerator DoEditorUpdate(StarMapEditorRoot root) { m_Root = root; if (m_RectTrans == null) { m_RectTrans = GetComponent <RectTransform>(); } if (m_RectTrans != null) { m_RectTrans.anchoredPosition = Vector2.zero; } yield return(null); m_PlanetAreaContainers.Clear(); PlanetAreaContainer[] containers = GetComponentsInChildren <PlanetAreaContainer>(true); if (containers != null && containers.Length > 0) { for (int iContainer = 0; iContainer < containers.Length; iContainer++) { m_PlanetAreaContainers.Add(containers[iContainer]); } } yield return(null); if (m_PlanetAreaContainers != null && m_PlanetAreaContainers.Count > 0) { for (int iPlanet = 0; iPlanet < m_PlanetAreaContainers.Count; iPlanet++) { PlanetAreaContainer container = m_PlanetAreaContainers[iPlanet]; if (container == null || container.gameObject == null) { continue; } IEnumerator containerEnumera = container.DoEditorUpdate(this); while (container != null && containerEnumera.MoveNext()) { yield return(null); } } } }
private void RefreshPlanetAreaContainer(PlanetAreaContainer planetAreaContainer) { if (planetAreaContainer == null) { return; } m_ContentCache.Clear(); m_ContentCache.Add(new GUIContent("打开")); Vector2 mousePosition = Event.current.mousePosition; GameObject userData = Selection.activeGameObject; int selected = -1; EditorUtility.DisplayCustomMenu(new Rect(mousePosition.x, mousePosition.y, 0, 0), m_ContentCache.ToArray(), selected, delegate(object data, string[] opt, int select) { switch (select) { case 0: OpenPlanetAreaContainer(planetAreaContainer); break; } }, userData); Event.current.Use(); }
private void HierarchyItemCB(int instanceid, Rect selectionrect) { GameObject obj = EditorUtility.InstanceIDToObject(instanceid) as GameObject; if (obj == null) { return; } bool isActive = obj.activeSelf; Transform trans = obj.transform; StarMapEditorRoot root = obj.GetComponent <StarMapEditorRoot>(); if (root != null) { DrawUI(trans, selectionrect, "编辑", Color.red); } StarMapMainPanel starMapMainPanel = obj.GetComponent <StarMapMainPanel>(); if (starMapMainPanel != null) { DrawUI(trans, selectionrect, "编辑星图", isActive ? Color.yellow : Color.red); } FixedStarPanel fixedStarPanel = obj.GetComponent <FixedStarPanel>(); if (fixedStarPanel != null) { DrawUI(trans, selectionrect, "编辑恒星", isActive ? Color.yellow : Color.red); } PlanetPanel planetPanel = obj.GetComponent <PlanetPanel>(); if (planetPanel != null) { DrawUI(trans, selectionrect, "编辑行星", isActive ? Color.yellow : Color.red); } FixedStarElement fixedStarElement = obj.GetComponent <FixedStarElement>(); if (fixedStarElement != null) { DrawUI(trans, selectionrect, "恒星", Color.red); } PlanetContainer planetContainer = obj.GetComponent <PlanetContainer>(); if (planetContainer != null) { DrawUI(trans, selectionrect, "行星组", isActive ? Color.yellow : Color.red); } PlanetElement planetElement = obj.GetComponent <PlanetElement>(); if (planetElement != null) { DrawUI(trans, selectionrect, "行星", Color.red); } PlanetAreaContainer planetAreaContainer = obj.GetComponent <PlanetAreaContainer>(); if (planetAreaContainer != null) { DrawUI(trans, selectionrect, "区域组", isActive ? Color.yellow : Color.red); } PlanetAreaElement planetAreaElement = obj.GetComponent <PlanetAreaElement>(); if (planetAreaElement != null) { DrawUI(trans, selectionrect, "区域", Color.blue); } }