// 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)); }
// 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; }
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; }
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)); }
// 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); }
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); }