// ---------------------------------------------------------------- // 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 "FollowActor.h" #include "SkeletalMeshComponent.h" #include "Game.h" #include "Renderer.h" #include "FollowCamera.h" #include "MoveComponent.h" #include "MirrorCamera.h" FollowActor::FollowActor(Game* game) :Actor(game) ,mMoving(false) { mMeshComp = new SkeletalMeshComponent(this); mMeshComp->SetMesh(game->GetRenderer()->GetMesh("Assets/CatWarrior.gpmesh")); mMeshComp->SetSkeleton(game->GetSkeleton("Assets/CatWarrior.gpskel")); mMeshComp->PlayAnimation(game->GetAnimation("Assets/CatActionIdle.gpanim")); SetPosition(Vector3(0.0f, 0.0f, -100.0f)); mMoveComp = new MoveComponent(this); mCameraComp = new FollowCamera(this); mCameraComp->SnapToIdeal(); // Add a component for the mirror camera MirrorCamera* mirror = new MirrorCamera(this); mirror->SnapToIdeal(); } void FollowActor::ActorInput(const uint8_t* keys) { float forwardSpeed = 0.0f; float angularSpeed = 0.0f; // wasd movement if (keys[SDL_SCANCODE_W]) { forwardSpeed += 400.0f; } if (keys[SDL_SCANCODE_S]) { forwardSpeed -= 400.0f; } if (keys[SDL_SCANCODE_A]) { angularSpeed -= Math::Pi; } if (keys[SDL_SCANCODE_D]) { angularSpeed += Math::Pi; } // Did we just start moving? if (!mMoving && !Math::NearZero(forwardSpeed)) { mMoving = true; mMeshComp->PlayAnimation(GetGame()->GetAnimation("Assets/CatRunSprint.gpanim"), 1.25f); } // Or did we just stop moving? else if (mMoving && Math::NearZero(forwardSpeed)) { mMoving = false; mMeshComp->PlayAnimation(GetGame()->GetAnimation("Assets/CatActionIdle.gpanim")); } mMoveComp->SetForwardSpeed(forwardSpeed); mMoveComp->SetAngularSpeed(angularSpeed); } void FollowActor::SetVisible(bool visible) { mMeshComp->SetVisible(visible); }