X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fanimation%2Farmature.cpp;fp=source%2Fanimation%2Farmature.cpp;h=6e921e3f8e9ea95246b8dae655ba54f701d0689d;hp=0000000000000000000000000000000000000000;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e diff --git a/source/animation/armature.cpp b/source/animation/armature.cpp new file mode 100644 index 00000000..6e921e3f --- /dev/null +++ b/source/animation/armature.cpp @@ -0,0 +1,91 @@ +#include +#include "armature.h" + +using namespace std; + +namespace Msp { +namespace GL { + +Armature::Link &Armature::add_link() +{ + links.push_back(Link(string(), links.size())); + return links.back(); +} + +const Armature::Link &Armature::get_link(unsigned index) const +{ + for(vector::const_iterator i=links.begin(); i!=links.end(); ++i) + if(i->get_index()==index) + return *i; + throw key_error(typeid(list)); +} + +const Armature::Link &Armature::get_link(const string &name) const +{ + for(vector::const_iterator i=links.begin(); i!=links.end(); ++i) + if(i->get_name()==name) + return *i; + throw key_error(typeid(list)); +} + +unsigned Armature::get_max_link_index() const +{ + unsigned max_index = 0; + for(vector::const_iterator i=links.begin(); i!=links.end(); ++i) + max_index = max(max_index, i->get_index()); + return max_index; +} + + +Armature::Link::Link(const string &n, unsigned i): + name(n), + index(i), + parent(0) +{ } + +void Armature::Link::set_parent(const Link *p) +{ + parent = p; +} + +void Armature::Link::set_base(const Vector3 &b) +{ + base = b; +} + + +Armature::Loader::Loader(Armature &a): + DataFile::ObjectLoader(a) +{ + add("link", &Loader::link); +} + +void Armature::Loader::link(const string &n) +{ + Link lnk(n, obj.links.size()); + load_sub(lnk, obj); + obj.links.push_back(lnk); +} + + +Armature::Link::Loader::Loader(Link &l, const Armature &a): + DataFile::ObjectLoader(l), + armature(a) +{ + add("base", &Loader::base); + add("index", &Link::index); + add("parent", &Loader::parent); +} + +void Armature::Link::Loader::base(float x, float y, float z) +{ + obj.base = Vector3(x, y, z); +} + +void Armature::Link::Loader::parent(const string &n) +{ + obj.parent = &armature.get_link(n); +} + +} // namespace GL +} // namespace Msp