BodyNode.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <AnKi/Scene/BodyNode.h>
  6. #include <AnKi/Scene/Components/BodyComponent.h>
  7. #include <AnKi/Scene/Components/MoveComponent.h>
  8. #include <AnKi/Scene/Components/JointComponent.h>
  9. #include <AnKi/Scene/SceneGraph.h>
  10. #include <AnKi/Physics/PhysicsWorld.h>
  11. #include <AnKi/Resource/ResourceManager.h>
  12. namespace anki
  13. {
  14. /// Body feedback component.
  15. class BodyNode::FeedbackComponent : public SceneComponent
  16. {
  17. ANKI_SCENE_COMPONENT(BodyNode::FeedbackComponent)
  18. public:
  19. FeedbackComponent(SceneNode* node)
  20. : SceneComponent(node, getStaticClassId(), true)
  21. {
  22. }
  23. ANKI_USE_RESULT Error update(SceneNode& node, Second prevTime, Second crntTime, Bool& updated) override
  24. {
  25. updated = false;
  26. BodyComponent& bodyc = node.getFirstComponentOfType<BodyComponent>();
  27. if(bodyc.getTimestamp() == node.getGlobalTimestamp())
  28. {
  29. MoveComponent& move = node.getFirstComponentOfType<MoveComponent>();
  30. move.setLocalTransform(bodyc.getWorldTransform());
  31. }
  32. return Error::NONE;
  33. }
  34. };
  35. ANKI_SCENE_COMPONENT_STATICS(BodyNode::FeedbackComponent)
  36. BodyNode::BodyNode(SceneGraph* scene, CString name)
  37. : SceneNode(scene, name)
  38. {
  39. newComponent<JointComponent>();
  40. newComponent<BodyComponent>();
  41. newComponent<FeedbackComponent>();
  42. MoveComponent* movec = newComponent<MoveComponent>();
  43. movec->setIgnoreParentTransform(true);
  44. }
  45. BodyNode::~BodyNode()
  46. {
  47. }
  48. } // end namespace anki