using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// 菱形绘制三角形算法
///
public class UnitAlgorithmRhombus : UnitAlgorithm {
public void Compute(DataPlateBaking plateBaking) {
List triangles = new List();
List vertexs = new List();
//plateBaking.grid.Loop((x, y) => {
// DataPlateVertex vertex = plateBaking.grid.Get(x, y);
// if (!vertex.isValid) { return; }
// TryGet(plateBaking.grid, x, y + 1, ref vertex.above);
// TryGet(plateBaking.grid, x, y - 1, ref vertex.below);
// TryGet(plateBaking.grid, x - 1, y, ref vertex.left);
// TryGet(plateBaking.grid, x + 1, y, ref vertex.right);
// TryGet(plateBaking.grid, x - 1, y + 1, ref vertex.leftAbove);
// TryGet(plateBaking.grid, x - 1, y - 1, ref vertex.leftBelow);
// TryGet(plateBaking.grid, x + 1, y + 1, ref vertex.rightAbove);
// TryGet(plateBaking.grid, x + 1, y - 1, ref vertex.rightBelow);
// //默认绘制左上角
// if (vertex.above != null && vertex.left != null) {
// triangles.Add(CreateDataTriangle(vertex, vertex.left, vertex.above));
// }
// //默认绘制右下角
// if (vertex.below != null && vertex.right != null) {
// triangles.Add(CreateDataTriangle(vertex, vertex.right, vertex.below));
// }
// //如果右上角点不存在,则尝试绘制右上角
// if (vertex.rightAbove == null && vertex.above != null && vertex.right != null) {
// triangles.Add(CreateDataTriangle(vertex, vertex.above, vertex.right));
// }
// //如果左下角点不存在,则尝试绘制左下角
// if (vertex.leftBelow == null && vertex.below != null && vertex.left != null) {
// triangles.Add(CreateDataTriangle(vertex, vertex.below, vertex.left));
// }
// vertexs.Add(vertex);
//});
//plateBaking.triangles = triangles;
//plateBaking.vertexs = vertexs.ToArray();
}
/// 校验性获取网格上的点
private void TryGet(GridTool grid, int x, int y, ref DataPlateVertex vertex) {
vertex = null;
if (!grid.TryGet(x, y, out DataPlateVertex data)) { return; }
if (data.isValid) { vertex = data; }
}
/// 创建三角形
private DataTriangle CreateDataTriangle(DataPlateVertex a, DataPlateVertex b, DataPlateVertex c) {
DataTriangle triangle = new DataTriangle();
triangle.b = a.position;
triangle.c = b.position;
triangle.a = c.position;
return triangle;
}
}