aboutsummaryrefslogtreecommitdiff
path: root/dep/g3dlite/source/PhysicsFrame.cpp
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2014-08-22 16:58:23 +0200
committerjackpoz <giacomopoz@gmail.com>2014-08-22 21:00:56 +0200
commit5e8277e923c5545a15bae7c740ab6afaa597a59f (patch)
tree4cf5212c080588a7e868ee60134fc7fff51e400a /dep/g3dlite/source/PhysicsFrame.cpp
parenta63aa858dcb400eafb97eed1f590e34c27d934a4 (diff)
Core/Dependencies: Update G3D to v9.0 r4036
Diffstat (limited to 'dep/g3dlite/source/PhysicsFrame.cpp')
-rw-r--r--dep/g3dlite/source/PhysicsFrame.cpp40
1 files changed, 28 insertions, 12 deletions
diff --git a/dep/g3dlite/source/PhysicsFrame.cpp b/dep/g3dlite/source/PhysicsFrame.cpp
index 30fbdf8d619..9146d78ff5b 100644
--- a/dep/g3dlite/source/PhysicsFrame.cpp
+++ b/dep/g3dlite/source/PhysicsFrame.cpp
@@ -1,10 +1,10 @@
/**
- @file PhysicsFrame.cpp
+ \file PhysicsFrame.cpp
- @maintainer Morgan McGuire, http://graphics.cs.williams.edu
+ \maintainer Morgan McGuire, http://graphics.cs.williams.edu
- @created 2002-07-09
- @edited 2010-03-25
+ \created 2002-07-09
+ \edited 2013-04-25
*/
#include "G3D/platform.h"
@@ -13,6 +13,7 @@
#include "G3D/PhysicsFrame.h"
#include "G3D/BinaryInput.h"
#include "G3D/BinaryOutput.h"
+#include "G3D/UprightFrame.h"
namespace G3D {
@@ -22,31 +23,44 @@ PhysicsFrame::PhysicsFrame() {
}
-PhysicsFrame::PhysicsFrame(
- const CoordinateFrame& coordinateFrame) {
-
+PhysicsFrame::PhysicsFrame
+ (const CoordinateFrame& coordinateFrame) {
translation = coordinateFrame.translation;
rotation = Quat(coordinateFrame.rotation);
}
+Any PhysicsFrame::toAny() const {
+ // Prefer to serialize as a CFrame, which is easier to read
+ if (false) {
+ Any a(Any::ARRAY, "PFrame");
+ a.append(rotation, translation.toAny("Point3"));
+ return a;
+ } else {
+ return CFrame(*this).toAny();
+ }
+}
+
+
PhysicsFrame::PhysicsFrame(const Any& a) {
const std::string& n = toLower(a.name());
*this = PhysicsFrame();
- if (beginsWith(n, "vector3")) {
- *this = PhysicsFrame(Vector3(a));
+ if (beginsWith(n, "vector3") || beginsWith(n, "point3")) {
+ *this = PhysicsFrame(Point3(a));
} else if (beginsWith(n, "matrix3")) {
*this = PhysicsFrame(Matrix3(a));
- } else if (beginsWith(n, "cframe") || beginsWith(n, "coordinateframe")) {
- *this = PhysicsFrame(CoordinateFrame(a));
+ } else if (beginsWith(n, "cframe") || beginsWith(n, "coordinateframe") || beginsWith(n, "matrix4")) {
+ *this = CoordinateFrame(a);
+ } else if (beginsWith(n, "uprightframe")) {
+ *this = UprightFrame(a).toCoordinateFrame();
} else if (beginsWith(n, "pframe") || beginsWith(n, "physicsframe")) {
if (a.type() == Any::ARRAY) {
a.verifySize(2);
rotation = a[0];
translation = a[1];
} else {
- for (Any::AnyTable::Iterator it = a.table().begin(); it.hasMore(); ++it) {
+ for (Any::AnyTable::Iterator it = a.table().begin(); it.isValid(); ++it) {
const std::string& n = toLower(it->key);
if (n == "translation") {
translation = it->value;
@@ -57,6 +71,8 @@ PhysicsFrame::PhysicsFrame(const Any& a) {
}
}
}
+ } else {
+ a.verify(false, "Unrecognized class name where a PhysicsFrame or equivalent was expected.");
}
}