Files
HX_MapEditor/Assets/Scripts/UI/UICellInfo.cs
2025-09-10 20:01:05 +08:00

152 lines
5.4 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.VFX;
using static GridSelector;
///格子信息 - 绿色块
///功能:加载格子数据,重新计算格子,显示格子,隐藏格子
public class UICellInfo : MonoBehaviour
{
public static UICellInfo Instance;
public InputField txtMapWidth;
public Text txtMapHeight;
public Text txtTotalCells;
public Text txtMoveCells;
public InputField txtCellRows;
public InputField txtCellCols;
public InputField txtCellWidth;
public InputField txtCellHeight;
public bool bMapOpened;
public Text txtSelectInfo;
private void Awake()
{
Instance = this;
}
private void Start()
{
Cleanup();
}
public int CustomMapWidth => int.Parse(txtMapWidth.text);
void Cleanup()
{
txtMapWidth.text = string.Empty;
txtMapHeight.text = string.Empty;
txtTotalCells.text = string.Empty;
txtMoveCells.text = string.Empty;
txtCellRows.text = string.Empty;
txtCellCols.text = string.Empty;
txtCellWidth.text = string.Empty;
txtCellHeight.text = string.Empty;
bMapOpened = false;
}
public void CloseMap()
{
Cleanup();
UIWindow.Instance.uiCellEditor.togEdit.isOn = false;
UIWindow.Instance.uiCellEditor.togPathTest.isOn = false;
}
public void ShowCells()
{
MapManager.Instance.ShowMapGrid();
}
public void HideCells()
{
MapManager.Instance.HideMapGrid();
}
public void ShowMapCellInfo()
{
if (MapManager.Instance.map == null || MapManager.Instance.map.selector == null)
return;
if (MapManager.Instance._curMapRegions == null) return;
txtMapWidth.text = MapManager.Instance._curMapRegions.regionRowNum.ToString();
txtMapHeight.text = MapManager.Instance._curMapRegions.regionColNum.ToString();
txtCellRows.text = MapManager.Instance.map.selector.horizontalNumber.ToString();
txtCellCols.text = MapManager.Instance.map.selector.verticalNumber.ToString();
txtTotalCells.text = MapManager.Instance.map.selector.totalNumber.ToString();
txtCellWidth.text = MapManager.widthPixel.ToString();
txtCellHeight.text = MapManager.heightPixel.ToString();
txtMoveCells.text = MapManager.Instance.map.selector.moveNum.ToString();
}
public void ShowMapWidthAndHeight(int mapId)
{
if (!MapManager.Instance.allMaps.TryGetValue(mapId.ToString(), out var mapInfo))
{
UIWindow.Instance.ShowMessage("地图不存在。。。");
return;
}
txtMapWidth.text = mapInfo.maxRow.ToString();
txtMapHeight.text = mapInfo.maxCol.ToString();
}
/// <summary>
/// 加载格子
/// </summary>
public void LoadCell()
{
MapManager.Instance.LoadMapObs(MapManager.Instance._curOpenMapId);
ShowMapCellInfo();
}
/// <summary>
/// 重新计算格子
/// </summary>
public void ReCalculateCell()
{
int oldhorizontalNumber = MapManager.Instance.map?.selector?.horizontalNumber ?? 0;
int oldverticalNumber = MapManager.Instance.map?.selector?.verticalNumber ?? 0;
var oldRendData = MapManager.Instance.map?.selector?.GetGridData();
int width = int.Parse(txtCellRows.text);
int height = int.Parse(txtCellCols.text);
float cellW = int.Parse(txtCellWidth.text) / 100.0f;
float cellH = int.Parse(txtCellHeight.text) / 100.0f;
MapManager.Instance.GenerateMap(MapManager.Instance._curOpenMapId,width * cellW, height * cellH, cellW, cellH);
var newRendData = MapManager.Instance.map?.selector?.GetGridData();
for (int i = 0; i < MapManager.Instance.map?.selector.horizontalNumber; i++)
{
for (int j = 0; j < MapManager.Instance.map?.selector.verticalNumber; j++)
{
if (i < oldhorizontalNumber && j < oldverticalNumber)
{
int oldindex = i + j * oldhorizontalNumber;
//取出老的数据
int index = MapManager.Instance.map.selector.GetIndexByXY(i, j);
newRendData[index] = oldRendData[oldindex];
}
else {//新格子
int index = MapManager.Instance.map.selector.GetIndexByXY(i, j);
newRendData[index] = new RenderData();
newRendData[index].barrier = (int)CellType.Obstacle;
}
}
}
MapManager.Instance.map.selector.RefreshPlaneRender();
ShowMapCellInfo();
}
public void Update()
{
bool isOpen = false;
do {
if (MapManager.Instance.map == null) break;
if (MapManager.Instance.map.selector == null) break;
if (MapManager.Instance.map.selector.selectedGridIndex.Count == 1)
{
int beginIndex = MapManager.Instance.map.selector.selectedGridIndex[0];
MapManager.Instance.map.selector.GetXyByIndex(beginIndex, out int x, out int y);
txtSelectInfo.text = string.Format("所选点:{0},{1} 信息:{2}", x, y, CellTypeColors.GetAreaStr((MapManager.Instance.map.selector.dataArray[beginIndex].barrier)));
isOpen = true;
}
} while (false);
txtSelectInfo.transform.parent.gameObject.SetActive(isOpen);
}
}