コード例 #1
0
    void MergeCorner(ref List <Vector2> aPrevList, ref List <Vector2> aNextList)
    {
        if (aNextList.Count < 2 || aPrevList.Count < 2)
        {
            return;
        }

        float maxD = sharpCornerDistance;

        Vector2 pt = Ferr2D_Path.LineIntersectionPoint(aPrevList[aPrevList.Count - 2], aPrevList[aPrevList.Count - 1], aNextList[0], aNextList[1]);
        float   d1 = (pt - aPrevList[aPrevList.Count - 1]).sqrMagnitude;
        float   d2 = (pt - aNextList[0]).sqrMagnitude;

        if (d1 <= maxD * maxD)
        {
            aPrevList[aPrevList.Count - 1] = pt;
        }
        else
        {
            Vector2 tP = (pt - aPrevList[aPrevList.Count - 1]);
            tP.Normalize();
            aPrevList[aPrevList.Count - 1] += tP * maxD;
        }
        if (d2 <= maxD * maxD)
        {
            aNextList[0] = pt;
        }
        else
        {
            Vector2 tP = (pt - aNextList[0]);
            tP.Normalize();
            aNextList[0] += tP * maxD;
        }
    }