BodyNode.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. /// Body feedback component.
  14. class BodyNode::FeedbackComponent : public SceneComponent
  15. {
  16. ANKI_SCENE_COMPONENT(BodyNode::FeedbackComponent)
  17. public:
  18. FeedbackComponent(SceneNode* node)
  19. : SceneComponent(node, getStaticClassId(), true)
  20. {
  21. }
  22. ANKI_USE_RESULT Error update(SceneNode& node, Second prevTime, Second crntTime, Bool& updated) override
  23. {
  24. updated = false;
  25. BodyComponent& bodyc = node.getFirstComponentOfType<BodyComponent>();
  26. if(bodyc.getTimestamp() == node.getGlobalTimestamp())
  27. {
  28. MoveComponent& move = node.getFirstComponentOfType<MoveComponent>();
  29. move.setLocalTransform(bodyc.getWorldTransform());
  30. }
  31. return Error::NONE;
  32. }
  33. };
  34. ANKI_SCENE_COMPONENT_STATICS(BodyNode::FeedbackComponent)
  35. BodyNode::BodyNode(SceneGraph* scene, CString name)
  36. : SceneNode(scene, name)
  37. {
  38. newComponent<JointComponent>();
  39. newComponent<BodyComponent>();
  40. newComponent<FeedbackComponent>();
  41. MoveComponent* movec = newComponent<MoveComponent>();
  42. movec->setIgnoreParentTransform(true);
  43. }
  44. BodyNode::~BodyNode()
  45. {
  46. }
  47. } // end namespace anki