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