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; } } } } }
public void UpdateElements(EditorArea[] areas) { if (areas == null || areas.Length <= 0) { if (m_PlanetAreas != null && m_PlanetAreas.Count > 0) { for (int iPlanet = m_PlanetAreas.Count - 1; iPlanet >= 0; iPlanet--) { PlanetAreaElement areaElement = m_PlanetAreas[iPlanet]; if (areaElement != null) { if (areaElement.m_AreaData != null) { Debug.LogError("PlanetAreaContainer " + m_GamingMapId + " 删除了 " + areaElement.m_AreaData.areaId); } m_PlanetAreas.Remove(areaElement); GameObject.DestroyImmediate(areaElement.gameObject); } } } return; } for (int iArea = 0; iArea < areas.Length; iArea++) { EditorArea editorArea = areas[iArea]; PlanetAreaElement element = GetElement(editorArea.areaId); if (element == null) { CreateElement(editorArea, null); Debug.LogError("PlanetAreaContainer " + m_GamingMapId + " 新增了 " + editorArea.areaId); } else { element.Init(editorArea, null); } } if (m_PlanetAreas != null && m_PlanetAreas.Count > 0) { for (int iPlanet = m_PlanetAreas.Count - 1; iPlanet >= 0; iPlanet--) { PlanetAreaElement areaElement = m_PlanetAreas[iPlanet]; EditorArea editorArea = GetArea(areaElement.m_AreaData.areaId, areas); if (editorArea == null) { if (areaElement.m_AreaData != null) { Debug.LogError("PlanetAreaContainer " + m_GamingMapId + " 删除了 " + areaElement.m_AreaData.areaId); } m_PlanetAreas.Remove(areaElement); GameObject.DestroyImmediate(areaElement.gameObject); } } } }
public PlanetAreaElement GetElement(ulong areaId) { if (m_PlanetAreas != null && m_PlanetAreas.Count > 0) { for (int iPlanet = 0; iPlanet < m_PlanetAreas.Count; iPlanet++) { PlanetAreaElement element = m_PlanetAreas[iPlanet]; if (element.m_AreaData.areaId == areaId) { return(element); } } } return(null); }
private void CreateElement(EditorArea editorArea, EditorPlanet planet) { GameObject planetArea = GameObject.Instantiate(m_Panel.m_PlanetAreaElementPrefab); planetArea.SetActive(true); planetArea.transform.SetParent(transform); planetArea.transform.localPosition = Vector3.zero; PlanetAreaElement planetElement = planetArea.GetComponent <PlanetAreaElement>(); if (planetElement != null) { EditorStarMapArea starMapArea = m_Panel.m_Root.GetPreviewArea(planet, editorArea.areaId); planetElement.Init(editorArea, starMapArea); m_PlanetAreas.Add(planetElement); } }
private void SaveArea(EditorGamingMap gamingData, List <EditorStarMapArea> areaList, ref ulong areaId) { if (gamingData == null || gamingData.areaList == null || gamingData.areaList.Length <= 0) { return; } EditorArea[] editorAreas = gamingData.areaList; for (int iArea = 0; iArea < editorAreas.Length; iArea++) { EditorArea editorArea = editorAreas[iArea]; if (editorArea == null) { continue; } EditorStarMapArea starMapArea = new EditorStarMapArea(); areaList.Add(starMapArea); starMapArea.areaId = editorArea.areaId; starMapArea.areaType = editorArea.areaType; starMapArea.areaName = editorArea.areaName; PlanetAreaElement areaElement = m_PlanetPanel.GetElement(gamingData.gamingmapId, editorArea.areaId); if (areaElement != null) { starMapArea.area_res = areaElement.m_Res; starMapArea.childrenAreaList = editorArea.childrenAreaList; if (editorArea.leapList != null && editorArea.leapList.Length > 0) { starMapArea.area_leap_type = editorArea.leapList[0].leapType; } starMapArea.position = new EditorPosition2D(areaElement.GetPosition()); } if (editorArea.areaType == (int)AreaType.Titan) { if (areaId > 0) { Debug.LogError(gamingData.gamingmapName + "存在多个泰坦区域:" + editorArea.areaId); } else { areaId = editorArea.areaId; } } } }
private void RefreshMap() { float widthRate = m_MiniMapSize / m_ActMapWidth; float heightRate = m_MiniMapSize / m_ActMapHeight; if (m_PlanetAreas != null && m_PlanetAreas.Count > 0) { for (int iArea = 0; iArea < m_PlanetAreas.Count; iArea++) { PlanetAreaElement element = m_PlanetAreas[iArea]; EditorArea areaData = element.m_AreaData; if (areaData == null) { continue; } EditorPosition editorPosition = areaData.position; element.GetComponent <RectTransform>().anchoredPosition = new Vector2(editorPosition.x * widthRate, editorPosition.z * heightRate); //element.transform.position = new Vector3(editorPosition.x*widthRate- m_MiniMapWidth/2,editorPosition.z*heightRate - m_MiniMapHeight/2,0); } } if (m_MiniMap == null) { Transform miniMap = transform.Find("map"); RectTransform miniMapRect = null; if (miniMap == null) { GameObject imageObj = new GameObject("map"); imageObj.transform.SetParent(transform); Image image = imageObj.AddComponent <Image>(); image.color = new Color(1, 0, 0, 0.5f); miniMapRect = image.rectTransform; } else { miniMapRect = miniMap.GetComponent <RectTransform>(); } m_MiniMap = miniMapRect; } m_MiniMap.SetAsFirstSibling(); m_MiniMap.anchoredPosition3D = Vector3.zero; m_MiniMap.sizeDelta = m_MiniMapSize * Vector2.one; }
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); } }
private void OnEnable() { m_Target = target as PlanetAreaElement; m_AreaData = m_Target.m_AreaData; }
public IEnumerator DoEditorUpdate(PlanetPanel panel) { m_Panel = panel; transform.localPosition = Vector3.zero; yield return(null); m_PlanetAreas.Clear(); PlanetAreaElement[] elements = GetComponentsInChildren <PlanetAreaElement>(true); if (elements != null && elements.Length > 0) { for (int iElement = 0; iElement < elements.Length; iElement++) { m_PlanetAreas.Add(elements[iElement]); } } yield return(null); if (m_PlanetAreas != null && m_PlanetAreas.Count > 0) { for (int iPlanet = 0; iPlanet < m_PlanetAreas.Count; iPlanet++) { PlanetAreaElement element = m_PlanetAreas[iPlanet]; IEnumerator elementEnumera = element.DoEditorUpdate(this); while (element != null && element.gameObject != null && elementEnumera.MoveNext()) { yield return(null); } } } yield return(null); if (m_MiniMap != null) { m_MiniMap.localScale = Vector3.one; } yield return(null); Transform containerTrans = transform.Find("FixedStarContainer"); if (containerTrans == null) { GameObject fixedContainer = new GameObject("FixedStarContainer"); fixedContainer.transform.SetParent(transform); Image image = fixedContainer.AddComponent <Image>(); m_FixedStarContainer = image; } else { m_FixedStarContainer = containerTrans.GetOrAddComponent <Image>(true); } m_FixedStarContainer.rectTransform.anchoredPosition3D = m_FixedStarPos; m_FixedStarContainer.rectTransform.sizeDelta = m_FixedStarScale; m_FixedStarContainer.transform.localScale = Vector3.one; if (m_FixedStarContainer != null) { if (m_MiniMap != null) { int miniIndex = m_MiniMap.GetSiblingIndex(); m_FixedStarContainer.transform.SetSiblingIndex(miniIndex + 1); } else { m_FixedStarContainer.transform.SetSiblingIndex(0); } } yield return(null); if (m_FixedStarObj != null) { m_FixedStarRes = m_FixedStarObj.name; } else { m_FixedStarRes = ""; } //if(m_FixedStarContainer != null) //{ // int childCount = m_FixedStarContainer.transform.childCount; // if(m_FixedStarObj != null) // { // GameObject fixedStarObj = null; // if (childCount > 0) // { // fixedStarObj = m_FixedStarContainer.GetChild(0).gameObject; // if(fixedStarObj.name != m_FixedStarObj.name) // { // GameObject.DestroyImmediate(fixedStarObj); // childCount = m_FixedStarContainer.transform.childCount; // } // } // if(childCount <=0) // { // fixedStarObj = GameObject.Instantiate(m_FixedStarObj, m_FixedStarContainer); // fixedStarObj.name = m_FixedStarObj.name; // } // fixedStarObj.transform.localPosition = Vector3.zero; ; // fixedStarObj.transform.localScale = Vector3.one; // } // else // { // for (int iChild = childCount - 1; iChild >= 0; iChild--) // { // GameObject.DestroyImmediate(m_FixedStarContainer.GetChild(iChild).gameObject); // } // } //} }