Files
back_cantanBuilding/Assets/Scripts/HexGrid/MapHelper/HexUtils.cs
2026-05-26 16:15:54 +08:00

72 lines
2.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections.Generic;
using UnityEngine;
namespace HexGrid.MapHelper
{
public static class HexUtils
{
public static readonly Vector2Int[] neighbors =
{
new Vector2Int(1, 0),
new Vector2Int(+1, 0),
new Vector2Int(+1, -1),
new Vector2Int(0, -1),
new Vector2Int(-1, 0),
new Vector2Int(-1, +1),
new Vector2Int(0, +1)
};
public static Vector3 DetermineTileSize(GameObject tileObject,out Bounds bounds)
{
var meshFilter = tileObject.GetComponentInChildren<MeshFilter>(true);
bounds = meshFilter.sharedMesh.bounds;
return new Vector3(bounds.size.x, 0,bounds.size.y);
}
// 构建地块Id
public static string MakeTileId(Vector2Int tileCoords)
{
var x = tileCoords.x;
var y = tileCoords.y;
return $"tile:({x},{y})";
}
// 通过id解析地块
public static Vector2Int ParseTileId(string tileString)
{
const string prefix = "tile:";
if (string.IsNullOrEmpty(tileString))
return Vector2Int.zero;
// 检查是否以 "tile:" 开头
if (!tileString.StartsWith(prefix))
return Vector2Int.zero;
int startIndex = prefix.Length;
int endIndex = tileString.Length - 1;
if (endIndex <= startIndex)
return Vector2Int.zero;
var coordsPart = tileString.Substring(startIndex,endIndex);
var coords = coordsPart.Split(',');
if (coords.Length != 2)
return Vector2Int.zero;
// 尝试解析 x 和 y 坐标
if (int.TryParse(coords[0].Trim(), out var x) &&
int.TryParse(coords[1].Trim(), out var y))
{
return new Vector2Int(x, y);
}
return Vector2Int.zero;
}
// 获得当前模块的邻接Tile
public static List<Vector2Int> GetNeighborList(HexTile tile)
{
var list = new List<Vector2Int>();
foreach (var neighbor in neighbors)
{
var x = tile.tileCoords.x + neighbor.x;
var y = tile.tileCoords.y + neighbor.y;
list.Add(new Vector2Int(x,y));
}
return list;
}
}
}