Files
2026-07-13 13:13:17 +08:00

52 lines
1.3 KiB
C#

using T3.Core.DataTypes.Vector;
namespace T3.Editor.Gui.Windows.Exploration;
public struct GridCell
{
public int X;
public int Y;
public GridCell(int x, int y)
{
X = x;
Y = y;
}
public static GridCell operator +(GridCell a, GridCell b)
{
return new GridCell(a.X + b.X, a.Y + b.Y);
}
public static GridCell operator +(GridCell a, Int2 b)
{
return new GridCell(a.X + b.Width, a.Y + b.Height);
}
public bool IsWithinGrid()
{
return X > 0 && X < VariationGridSize && Y > 0 && Y < VariationGridSize;
}
public static GridCell[] BuildSortedOffsets()
{
var offsets = new List<GridCell>();
for (var x = -VariationGridSize; x < VariationGridSize; x++)
{
for (var y = -VariationGridSize; y < VariationGridSize; y++)
{
offsets.Add(new GridCell(x, y));
}
}
offsets.Sort((a, b) => (a.X * a.X + a.Y * a.Y)
- (b.X * b.X + b.Y * b.Y));
return offsets.ToArray();
}
public int GridIndex => Y * VariationGridSize + X;
public static GridCell Center = new(VariationGridSize / 2, VariationGridSize / 2);
public const int VariationGridSize = 100;
}