2
0

BsSceneActor.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Scene/BsSceneActor.h"
  4. #include "Scene/BsSceneObject.h"
  5. namespace bs
  6. {
  7. SceneActor::SceneActor()
  8. :mMobility(ObjectMobility::Movable), mActive(true), mHash(0)
  9. {
  10. }
  11. SceneActor::~SceneActor()
  12. {
  13. }
  14. void SceneActor::setTransform(const Transform& transform)
  15. {
  16. if (mMobility != ObjectMobility::Movable)
  17. return;
  18. mTransform = transform;
  19. _markCoreDirty(ActorDirtyFlag::Transform);
  20. }
  21. void SceneActor::setMobility(ObjectMobility mobility)
  22. {
  23. mMobility = mobility;
  24. _markCoreDirty(ActorDirtyFlag::Mobility);
  25. }
  26. void SceneActor::setActive(bool active)
  27. {
  28. mActive = active;
  29. _markCoreDirty(ActorDirtyFlag::Active);
  30. }
  31. void SceneActor::_updateState(const SceneObject& so, bool force)
  32. {
  33. UINT32 curHash = so.getTransformHash();
  34. if (curHash != mHash || force)
  35. {
  36. setTransform(so.getTransform());
  37. mHash = curHash;
  38. }
  39. if (so.getActive() != mActive || force)
  40. setActive(so.getActive());
  41. if (so.getMobility() != mMobility || force)
  42. setMobility(so.getMobility());
  43. }
  44. char* SceneActor::syncActorTo(char* data)
  45. {
  46. data = rttiWriteElem(mTransform.getPosition(), data);
  47. data = rttiWriteElem(mTransform.getRotation(), data);
  48. data = rttiWriteElem(mTransform.getScale(), data);
  49. data = rttiWriteElem(mActive, data);
  50. data = rttiWriteElem(mMobility, data);
  51. return data;
  52. }
  53. char* SceneActor::syncActorFrom(char* data)
  54. {
  55. Vector3 position;
  56. Quaternion rotation;
  57. Vector3 scale;
  58. data = rttiReadElem(position, data);
  59. data = rttiReadElem(rotation, data);
  60. data = rttiReadElem(scale, data);
  61. data = rttiReadElem(mActive, data);
  62. data = rttiReadElem(mMobility, data);
  63. mTransform.setPosition(position);
  64. mTransform.setRotation(rotation);
  65. mTransform.setScale(scale);
  66. return data;
  67. }
  68. UINT32 SceneActor::getActorSyncDataSize() const
  69. {
  70. UINT32 size =
  71. rttiGetElemSize(mTransform.getPosition()) +
  72. rttiGetElemSize(mTransform.getRotation()) +
  73. rttiGetElemSize(mTransform.getScale()) +
  74. rttiGetElemSize(mActive) +
  75. rttiGetElemSize(mMobility);
  76. return size;
  77. }
  78. }