| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- // ----------------------------------------------------------------
- // 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"
- 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);
- }
- }
|