2025-07-30 07:30:00 +07:00
|
|
|
namespace StitchATon2.Domain;
|
|
|
|
|
|
|
|
|
|
public class GridSection
|
|
|
|
|
{
|
|
|
|
|
public TileManager TileManager { get; }
|
|
|
|
|
|
|
|
|
|
public int Width { get; }
|
|
|
|
|
public int Height { get; }
|
|
|
|
|
public int OffsetX { get; }
|
|
|
|
|
public int OffsetY { get; }
|
|
|
|
|
|
|
|
|
|
public Tile Origin { get; }
|
|
|
|
|
|
|
|
|
|
public GridSection(
|
|
|
|
|
TileManager tileManager,
|
|
|
|
|
string coordinatePair,
|
|
|
|
|
float cropX,
|
|
|
|
|
float cropY,
|
|
|
|
|
float cropWidth,
|
|
|
|
|
float cropHeight)
|
|
|
|
|
{
|
|
|
|
|
TileManager = tileManager;
|
|
|
|
|
var config = tileManager.Configuration;
|
|
|
|
|
|
|
|
|
|
var (tile0, tile1) = tileManager.GetTilePair(coordinatePair);
|
|
|
|
|
|
|
|
|
|
var (col0, col1) = tile0.Column < tile1.Column
|
|
|
|
|
? (tile0.Column, tile1.Column)
|
|
|
|
|
: (tile1.Column, tile0.Column);
|
|
|
|
|
|
|
|
|
|
var (row0, row1) = tile0.Row < tile1.Row
|
|
|
|
|
? (tile0.Row, tile1.Row)
|
|
|
|
|
: (tile1.Row, tile0.Row);
|
|
|
|
|
|
|
|
|
|
var gridWidth = (col1 - col0 + 1) * config.Width;
|
|
|
|
|
var gridHeight = (row1 - row0 + 1) * config.Height;
|
|
|
|
|
|
|
|
|
|
var x0 = (int)(gridWidth * cropX);
|
|
|
|
|
var y0 = (int)(gridHeight * cropY);
|
|
|
|
|
var x1 = (int)(gridWidth * (cropWidth + cropX));
|
|
|
|
|
var y1 = (int)(gridHeight * (cropHeight + cropY));
|
|
|
|
|
|
|
|
|
|
Width = x1 - x0;
|
|
|
|
|
Height = y1 - y0;
|
|
|
|
|
|
|
|
|
|
(var columnOffset, OffsetX) = Math.DivRem(x0, config.Width);
|
|
|
|
|
(var rowOffset, OffsetY) = Math.DivRem(y0, config.Height);
|
|
|
|
|
|
|
|
|
|
Origin = tileManager.GetTile(col0 + columnOffset, row0 + rowOffset);
|
2025-08-01 09:51:39 +07:00
|
|
|
Console.Write($"Origin: {Origin.Coordinate} ({Origin.Column}, {Origin.Row}) ");
|
|
|
|
|
Console.Write($"Tile offset: [{columnOffset} {rowOffset}] ");
|
|
|
|
|
Console.Write($"Pixel offset: [{OffsetX} {OffsetY}] ");
|
|
|
|
|
Console.Write($"Size: [{Width}x{Height}]");
|
|
|
|
|
Console.WriteLine();
|
2025-07-30 07:30:00 +07:00
|
|
|
}
|
|
|
|
|
}
|