Example #1
0
    //@ Process // BuildupCurve_spline()
    public bool BuildupCurve_spline(E_TYPE_SPLINE eTypeCurve, float fDivisionWeight)
    {
        if (m_listCurvepathunit.Count > 0)
        {
            m_listPath_Spline.Clear();

            foreach (CCurvePathUnit flypathUnit in m_listCurvepathunit)
            {
                if (flypathUnit)
                {
                    m_listPath_Spline.Add(flypathUnit.getPosUnit());
                }
            }
        }

        if (m_listPath_Spline.Count < 1)
        {
            Debug.Log("Cant Buildup CurveList. no Instant Custom Point!!//");
            return(false);
        }

        float fDivisionWeight__ = -1.0f;

        if (fDivisionWeight < 0)
        {
            fDivisionWeight__ = m_fDivisionWeight_LineCurve;
        }
        else
        {
            fDivisionWeight__ = m_fDivisionWeight_LineCurve = fDivisionWeight;
        } // if(fDivisionWeight < 0)


        if (E_TYPE_SPLINE.SPLINE_NULL == eTypeCurve)
        {
            eTypeCurve = m_typeSplineCurve;

            if (E_TYPE_SPLINE.SPLINE_NULL == eTypeCurve)
            {
                eTypeCurve = DEFLT_TYPE_SPLINECURVE;
            }
        } // if (E_TYPE_SPLINE.SPLINE_NULL == eTypeCurve)

        m_typeSplineCurve = eTypeCurve;

        bool bBuildCurve = false;

        switch (m_typeSplineCurve)
        {
        case E_TYPE_SPLINE.SPLINE_ROUNDEDNONUNIFORMSPLINE:
        {
            RNS __ProcessCurve_rns = new RNS();
            foreach (Vector3 v3PntCurve in m_listPath_Spline)
            {
                __ProcessCurve_rns.AddNode(v3PntCurve);
            }

            bBuildCurve = __ProcessCurve_rns.BuildSpline_rns();
            if (false == bBuildCurve)
            {
                Debug.Log("FALSE !! __ProcessCurve_rns.BuildSpline_rns()");
                return(false);
            }

            m_ProcessCurve_Activate = __ProcessCurve_rns;
        }
        break;

        case E_TYPE_SPLINE.SPLINE_SMOOTHNONUNIFORMSPLINE:
        {
            SNS __ProcessCurve_sns = new SNS();

            foreach (Vector3 v3PntCurve in m_listPath_Spline)
            {
                __ProcessCurve_sns.AddNode(v3PntCurve);
            }

            bBuildCurve = __ProcessCurve_sns.BuildSpline_sns();
            if (false == bBuildCurve)
            {
                Debug.Log("FALSE !! __ProcessCurve_sns.BuildSpline_sns()");
                return(false);
            }

            m_ProcessCurve_Activate = __ProcessCurve_sns;
        }
        break;

        case E_TYPE_SPLINE.SPLINE_TIMEDUNIFORMSPLINE:
        {
            TNS __ProcessCurve_tns = new TNS();

            foreach (Vector3 v3PntCurve in m_listPath_Spline)
            {
                __ProcessCurve_tns.AddNode(v3PntCurve);
            }

            bBuildCurve = __ProcessCurve_tns.BuildSpline_tns();

            if (false == bBuildCurve)
            {
                Debug.Log("FALSE !! __ProcessCurve_tns.BuildSpline_tns()");
                return(false);
            }

            m_ProcessCurve_Activate = __ProcessCurve_tns;
        }
        break;

        default:
        {
            Debug.Log("m_typeSplineCurve is not valid type.");

            m_ProcessCurve_Activate = null;
            return(false);
        }
        } // switch(m_typeSplineCurve)

        int iCntTime_Division = (int)(m_ProcessCurve_Activate.m_fmaxDistance * fDivisionWeight__ * multiply_adjust_divisionWeight);

        m_arrSectionCurve = new Vector3[iCntTime_Division];

        //@ First, Last Position are we just knew.
        m_arrSectionCurve[0] = m_listPath_Spline[0];
        m_arrSectionCurve[iCntTime_Division - 1] = m_listPath_Spline[m_listPath_Spline.Count - 1];

        for (int iSeq = 1; iSeq <= iCntTime_Division - 1; ++iSeq)
        {
            float fT = (float)iSeq / (float)iCntTime_Division;

            Vector3 v3PosNew_Curve = new Vector3();
            v3PosNew_Curve          = m_ProcessCurve_Activate.GetPositionSpline(fT);
            m_arrSectionCurve[iSeq] = v3PosNew_Curve;
        }

        m_bBuildedCurve = true;

        return(true);
    } // public bool BuildupCurve_spline(E_TYPE_SPLINE eTypeCurve)