using Godot; namespace UI.TileSetEditor; public partial class TileSetEditorPanel : TileSetEditor { /// <summary> /// 是否初始化过纹理 /// </summary> public bool InitTexture { get; private set; } /// <summary> /// 纹理 /// </summary> public ImageTexture Texture { get; private set; } /// <summary> /// 纹理的Image对象 /// </summary> public Image TextureImage { get; private set; } /// <summary> /// 背景颜色 /// </summary> public Color BgColor { get; private set; } /// <summary> /// Cell 横轴数量 /// </summary> public int CellHorizontal { get; private set; } /// <summary> /// Cell 纵轴数量 /// </summary> public int CellVertical { get; private set; } /// <summary> /// 页签对象 /// </summary> public UiGrid<Tab, TileSetEditorTabData> TabGrid { get; private set; } public override void OnCreateUi() { Texture = new ImageTexture(); S_Back.Instance.Visible = PrevUi != null; S_Back.Instance.Pressed += OnBackClick; TabGrid = new UiGrid<Tab, TileSetEditorTabData>(S_Tab, typeof(TileSetEditorTabCell)); TabGrid.SetHorizontalExpand(true); TabGrid.SetCellOffset(new Vector2I(0, 5)); TabGrid.Add(new TileSetEditorTabData() { Text = "纹理", UiName = UiManager.UiNames.TileSetEditorImport, }); TabGrid.Add(new TileSetEditorTabData() { Text = "地形", UiName = UiManager.UiNames.TileSetEditorTerrain, }); TabGrid.Add(new TileSetEditorTabData() { Text = "组合", UiName = UiManager.UiNames.TileSetEditorCombination, }); } public override void OnDestroyUi() { TabGrid.Destroy(); if (Texture != null) { Texture.Dispose(); } if (TextureImage != null) { TextureImage.Dispose(); } } /// <summary> /// 初始化数据 /// </summary> public void InitData(TileSetInfo tileSetInfo) { S_Title.Instance.Text = "正在编辑:" + tileSetInfo.Name; //SetTexture(ImageTexture.CreateFromImage(Image.LoadFromFile("resource/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png"))); TabGrid.SelectIndex = 0; } /// <summary> /// 设置纹理 /// </summary> public void SetTextureData(Image image) { InitTexture = true; Texture.SetImage(image); if (TextureImage != null) { TextureImage.Dispose(); } TextureImage = image; CellHorizontal = image.GetWidth() / GameConfig.TileCellSize; CellVertical = image.GetHeight() / GameConfig.TileCellSize; //派发事件 EventManager.EmitEvent(EventEnum.OnSetTileTexture, Texture); } /// <summary> /// 设置背景颜色 /// </summary> public void SetBgColor(Color color) { BgColor = color; //派发事件 EventManager.EmitEvent(EventEnum.OnSetTileSetBgColor, color); } /// <summary> /// 将二维位置转换为索引的函数 /// </summary> public int CellPositionToIndex(Vector2I pos) { return pos.Y * CellHorizontal + pos.X; } /// <summary> /// 返回Cell的坐标是否在纹理区域内 /// </summary> public bool IsCellPositionInTexture(Vector2I cell) { return cell.X >= 0 && cell.Y >= 0 && cell.X < CellHorizontal && cell.Y < CellVertical; } //返回上一级按钮点击 private void OnBackClick() { OpenPrevUi(); } }