1#include "Game/Map/RailPart.hpp"
3#include "JSystem/JMath/JMath.hpp"
6 : mRailPartLinear(0), mRailPartBezier(0) {
9void RailPart::init(
const TVec3f &a1,
const TVec3f &a2,
const TVec3f &a3,
const TVec3f &a4) {
10 if ((!a1.epsilonEquals(a2, 0.1f)) || (a4.epsilonEquals(a3, 0.1f))) {
12 mRailPartLinear->set(a1, a4);
15 initForBezier(a1, a2, a3, a4);
19void RailPart::initForBezier(
const TVec3f &a1,
const TVec3f &a2,
const TVec3f &a3,
const TVec3f &a4) {
21 mRailPartBezier->set(a1, a2, a3, a4);
24void RailPart::calcPos(TVec3f *pOut, f32 a2)
const {
25 if (mRailPartLinear) {
26 JMAVECScaleAdd(mRailPartLinear->_C.toCVec(), mRailPartLinear->_0.toCVec(), pOut->toVec(), a2);
29 mRailPartBezier->calcPos(pOut, a2);
33void RailPart::calcVelocity(TVec3f *pOut, f32 a2)
const {
34 if (mRailPartLinear) {
35 pOut->set<f32>(mRailPartLinear->_C);
38 mRailPartBezier->calcVelocity(pOut, a2);
42f32 RailPart::getLength(f32 a1, f32 a2,
int a3)
const {
43 if (mRailPartLinear) {
44 return (mRailPartLinear->_18 * (a2 - a1));
47 return mRailPartBezier->getLength(a1, a2, a3);
50f32 RailPart::getTotalLength()
const {
51 if (mRailPartLinear) {
52 return mRailPartLinear->_18;
55 return mRailPartBezier->mLength;
58f32 RailPart::getParam(f32 a1)
const {
59 if (mRailPartLinear) {
60 return (a1 / mRailPartLinear->_18);
63 return mRailPartBezier->getParam(a1);
66f32 RailPart::getNearestParam(
const TVec3f &rPos, f32 a2)
const {
67 if (mRailPartLinear) {
68 return mRailPartLinear->getNearestParam(rPos, a2);
71 return mRailPartBezier->getNearestParam(rPos, a2);
74void LinearRailPart::set(
const TVec3f &a1,
const TVec3f &a2) {
78 _18 = C_VECMag((
const Vec *)&_C);