|
|
|
@ -62,28 +62,29 @@ namespace UltraCombos |
|
|
|
var center = new Vector2(px, py); |
|
|
|
var center = new Vector2(px, py); |
|
|
|
var minDist = size / segments * distanceMinMax.x; |
|
|
|
var minDist = size / segments * distanceMinMax.x; |
|
|
|
var maxDist = size / segments * distanceMinMax.y; |
|
|
|
var maxDist = size / segments * distanceMinMax.y; |
|
|
|
var index = 0; |
|
|
|
|
|
|
|
foreach (var points in paints) |
|
|
|
for (int i = 0; i < paints.Count; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
var points = paints[i]; |
|
|
|
var pre = points.Select(p => ApplyPaintDrop(p, center, r)).ToArray(); |
|
|
|
var pre = points.Select(p => ApplyPaintDrop(p, center, r)).ToArray(); |
|
|
|
var incs = pre.Select((p, i) => |
|
|
|
var incs = pre.Select((p, k) => |
|
|
|
{ |
|
|
|
{ |
|
|
|
var dist = (p - pre[(i + 1) % pre.Length]).magnitude; |
|
|
|
var dist = (p - pre[(k + 1) % pre.Length]).magnitude; |
|
|
|
return dist < minDist ? 0 : Mathf.CeilToInt(dist / minDist); |
|
|
|
return dist < minDist ? 0 : Mathf.CeilToInt(dist / minDist); |
|
|
|
}).ToArray(); |
|
|
|
}).ToArray(); |
|
|
|
|
|
|
|
|
|
|
|
var newPoints = new List<Vector2>(); |
|
|
|
var newPoints = new List<Vector2>(); |
|
|
|
for (int i = 0; i < points.Count; i++) |
|
|
|
for (int j = 0; j < points.Count; j++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var inc = incs[i]; |
|
|
|
var inc = incs[j]; |
|
|
|
if (inc == 0) |
|
|
|
if (inc == 0) |
|
|
|
{ |
|
|
|
{ |
|
|
|
newPoints.Add(points[i]); |
|
|
|
newPoints.Add(points[j]); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
var p1 = points[i]; |
|
|
|
var p1 = points[j]; |
|
|
|
var p2 = points[(i + 1) % points.Count]; |
|
|
|
var p2 = points[(j + 1) % points.Count]; |
|
|
|
for (int k = 0; k < inc; k++) |
|
|
|
for (int k = 0; k < inc; k++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var p = Vector2.Lerp(p1, p2, (float)k / inc); |
|
|
|
var p = Vector2.Lerp(p1, p2, (float)k / inc); |
|
|
|
@ -93,15 +94,13 @@ namespace UltraCombos |
|
|
|
} |
|
|
|
} |
|
|
|
points.Clear(); |
|
|
|
points.Clear(); |
|
|
|
points.AddRange(newPoints); |
|
|
|
points.AddRange(newPoints); |
|
|
|
smoothedPaints[index].Clear(); |
|
|
|
smoothedPaints[i].Clear(); |
|
|
|
smoothedPaints[index].AddRange(newPoints); |
|
|
|
smoothedPaints[i].AddRange(newPoints); |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < points.Count; i++) |
|
|
|
for (int j = 0; j < points.Count; j++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
points[i] = ApplyPaintDrop(points[i], center, r); |
|
|
|
points[j] = ApplyPaintDrop(points[j], center, r); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
index++; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
paints.Add(circle); |
|
|
|
paints.Add(circle); |
|
|
|
@ -165,31 +164,5 @@ namespace UltraCombos |
|
|
|
var edge = c + (p - c) * (r / d + 0.002f); |
|
|
|
var edge = c + (p - c) * (r / d + 0.002f); |
|
|
|
return ApplyPaintDrop(edge, c, r); |
|
|
|
return ApplyPaintDrop(edge, c, r); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private List<Vector2> ResamplePoints(List<Vector2> points, float minSpacing, float maxSpacing) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
List<Vector2> newPoints = new List<Vector2>(); |
|
|
|
|
|
|
|
int count = points.Count; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < count; i++) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Vector2 p1 = points[i]; |
|
|
|
|
|
|
|
Vector2 p2 = points[(i + 1) % count]; |
|
|
|
|
|
|
|
float dist = Vector2.Distance(p1, p2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
newPoints.Add(p1); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (dist > maxSpacing) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int numNewPoints = Mathf.FloorToInt(dist / minSpacing); |
|
|
|
|
|
|
|
for (int j = 1; j <= numNewPoints; j++) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
float t = j / (float)(numNewPoints + 1); |
|
|
|
|
|
|
|
newPoints.Add(Vector2.Lerp(p1, p2, t)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return newPoints; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |