chore: DroppingPaint refine code

master
uc-hoba 10 months ago
parent 2d06fad671
commit 9e1fdc3c56
  1. 57
      Assets/Scripts/DroppingPaint.cs

@ -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);
@ -163,33 +162,7 @@ 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;
} }
} }
} }