2
0

FollowActor.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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 "FollowActor.h"
  9. #include "SkeletalMeshComponent.h"
  10. #include "Game.h"
  11. #include "Renderer.h"
  12. #include "FollowCamera.h"
  13. #include "MoveComponent.h"
  14. FollowActor::FollowActor(Game* game)
  15. :Actor(game)
  16. ,mMoving(false)
  17. {
  18. mMeshComp = new SkeletalMeshComponent(this);
  19. mMeshComp->SetMesh(game->GetRenderer()->GetMesh("Assets/CatWarrior.gpmesh"));
  20. mMeshComp->SetSkeleton(game->GetSkeleton("Assets/CatWarrior.gpskel"));
  21. mMeshComp->PlayAnimation(game->GetAnimation("Assets/CatActionIdle.gpanim"));
  22. SetPosition(Vector3(0.0f, 0.0f, -100.0f));
  23. mMoveComp = new MoveComponent(this);
  24. mCameraComp = new FollowCamera(this);
  25. mCameraComp->SnapToIdeal();
  26. }
  27. void FollowActor::ActorInput(const uint8_t* keys)
  28. {
  29. float forwardSpeed = 0.0f;
  30. float angularSpeed = 0.0f;
  31. // wasd movement
  32. if (keys[SDL_SCANCODE_W])
  33. {
  34. forwardSpeed += 400.0f;
  35. }
  36. if (keys[SDL_SCANCODE_S])
  37. {
  38. forwardSpeed -= 400.0f;
  39. }
  40. if (keys[SDL_SCANCODE_A])
  41. {
  42. angularSpeed -= Math::Pi;
  43. }
  44. if (keys[SDL_SCANCODE_D])
  45. {
  46. angularSpeed += Math::Pi;
  47. }
  48. // Did we just start moving?
  49. if (!mMoving && !Math::NearZero(forwardSpeed))
  50. {
  51. mMoving = true;
  52. mMeshComp->PlayAnimation(GetGame()->GetAnimation("Assets/CatRunSprint.gpanim"), 1.25f);
  53. }
  54. // Or did we just stop moving?
  55. else if (mMoving && Math::NearZero(forwardSpeed))
  56. {
  57. mMoving = false;
  58. mMeshComp->PlayAnimation(GetGame()->GetAnimation("Assets/CatActionIdle.gpanim"));
  59. }
  60. mMoveComp->SetForwardSpeed(forwardSpeed);
  61. mMoveComp->SetAngularSpeed(angularSpeed);
  62. }
  63. void FollowActor::SetVisible(bool visible)
  64. {
  65. mMeshComp->SetVisible(visible);
  66. }