chore: update DroppingPaint

master
uc-hoba 10 months ago
parent c928378be4
commit 2d06fad671
  1. 53
      Assets/Scripts/DroppingPaint.cs
  2. 1
      Assets/Test-DroppingPaint.unity

@ -11,8 +11,9 @@ namespace UltraCombos
public class DroppingPaint : MonoBehaviour
{
[SerializeField] private float size = 1;
[SerializeField] private int segments = 16;
[SerializeField, Min(8)] private int segments = 16;
[SerializeField] private float smooth = 3f;
[SerializeField] private Vector2 distanceMinMax = new Vector2(1, 2);
[SerializeField] private bool isDrop = false;
[SerializeField] private bool isClear = false;
@ -59,12 +60,48 @@ namespace UltraCombos
}).ToList();
var center = new Vector2(px, py);
var minDist = size / segments * distanceMinMax.x;
var maxDist = size / segments * distanceMinMax.y;
var index = 0;
foreach (var points in paints)
{
var pre = points.Select(p => ApplyPaintDrop(p, center, r)).ToArray();
var incs = pre.Select((p, i) =>
{
var dist = (p - pre[(i + 1) % pre.Length]).magnitude;
return dist < minDist ? 0 : Mathf.CeilToInt(dist / minDist);
}).ToArray();
var newPoints = new List<Vector2>();
for (int i = 0; i < points.Count; i++)
{
var inc = incs[i];
if (inc == 0)
{
newPoints.Add(points[i]);
}
else
{
var p1 = points[i];
var p2 = points[(i + 1) % points.Count];
for (int k = 0; k < inc; k++)
{
var p = Vector2.Lerp(p1, p2, (float)k / inc);
newPoints.Add(p);
}
}
}
points.Clear();
points.AddRange(newPoints);
smoothedPaints[index].Clear();
smoothedPaints[index].AddRange(newPoints);
for (int i = 0; i < points.Count; i++)
{
points[i] = ApplyPaintDrop(points[i], center, r);
}
index++;
}
paints.Add(circle);
@ -88,6 +125,8 @@ namespace UltraCombos
var dh = 1f / smoothedPaints.Count;
var h = 0f;
var minDist = size / segments * distanceMinMax.x;
var maxDist = size / segments * distanceMinMax.y;
foreach (var points in smoothedPaints)
{
using var col = new Handles.DrawingScope(Color.HSVToRGB(h, 0.7f, 0.8f));
@ -97,7 +136,17 @@ namespace UltraCombos
}
//Handles.DrawPolyLine(points.Select(p => new Vector3(p.x, p.y, 0)).ToArray());
Handles.DrawAAConvexPolygon(points.Select(p => new Vector3(p.x, p.y, 0)).ToArray());
//Handles.DrawAAConvexPolygon(points.Select(p => new Vector3(p.x, p.y, 0)).ToArray());
for (int i = 0; i < points.Count; ++i)
{
var p1 = points[i];
var p2 = points[(i + 1) % points.Count];
var dist = (p1 - p2).magnitude;
var t = Mathf.Clamp01((dist - minDist) / (maxDist - minDist));
var c = Color.Lerp(Color.cyan, Color.magenta, t);
using var lc = new Handles.DrawingScope(c);
Handles.DrawLine(p1, p2);
}
h += dh;
}

@ -1108,6 +1108,7 @@ MonoBehaviour:
size: 4
segments: 32
smooth: 2
distanceMinMax: {x: 1.5, y: 3.5}
isDrop: 0
isClear: 0
--- !u!4 &1796365289