OBB OBB::FromString(const char *str, const char **outEndStr) { assume(str); if (!str) return OBB(vec::nan, vec::nan, vec::nan, vec::nan, vec::nan); OBB o; MATH_SKIP_WORD(str, "OBB("); MATH_SKIP_WORD(str, "Pos:("); o.pos = PointVecFromString(str, &str); MATH_SKIP_WORD(str, " Halfsize:("); o.r = DirVecFromString(str, &str); MATH_SKIP_WORD(str, " X:("); o.axis[0] = DirVecFromString(str, &str); MATH_SKIP_WORD(str, " Y:("); o.axis[1] = DirVecFromString(str, &str); MATH_SKIP_WORD(str, " Z:("); o.axis[2] = DirVecFromString(str, &str); if (outEndStr) *outEndStr = str; return o; }
Line Line::FromString(const char *str, const char **outEndStr) { assume(str); if (!str) return Line(vec::nan, vec::nan); Line l; MATH_SKIP_WORD(str, "Line("); MATH_SKIP_WORD(str, "Pos:("); l.pos = PointVecFromString(str, &str); MATH_SKIP_WORD(str, " Dir:("); l.dir = DirVecFromString(str, &str); if (outEndStr) *outEndStr = str; return l; }
Ray Ray::FromString(const char *str, const char **outEndStr) { assume(str); if (!str) return Ray(vec::nan, vec::nan); Ray r; MATH_SKIP_WORD(str, "Ray("); MATH_SKIP_WORD(str, "Pos:("); r.pos = PointVecFromString(str, &str); MATH_SKIP_WORD(str, " Dir:("); r.dir = DirVecFromString(str, &str); if (outEndStr) *outEndStr = str; return r; }
Plane Plane::FromString(const char *str, const char **outEndStr) { assume(str); if (!str) return Plane(vec::nan, FLOAT_NAN); Plane p; MATH_SKIP_WORD(str, "Plane("); MATH_SKIP_WORD(str, "Normal:("); p.normal = DirVecFromString(str, &str); MATH_SKIP_WORD(str, " d:"); p.d = DeserializeFloat(str, &str); if (outEndStr) *outEndStr = str; return p; }