public void AddCell(Vector2i cellInGroup) { Vector2i cell = cellInGroup + groupPosition; Vector2i position = groupPosition + cellInGroup; SampledData2i data = options.ImageSampler.Sample(options.Image, cell); int minusXres_x1y0 = options.ImageSampler.SampleX1Y0(options.Image, new Vector2i(cell.x - 1, cell.y - 0)); int minusXres_x1y1 = options.ImageSampler.SampleX1Y1(options.Image, new Vector2i(cell.x - 1, cell.y - 0)); int minusYres_x0y1 = options.ImageSampler.SampleX0Y1(options.Image, new Vector2i(cell.x - 0, cell.y - 1)); int minusYres_x1y1 = options.ImageSampler.SampleX1Y1(options.Image, new Vector2i(cell.x - 0, cell.y - 1)); // Debug.Log($"{minusXres_x1y0} {minusXres_x1y1}"); var pos_x0y0 = new Vector3i(position.x, position.y, data.x0y0); var pos_x0y1 = new Vector3i(position.x, position.y + 1, data.x0y1); var pos_x1y0 = new Vector3i(position.x + 1, position.y, data.x1y0); var pos_x1y1 = new Vector3i(position.x + 1, position.y + 1, data.x1y1); var pos_x0y0_lowerY = new Vector3i(position.x, position.y, minusXres_x1y0); var pos_x0y1_lowerY = new Vector3i(position.x, position.y + 1, minusXres_x1y1); var pos_x0y0_lowerX = new Vector3i(position.x, position.y, minusYres_x0y1); var pos_x1y0_lowerX = new Vector3i(position.x + 1, position.y, minusYres_x1y1); mesh.AddQuad(cellInGroup, pos_x0y0, pos_x0y1, pos_x1y0, pos_x1y1, IsFlipped(data)); mesh.AddWallY(cellInGroup, pos_x0y0, pos_x0y1, pos_x0y1_lowerY, pos_x0y0_lowerY); mesh.AddWallX(cellInGroup, pos_x1y0, pos_x0y0, pos_x0y0_lowerX, pos_x1y0_lowerX); }
public SampledData2i Process(SampledData2i sampleData) { int height = sampleData.Max - 1; SampledData2i normalizedHeightData = new SampledData2i(Math.Max(sampleData.x0y0 - height, -1), Math.Max(sampleData.x0y1 - height, -1), Math.Max(sampleData.x1y0 - height, -1), Math.Max(sampleData.x1y1 - height, -1)); SampledData2i choosenTemplateTile = TileMap[normalizedHeightData]; return(choosenTemplateTile + height); }
private bool IsFlipped(SampledData2i sampleData) { var difMain = Mathf.Abs(sampleData.x0y0 - sampleData.x1y1); var difMinor = Mathf.Abs(sampleData.x1y0 - sampleData.x0y1); bool flip; if (difMain == difMinor) { var sumMain = sampleData.x0y0 + sampleData.x1y1; var sumMinor = sampleData.x1y0 + sampleData.x0y1; flip = sumMain < sumMinor; } else { flip = difMain < difMinor; } return(flip); }