コード例 #1
0
 // Token: 0x0600003B RID: 59 RVA: 0x00003FEC File Offset: 0x000021EC
 private static int _amTrailCalcSplinePos(NNS_VECTOR[] Pos, NNS_VECTOR[] Dir, AppMain.AMS_TRAIL_PARTS pNPP, AppMain.AMS_TRAIL_PARTS pNP, AppMain.AMS_TRAIL_PARTS pNow, AppMain.AMS_TRAIL_PARTS pNext, float len, int MaxComp)
 {
     AppMain.AMTRS_FC_PARAM amtrs_FC_PARAM = new AppMain.AMTRS_FC_PARAM();
     amtrs_FC_PARAM.m_flag = 0U;
     if (pNPP != null)
     {
         amtrs_FC_PARAM.m_x[0] = pNPP.pos.x;
         amtrs_FC_PARAM.m_y[0] = pNPP.pos.y;
         amtrs_FC_PARAM.m_z[0] = pNPP.pos.z;
     }
     else
     {
         amtrs_FC_PARAM.m_flag |= 1U;
     }
     amtrs_FC_PARAM.m_x[1] = pNP.pos.x;
     amtrs_FC_PARAM.m_y[1] = pNP.pos.y;
     amtrs_FC_PARAM.m_z[1] = pNP.pos.z;
     amtrs_FC_PARAM.m_x[2] = pNow.pos.x;
     amtrs_FC_PARAM.m_y[2] = pNow.pos.y;
     amtrs_FC_PARAM.m_z[2] = pNow.pos.z;
     if (pNext != null)
     {
         amtrs_FC_PARAM.m_x[3] = pNext.pos.x;
         amtrs_FC_PARAM.m_y[3] = pNext.pos.y;
         amtrs_FC_PARAM.m_z[3] = pNext.pos.z;
     }
     else
     {
         amtrs_FC_PARAM.m_flag |= 2U;
     }
     amtrs_FC_PARAM.m_flag |= 512U;
     if (pNPP != null)
     {
         amtrs_FC_PARAM.m_Dx[0] = pNPP.dir.x;
         amtrs_FC_PARAM.m_Dy[0] = pNPP.dir.y;
         amtrs_FC_PARAM.m_Dz[0] = pNPP.dir.z;
     }
     else
     {
         amtrs_FC_PARAM.m_flag |= 1U;
     }
     amtrs_FC_PARAM.m_Dx[1] = pNP.dir.x;
     amtrs_FC_PARAM.m_Dy[1] = pNP.dir.y;
     amtrs_FC_PARAM.m_Dz[1] = pNP.dir.z;
     amtrs_FC_PARAM.m_Dx[2] = pNow.dir.x;
     amtrs_FC_PARAM.m_Dy[2] = pNow.dir.y;
     amtrs_FC_PARAM.m_Dz[2] = pNow.dir.z;
     if (pNext != null)
     {
         amtrs_FC_PARAM.m_Dx[3] = pNext.dir.x;
         amtrs_FC_PARAM.m_Dy[3] = pNext.dir.y;
         amtrs_FC_PARAM.m_Dz[3] = pNext.dir.z;
     }
     else
     {
         amtrs_FC_PARAM.m_flag |= 2U;
     }
     amtrs_FC_PARAM.m_flag |= 512U;
     return(AppMain._amTrailCalcSplinePos(Pos, Dir, amtrs_FC_PARAM, len, MaxComp));
 }
コード例 #2
0
    // Token: 0x0600003D RID: 61 RVA: 0x000043A4 File Offset: 0x000025A4
    private static void _amTrailCalcSpline(AppMain.AMTRS_FC_PARAM param, float[] P)
    {
        float num;
        float num2;

        switch (param.m_flag & 3U)
        {
        case 1U:
            num  = (P[2] - P[1]) / 4f;
            num2 = (P[3] - P[1]) / 1f;
            break;

        case 2U:
            num  = (P[2] - P[0]) / 1f;
            num2 = (P[2] - P[1]) / 4f;
            break;

        default:
            num  = (P[2] - P[0]) / 2f;
            num2 = (P[3] - P[1]) / 2f;
            break;
        }
        param.m_CalcParam.x = 2f * P[1] - 2f * P[2] + num + num2;
        param.m_CalcParam.y = -3f * P[1] + 3f * P[2] - 2f * num - num2;
        param.m_CalcParam.z = num;
        param.m_CalcParam.w = P[1];
        param.m_flag       |= 256U;
    }
