|
|
|
@ -11,8 +11,9 @@ namespace UltraCombos |
|
|
|
public class DroppingPaint : MonoBehaviour |
|
|
|
public class DroppingPaint : MonoBehaviour |
|
|
|
{ |
|
|
|
{ |
|
|
|
[SerializeField] private float size = 1; |
|
|
|
[SerializeField] private float size = 1; |
|
|
|
[SerializeField] private int segments = 16; |
|
|
|
[SerializeField, Min(8)] private int segments = 16; |
|
|
|
[SerializeField] private float smooth = 3f; |
|
|
|
[SerializeField] private float smooth = 3f; |
|
|
|
|
|
|
|
[SerializeField] private Vector2 distanceMinMax = new Vector2(1, 2); |
|
|
|
[SerializeField] private bool isDrop = false; |
|
|
|
[SerializeField] private bool isDrop = false; |
|
|
|
[SerializeField] private bool isClear = false; |
|
|
|
[SerializeField] private bool isClear = false; |
|
|
|
|
|
|
|
|
|
|
|
@ -59,12 +60,48 @@ namespace UltraCombos |
|
|
|
}).ToList(); |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
|
|
|
|
var center = new Vector2(px, py); |
|
|
|
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) |
|
|
|
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++) |
|
|
|
for (int i = 0; i < points.Count; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
points[i] = ApplyPaintDrop(points[i], center, r); |
|
|
|
points[i] = ApplyPaintDrop(points[i], center, r); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
index++; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
paints.Add(circle); |
|
|
|
paints.Add(circle); |
|
|
|
@ -88,6 +125,8 @@ namespace UltraCombos |
|
|
|
|
|
|
|
|
|
|
|
var dh = 1f / smoothedPaints.Count; |
|
|
|
var dh = 1f / smoothedPaints.Count; |
|
|
|
var h = 0f; |
|
|
|
var h = 0f; |
|
|
|
|
|
|
|
var minDist = size / segments * distanceMinMax.x; |
|
|
|
|
|
|
|
var maxDist = size / segments * distanceMinMax.y; |
|
|
|
foreach (var points in smoothedPaints) |
|
|
|
foreach (var points in smoothedPaints) |
|
|
|
{ |
|
|
|
{ |
|
|
|
using var col = new Handles.DrawingScope(Color.HSVToRGB(h, 0.7f, 0.8f)); |
|
|
|
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.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; |
|
|
|
h += dh; |
|
|
|
} |
|
|
|
} |
|
|
|
|