From 5e8277e923c5545a15bae7c740ab6afaa597a59f Mon Sep 17 00:00:00 2001 From: jackpoz Date: Fri, 22 Aug 2014 16:58:23 +0200 Subject: Core/Dependencies: Update G3D to v9.0 r4036 --- dep/g3dlite/source/PhysicsFrameSpline.cpp | 77 ++++++++++++++++--------------- 1 file changed, 40 insertions(+), 37 deletions(-) (limited to 'dep/g3dlite/source/PhysicsFrameSpline.cpp') diff --git a/dep/g3dlite/source/PhysicsFrameSpline.cpp b/dep/g3dlite/source/PhysicsFrameSpline.cpp index 2dfdb6f9139..ca9d6cc55d7 100644 --- a/dep/g3dlite/source/PhysicsFrameSpline.cpp +++ b/dep/g3dlite/source/PhysicsFrameSpline.cpp @@ -6,55 +6,53 @@ #include "G3D/PhysicsFrameSpline.h" #include "G3D/Any.h" #include "G3D/stringutils.h" +#include "G3D/UprightFrame.h" namespace G3D { PhysicsFrameSpline::PhysicsFrameSpline() {} + PhysicsFrameSpline::PhysicsFrameSpline(const Any& any) { - *this = any; + if (beginsWith(any.name(), "PFrameSpline") || + beginsWith(any.name(), "PhysicsFrameSpline") || + beginsWith(any.name(), "CFrameSpline") || + beginsWith(any.name(), "CoordinateFrameSpline") || + beginsWith(any.name(), "UprightSpline") || + beginsWith(any.name(), "UprightFrameSpline")) { + AnyTableReader t(any); + init(t); + t.verifyDone(); + } else { + // Must be a single control point + control.append(any); + time.append(0); + } } -PhysicsFrameSpline& PhysicsFrameSpline::operator=(const Any& any) { - const std::string& n = toLower(any.name()); - *this = PhysicsFrameSpline(); - - if (n == "physicsframespline" || n == "pframespline") { - any.verifyName("PhysicsFrameSpline", "PFrameSpline"); - - for (Any::AnyTable::Iterator it = any.table().begin(); it.hasMore(); ++it) { - const std::string& k = toLower(it->key); - if (k == "cyclic") { - cyclic = it->value; - } else if (k == "control") { - const Any& v = it->value; - v.verifyType(Any::ARRAY); - control.resize(v.size()); - for (int i = 0; i < control.size(); ++i) { - control[i] = v[i]; - } - if (! any.containsKey("time")) { - time.resize(control.size()); - for (int i = 0; i < time.size(); ++i) { - time[i] = i; - } - } - } else if (k == "finalinterval") { - finalInterval = it->value; - } else if (k == "time") { - const Any& v = it->value; - v.verifyType(Any::ARRAY); - time.resize(v.size()); - for (int i = 0; i < time.size(); ++i) { - time[i] = v[i]; - } + +bool PhysicsFrameSpline::operator==(const PhysicsFrameSpline& other) const { + if ((extrapolationMode == other.extrapolationMode) && + (time.size() == other.size()) && + (finalInterval == other.finalInterval) && + (control.size() == other.control.size())) { + // Check actual values + for (int i = 0; i < time.size(); ++i) { + if (time[i] != other.time[i]) { + return false; + } + } + + for (int i = 0; i < control.size(); ++i) { + if (control[i] != other.control[i]) { + return false; } } + + return true; } else { - // Must be a PhysicsFrame constructor of some kind - append(any); + return false; } - return *this; } @@ -62,6 +60,11 @@ void PhysicsFrameSpline::correct(PhysicsFrame& frame) const { frame.rotation.unitize(); } +void PhysicsFrameSpline::scaleControlPoints(float scaleFactor) { + for (int i = 0; i < control.size(); ++i) { + control[i].translation *= scaleFactor; + } +} void PhysicsFrameSpline::ensureShortestPath(PhysicsFrame* A, int N) const { for (int i = 1; i < N; ++i) { -- cgit v1.2.3