コード例 #3
0
ファイル: AmTrail.cs プロジェクト: uwx/Sonic4Episode1
    private static void _amTrailCalcSpline(AppMain.AMTRS_FC_PARAM param, float[] P)
    {
        float num1;
        float num2;

        switch (param.m_flag & 3U)
        {
        case 1:
            num1 = (float)(((double)P[2] - (double)P[1]) / 4.0);
            num2 = (float)(((double)P[3] - (double)P[1]) / 1.0);
            break;

        case 2:
            num1 = (float)(((double)P[2] - (double)P[0]) / 1.0);
            num2 = (float)(((double)P[2] - (double)P[1]) / 4.0);
            break;

        default:
            num1 = (float)(((double)P[2] - (double)P[0]) / 2.0);
            num2 = (float)(((double)P[3] - (double)P[1]) / 2.0);
            break;
        }
        param.m_CalcParam.x = (float)(2.0 * (double)P[1] - 2.0 * (double)P[2]) + num1 + num2;
        param.m_CalcParam.y = (float)(-3.0 * (double)P[1] + 3.0 * (double)P[2] - 2.0 * (double)num1) - num2;
        param.m_CalcParam.z = num1;
        param.m_CalcParam.w = P[1];
        param.m_flag       |= 256U;
    }
コード例 #4
0
ファイル: AmTrail.cs プロジェクト: uwx/Sonic4Episode1
    private static float _amTrailGetValue(AppMain.AMTRS_FC_PARAM param, float t)
    {
        float num = 0.0f;

        if (((int)param.m_flag & 256) == 0)
        {
            return(num);
        }
        AppMain.NNS_VECTOR4D calcParam = param.m_CalcParam;
        return((float)((double)t * (double)t * (double)t * (double)calcParam.x + (double)t * (double)t * (double)calcParam.y + (double)t * (double)calcParam.z));
    }
コード例 #5
0
    // Token: 0x0600003E RID: 62 RVA: 0x000044A8 File Offset: 0x000026A8
    private static float _amTrailGetValue(AppMain.AMTRS_FC_PARAM param, float t)
    {
        float result = 0f;

        if ((param.m_flag & 256U) == 0U)
        {
            return(result);
        }
        AppMain.NNS_VECTOR4D calcParam = param.m_CalcParam;
        return(t * t * t * calcParam.x + t * t * calcParam.y + t * calcParam.z);
    }
コード例 #6
0
ファイル: AmTrail.cs プロジェクト: uwx/Sonic4Episode1
    private static int _amTrailCalcSplinePos(
        AppMain.NNS_VECTOR[] pos,
        AppMain.NNS_VECTOR[] dir,
        AppMain.AMTRS_FC_PARAM FcWk,
        float len,
        int MaxComp)
    {
        int num = (int)AppMain.amClamp((float)(int)len, 0.0f, (float)MaxComp);

        AppMain._amTrailCalcSpline(FcWk, FcWk.m_x);
        for (int index = 0; index < num; ++index)
        {
            float t = (float)(index + 1) / (float)(num + 1);
            pos[index].x = AppMain._amTrailGetValue(FcWk, t);
        }
        AppMain._amTrailCalcSpline(FcWk, FcWk.m_y);
        for (int index = 0; index < num; ++index)
        {
            float t = (float)(index + 1) / (float)(num + 1);
            pos[index].y = AppMain._amTrailGetValue(FcWk, t);
        }
        AppMain._amTrailCalcSpline(FcWk, FcWk.m_z);
        for (int index = 0; index < num; ++index)
        {
            float t = (float)(index + 1) / (float)(num + 1);
            pos[index].z = AppMain._amTrailGetValue(FcWk, t);
        }
        AppMain._amTrailCalcSpline(FcWk, FcWk.m_Dx);
        for (int index = 0; index < num; ++index)
        {
            float t = (float)(index + 1) / (float)(num + 1);
            dir[index].x = AppMain._amTrailGetValue(FcWk, t);
        }
        AppMain._amTrailCalcSpline(FcWk, FcWk.m_Dy);
        for (int index = 0; index < num; ++index)
        {
            float t = (float)(index + 1) / (float)(num + 1);
            dir[index].y = AppMain._amTrailGetValue(FcWk, t);
        }
        AppMain._amTrailCalcSpline(FcWk, FcWk.m_Dz);
        for (int index = 0; index < num; ++index)
        {
            float t = (float)(index + 1) / (float)(num + 1);
            dir[index].z = AppMain._amTrailGetValue(FcWk, t);
        }
        return(num);
    }