MoveComponent.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 "MoveComponent.h"
  9. #include "Actor.h"
  10. #include "LevelLoader.h"
  11. MoveComponent::MoveComponent(class Actor* owner, int updateOrder)
  12. :Component(owner, updateOrder)
  13. ,mAngularSpeed(0.0f)
  14. ,mForwardSpeed(0.0f)
  15. {
  16. }
  17. void MoveComponent::Update(float deltaTime)
  18. {
  19. if (!Math::NearZero(mAngularSpeed))
  20. {
  21. Quaternion rot = mOwner->GetRotation();
  22. float angle = mAngularSpeed * deltaTime;
  23. // Create quaternion for incremental rotation
  24. // (Rotate about up axis)
  25. Quaternion inc(Vector3::UnitZ, angle);
  26. // Concatenate old and new quaternion
  27. rot = Quaternion::Concatenate(rot, inc);
  28. mOwner->SetRotation(rot);
  29. }
  30. if (!Math::NearZero(mForwardSpeed) || !Math::NearZero(mStrafeSpeed))
  31. {
  32. Vector3 pos = mOwner->GetPosition();
  33. pos += mOwner->GetForward() * mForwardSpeed * deltaTime;
  34. pos += mOwner->GetRight() * mStrafeSpeed * deltaTime;
  35. mOwner->SetPosition(pos);
  36. }
  37. }
  38. void MoveComponent::LoadProperties(const rapidjson::Value& inObj)
  39. {
  40. Component::LoadProperties(inObj);
  41. JsonHelper::GetFloat(inObj, "angularSpeed", mAngularSpeed);
  42. JsonHelper::GetFloat(inObj, "forwardSpeed", mForwardSpeed);
  43. JsonHelper::GetFloat(inObj, "strafeSpeed", mStrafeSpeed);
  44. }
  45. void MoveComponent::SaveProperties(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& inObj) const
  46. {
  47. Component::SaveProperties(alloc, inObj);
  48. JsonHelper::AddFloat(alloc, inObj, "angularSpeed", mAngularSpeed);
  49. JsonHelper::AddFloat(alloc, inObj, "forwardSpeed", mForwardSpeed);
  50. JsonHelper::AddFloat(alloc, inObj, "strafeSpeed", mStrafeSpeed);
  51. }