コード例 #1
0
        /// <summary>
        /// 添加地图数据
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="position"></param>
        private void AddTileMapData(GridLayout gridLayout, GameObject brushTarget, Vector3Int position)
        {
            TileInfo data = new TileInfo
            {
                //tile的中心点为四个顶点的其中一个点,默认左下角,我们偏移一下保证和其他游戏对象的中心点一致,这里是还原创建Grid时的偏移,保证对象刚好在tile的中心点
                pos  = gridLayout.CellToWorld(position) + XMMapData.tileOffset3,
                ipos = position
            };

            for (int i = 0; i < cells.Length; i++)
            {
                XMTile xmtile = (XMTile)cells[i].tile;
                data.tile = xmtile;
            }
            XMMapData.AddData(brushTarget, data.pos, data);
        }
コード例 #2
0
        private void MainGUI()
        {
            if (XMMapData.TargetData == null)
            {
                GUILayout.Label("副本为空,请设置副本数据");
                return;
            }
            if (XMMapData.SourceData == null)
            {
                GUILayout.Label("源数据为空,请设置源数据");
                return;
            }
            EditorGUILayout.BeginHorizontal();
            GUILayout.BeginVertical();
            GUILayout.BeginHorizontal();
            strPopupSize = new string[XMMapData.TargetData.Data.Count];
            intPopupSize = new int[XMMapData.TargetData.Data.Count];
            for (int i = 0; i < intPopupSize.Length; i++)
            {
                intPopupSize[i] = i;
                strPopupSize[i] = (i).ToString();
            }

            EditorGUIUtility.labelWidth = 60;
            IntPopupIndex   = EditorGUILayout.IntPopup("Map ID:", IntPopupIndex, strPopupSize, intPopupSize, GUILayout.ExpandWidth(true), GUILayout.Width(150));
            XMMapData.MapID = IntPopupIndex;

            if (GUILayout.Button("-", GUILayout.Width(35)))
            {
                if (EditorUtility.DisplayDialog("提示", "确定要删除地图 【 " + IntPopupIndex + " 】 吗?", "确定", "取消"))
                {
                    XMMapData.TargetData.Data.RemoveAt(IntPopupIndex);
                    IntPopupIndex -= 1;
                    if (IntPopupIndex <= 0)
                    {
                        IntPopupIndex = 0;
                    }
                }
            }
            if (GUILayout.Button("+", GUILayout.Width(35)))
            {
                TileMapDataList list = new TileMapDataList();
                XMMapData.TargetData.Data.Add(list);

                IntPopupIndex        = XMMapData.TargetData.Data.Count - 1;
                tileMaptoolbarOption = 0;
                Transform grid = GameObject.Find("Grid").transform;
                tileMaptoolbarTexts = new string[grid.childCount];
                for (int i = 0; i < grid.childCount; i++)
                {
                    tileMaptoolbarTexts[i] = grid.GetChild(i).name;
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.Label(XMConst.CopyRight);
            GUILayout.EndVertical();

            if (GUILayout.Button("打开编辑场景", GUILayout.Height(35)))
            {
                EditorSceneManager.OpenScene("Assets/XMtileMap/Scenes/XMtileMap.unity");
            }
            if (GUILayout.Button("预 览", GUILayout.Height(35)))
            {
                if (CheckNameConflict())
                {
                    EditorUtility.DisplayDialog("提示", " Tilemap 名字冲突", "确定");
                    return;
                }
                if (EditorSceneManager.GetActiveScene().name != "XMtileMap")
                {
                    EditorUtility.DisplayDialog("提示", "请打开 XMtileMap 场景进行编辑", "确定");
                    return;
                }
                if (EditorApplication.isPlaying)
                {
                    EditorUtility.DisplayDialog("提示", "场景正在播放中,不能进行预览", "确定");
                    return;
                }
                CreateTileMap();
            }
            if (GUILayout.Button("重置副本", GUILayout.Height(35)))
            {
                if (EditorUtility.DisplayDialog("提示", "确定要重置副本吗", "确定", "取消"))
                {
                    IntPopupIndex = 0;
                    XMMapData.SaveData(XMMapData.TargetData.Data, XMMapData.SourceData.Data);
                }
            }
            if (GUILayout.Button("保存副本", GUILayout.Height(35)))
            {
                if (CheckNameConflict())
                {
                    EditorUtility.DisplayDialog("提示", " Tilemap 名字冲突", "确定");
                    return;
                }
                if (EditorUtility.DisplayDialog("提示", "确定要保存副本吗", "确定", "取消"))
                {
                    EditorUtility.SetDirty(XMMapData.TargetData);
                }
            }
            //GUI.backgroundColor = Color.green;
            if (GUILayout.Button("保存数据", GUILayout.Height(35)))
            {
                if (CheckNameConflict())
                {
                    EditorUtility.DisplayDialog("提示", " Tilemap 名字冲突", "确定");
                    return;
                }
                if (EditorUtility.DisplayDialog("提示", "确定要保存数据吗", "确定", "取消"))
                {
                    XMMapData.SaveData(XMMapData.SourceData.Data, XMMapData.TargetData.Data);
                }
            }

            //if (GUILayout.Button("保存JSON", GUILayout.Height(35)))
            //{
            //    if (CheckNameConflict())
            //    {
            //        EditorUtility.DisplayDialog("提示", " Tilemap 名字冲突", "确定");
            //        return;
            //    }
            //    if (EditorUtility.DisplayDialog("提示", "确定要保存数据吗", "确定", "取消"))
            //    {
            //        XMMapData.SaveData(XMMapData.SourceData.Data, XMMapData.TargetData.Data);
            //        XMMapData.SaveToJSON("Assets/XMtileMap/Data/SourceData.json", XMMapData.SourceData);
            //        XMMapData.SaveToJSON("Assets/XMtileMap/Data/TargetData.json", XMMapData.TargetData);
            //    }
            //}

            EditorGUILayout.EndHorizontal();
        }
コード例 #3
0
        /// <summary>
        /// 清除地图数据
        /// </summary>
        /// <param name="position"></param>
        private void ClearTileMapData(GridLayout gridLayout, GameObject brushTarget, Vector3Int position)
        {
            Vector3 pos = gridLayout.CellToWorld(position) + XMMapData.tileOffset3;

            XMMapData.ClearData(brushTarget, pos);
        }