using System.Collections; using System.Collections.Generic; using UnityEngine; namespace FIMSpace.Generating { public partial class TileMeshSetup { public struct MeshShapePoint { public Vector3 p; public Vector2 normal; public Color c; /// /// If using override normal /// internal bool QuickNormalCompute(CurvePoint sampleFocus) { if (sampleFocus.overrideNormal != Vector2.zero) { normal = sampleFocus.overrideNormal; normal.y = -normal.y; if (sampleFocus.overrideNormal.magnitude < 1f) { normal *= sampleFocus.overrideNormal.magnitude; } return true; } return false; } internal void ComputeNormal(int i, float maxDivs, CurvePoint sampleFocus, CurvePoint sampleTarget, float progr, List points, float stepProgr, float splineLength) { bool quick = QuickNormalCompute(sampleFocus); if (quick) return; if (points.Count <= 1) return; stepProgr *= 0.1f; if (i == 0 || i == maxDivs - 1) { if (i == 0) { Vector2 next = CurvePoint.GetPosAt(points, progr + stepProgr, splineLength); Vector2 dir = sampleFocus.localPos - next; normal = Vector2.Perpendicular(dir.normalized); } else { Vector2 pre = CurvePoint.GetPosAt(points, 1f - stepProgr, splineLength); //sampleTarget.localPos; Vector2 dir = pre - CurvePoint.GetPosAt(points, 1f, splineLength); normal = Vector2.Perpendicular(dir.normalized); } } else { Vector2 pre = CurvePoint.GetPosAt(points, progr - stepProgr, splineLength); Vector2 next = CurvePoint.GetPosAt(points, progr + stepProgr, splineLength); Vector2 dir = pre - next; normal = Vector2.Perpendicular(dir.normalized); } } } } }