예제 #1
0
        /// <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);
                    }
                }
            }
        }
예제 #2
0
        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;
                        }
                    }
                }
            }
        }
예제 #3
0
        /// <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);
                    }
                }
            }
        }
예제 #4
0
 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);
     }
 }
예제 #5
0
        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);
        }
예제 #6
0
        /// <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();
                    }
                }
            }
        }
예제 #7
0
 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);
 }
예제 #8
0
        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);
            }
        }
예제 #9
0
 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);
 }
예제 #10
0
 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);
         }
     }
 }
예제 #11
0
        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);
                    }
                }
            }
        }
예제 #12
0
        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();
        }
예제 #13
0
        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);
            }
        }