Files
Webcam/include/engine/physic/physic_wheel.cpp

70 lines
2.0 KiB
C++

/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#include "physic/physic_wheel.h"
#include "math/matrix4.h"
#include "metafile/nml.h"
#include "log/log.h"
using namespace GS::S3D;
using GS::NML::Tag;
//------------------------------------------------------------------------------
bool PhysicWheel::FromMetaTag(Tag &tag)
{
if (tag.name != "PhysicWheel")
__ERR__(__LOG_E__ << "Could not parse physic wheel, incorrect root tag (" << tag.name << ").\n", false)
// Parse root tags.
NMLTagForeach(pt, tag)
{
if (pt->name == "Friction") friction = pt->GetReal();
else if (pt->name == "Radius") radius = pt->GetReal();
else if (pt->name == "RefMatrix") ref_matrix.FromMetaTag(*pt);
else if (pt->name == "RestLength") rest_length = pt->GetReal();
else if (pt->name == "MaxCompression") max_compression = pt->GetReal();
else if (pt->name == "Stiffness") stiffness = pt->GetReal();
else if (pt->name == "Damping") damping = pt->GetReal();
else __LOG_W__ << "Unknown tag '" << pt->name << "' in <PhysicWheel>.\n";
}
return true;
}
Tag *PhysicWheel::AsMetaTag() const
{
Tag *root = new Tag("PhysicWheel");
if (!root)
__ERR__(__LOG_E__ << "Could not create physic wheel root tag to serialize.\n", NULL)
root->AddChild("Friction", friction);
root->AddChild("Radius", radius);
root->AddChild(ref_matrix.AsMetaTag("RefMatrix"));
root->AddChild("RestLength", rest_length);
root->AddChild("MaxCompression", max_compression);
root->AddChild("Stiffness", stiffness);
root->AddChild("Damping", damping);
return root;
}
//------------------------------------------------------------------------------
PhysicWheel::PhysicWheel()
{
ref_matrix = Matrix4::IdentityMatrix();
friction = 50.f;
radius = 0.3f;
rest_length = 1.0f;
max_compression = 2.0f;
stiffness = 30.f;
damping = 0.25f;
}