Ejemplo n.º 1
0
    public void EnsureGradeValidity(int iStart = -1, bool bIsAddToEnd = false)
    {
        if (GSDSpline == null)
        {
            return;
        }
        GSDSplineN PrevNode = null;
        GSDSplineN NextNode = null;

        if (bIsAddToEnd && GSDSpline.GetNodeCount() > 0)
        {
            PrevNode = GSDSpline.mNodes[GSDSpline.GetNodeCount() - 1];
        }
        else
        {
            if (iStart == -1)
            {
                PrevNode = GSDSpline.GetPrevLegitimateNode(idOnSpline);
            }
            else
            {
                PrevNode = GSDSpline.GetPrevLegitimateNode(iStart);
            }
        }
        if (PrevNode == null)
        {
            return;
        }
        Vector3 tVect = transform.position;

        float tMinY1 = 0f;
        float tMinY2 = 0f;
        float tMaxY1 = 0f;
        float tMaxY2 = 0f;

        if (PrevNode != null)
        {
            PrevNode.FilterMaxGradeHeight(tVect, out tMinY1, out tMaxY1);
        }
        if (NextNode != null)
        {
            NextNode.FilterMaxGradeHeight(tVect, out tMinY2, out tMaxY2);
        }

        bool bPrevNodeGood = false;
        bool bNextNodeGood = false;

        if (tVect.y > tMinY1 && tVect.y < tMaxY1)
        {
            bPrevNodeGood = true;
        }
        if (tVect.y > tMinY2 && tVect.y < tMaxY2)
        {
            bNextNodeGood = true;
        }

        if (!bPrevNodeGood && !bNextNodeGood && PrevNode != null && NextNode != null)
        {
            float tMaxY3 = Mathf.Min(tMaxY1, tMaxY2);
            float tMinY3 = Mathf.Max(tMinY1, tMinY2);
            if (tVect.y < tMinY3)
            {
                tVect.y = tMinY3;
            }
            else if (tVect.y > tMaxY3)
            {
                tVect.y = tMaxY3;
            }
        }
        else
        {
            if (!bPrevNodeGood && PrevNode != null)
            {
                if (tVect.y < tMinY1)
                {
                    tVect.y = tMinY1;
                }
                else if (tVect.y > tMaxY1)
                {
                    tVect.y = tMaxY1;
                }
            }
            else if (!bNextNodeGood && NextNode != null)
            {
                if (tVect.y < tMinY2)
                {
                    tVect.y = tMinY2;
                }
                else if (tVect.y > tMaxY2)
                {
                    tVect.y = tMaxY2;
                }
            }
        }

        transform.position = tVect;
    }