BoxComponent.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // ----------------------------------------------------------------
  2. // From Game Programming in C++ by Sanjay Madhav
  3. // Copyright (C) 2017 Sanjay Madhav. All rights reserved.
  4. //
  5. // Released under the BSD License
  6. // See LICENSE in root directory for full details.
  7. // ----------------------------------------------------------------
  8. #include "BoxComponent.h"
  9. #include "Actor.h"
  10. #include "Game.h"
  11. #include "PhysWorld.h"
  12. #include "LevelLoader.h"
  13. BoxComponent::BoxComponent(Actor* owner, int updateOrder)
  14. :Component(owner, updateOrder)
  15. ,mObjectBox(Vector3::Zero, Vector3::Zero)
  16. ,mWorldBox(Vector3::Zero, Vector3::Zero)
  17. ,mShouldRotate(true)
  18. {
  19. mOwner->GetGame()->GetPhysWorld()->AddBox(this);
  20. }
  21. BoxComponent::~BoxComponent()
  22. {
  23. mOwner->GetGame()->GetPhysWorld()->RemoveBox(this);
  24. }
  25. void BoxComponent::OnUpdateWorldTransform()
  26. {
  27. // Reset to object space box
  28. mWorldBox = mObjectBox;
  29. // Scale
  30. mWorldBox.mMin *= mOwner->GetScale();
  31. mWorldBox.mMax *= mOwner->GetScale();
  32. // Rotate (if we want to)
  33. if (mShouldRotate)
  34. {
  35. mWorldBox.Rotate(mOwner->GetRotation());
  36. }
  37. // Translate
  38. mWorldBox.mMin += mOwner->GetPosition();
  39. mWorldBox.mMax += mOwner->GetPosition();
  40. }
  41. void BoxComponent::LoadProperties(const rapidjson::Value& inObj)
  42. {
  43. Component::LoadProperties(inObj);
  44. JsonHelper::GetVector3(inObj, "objectMin", mObjectBox.mMin);
  45. JsonHelper::GetVector3(inObj, "objectMax", mObjectBox.mMax);
  46. JsonHelper::GetVector3(inObj, "worldMin", mWorldBox.mMin);
  47. JsonHelper::GetVector3(inObj, "worldMax", mWorldBox.mMax);
  48. JsonHelper::GetBool(inObj, "shouldRotate", mShouldRotate);
  49. }
  50. void BoxComponent::SaveProperties(rapidjson::Document::AllocatorType & alloc, rapidjson::Value & inObj) const
  51. {
  52. Component::SaveProperties(alloc, inObj);
  53. JsonHelper::AddVector3(alloc, inObj, "objectMin", mObjectBox.mMin);
  54. JsonHelper::AddVector3(alloc, inObj, "objectMax", mObjectBox.mMax);
  55. JsonHelper::AddVector3(alloc, inObj, "worldMin", mWorldBox.mMin);
  56. JsonHelper::AddVector3(alloc, inObj, "worldMax", mWorldBox.mMax);
  57. JsonHelper::AddBool(alloc, inObj, "shouldRotate", mShouldRotate);
  58. }