Skeleton.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright (C) 2014, Panagiotis Christopoulos Charitos.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include "anki/resource/Skeleton.h"
  6. #include "anki/misc/Xml.h"
  7. #include "anki/util/StringList.h"
  8. namespace anki {
  9. //==============================================================================
  10. void Skeleton::load(const CString& filename, ResourceInitializer& init)
  11. {
  12. XmlDocument doc;
  13. doc.loadFile(filename, init.m_tempAlloc);
  14. XmlElement rootEl = doc.getChildElement("skeleton");
  15. XmlElement bonesEl = rootEl.getChildElement("bones");
  16. // count the bones count
  17. U bonesCount = 0;
  18. XmlElement boneEl = bonesEl.getChildElement("bone");
  19. do
  20. {
  21. ++bonesCount;
  22. boneEl = boneEl.getNextSiblingElement("bone");
  23. } while(boneEl);
  24. // Alloc the vector
  25. m_bones = std::move(ResourceVector<Bone>(init.m_alloc));
  26. m_bones.resize(bonesCount, Bone(init.m_alloc));
  27. // Load every bone
  28. boneEl = bonesEl.getChildElement("bone");
  29. bonesCount = 0;
  30. do
  31. {
  32. Bone& bone = m_bones[bonesCount++];
  33. // <name>
  34. XmlElement nameEl = boneEl.getChildElement("name");
  35. bone.m_name = nameEl.getText();
  36. // <transform>
  37. XmlElement trfEl = boneEl.getChildElement("transform");
  38. bone.m_transform = trfEl.getMat4();
  39. // Advance
  40. boneEl = boneEl.getNextSiblingElement("bone");
  41. } while(boneEl);
  42. }
  43. } // end namespace anki