| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // ----------------------------------------------------------------
- // From Game Programming in C++ by Sanjay Madhav
- // Copyright (C) 2017 Sanjay Madhav. All rights reserved.
- //
- // Released under the BSD License
- // See LICENSE in root directory for full details.
- // ----------------------------------------------------------------
- #include "MoveComponent.h"
- #include "Actor.h"
- #include "LevelLoader.h"
- MoveComponent::MoveComponent(class Actor* owner, int updateOrder)
- :Component(owner, updateOrder)
- ,mAngularSpeed(0.0f)
- ,mForwardSpeed(0.0f)
- {
-
- }
- void MoveComponent::Update(float deltaTime)
- {
- if (!Math::NearZero(mAngularSpeed))
- {
- Quaternion rot = mOwner->GetRotation();
- float angle = mAngularSpeed * deltaTime;
- // Create quaternion for incremental rotation
- // (Rotate about up axis)
- Quaternion inc(Vector3::UnitZ, angle);
- // Concatenate old and new quaternion
- rot = Quaternion::Concatenate(rot, inc);
- mOwner->SetRotation(rot);
- }
-
- if (!Math::NearZero(mForwardSpeed) || !Math::NearZero(mStrafeSpeed))
- {
- Vector3 pos = mOwner->GetPosition();
- pos += mOwner->GetForward() * mForwardSpeed * deltaTime;
- pos += mOwner->GetRight() * mStrafeSpeed * deltaTime;
- mOwner->SetPosition(pos);
- }
- }
- void MoveComponent::LoadProperties(const rapidjson::Value& inObj)
- {
- Component::LoadProperties(inObj);
- JsonHelper::GetFloat(inObj, "angularSpeed", mAngularSpeed);
- JsonHelper::GetFloat(inObj, "forwardSpeed", mForwardSpeed);
- JsonHelper::GetFloat(inObj, "strafeSpeed", mStrafeSpeed);
- }
- void MoveComponent::SaveProperties(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& inObj) const
- {
- Component::SaveProperties(alloc, inObj);
- JsonHelper::AddFloat(alloc, inObj, "angularSpeed", mAngularSpeed);
- JsonHelper::AddFloat(alloc, inObj, "forwardSpeed", mForwardSpeed);
- JsonHelper::AddFloat(alloc, inObj, "strafeSpeed", mStrafeSpeed);
- }
|