FollowActor.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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 "MeshComponent.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. {
  17. mMeshComp = new MeshComponent(this);
  18. mMeshComp->SetMesh(game->GetRenderer()->GetMesh("Assets/RacingCar.gpmesh"));
  19. SetPosition(Vector3(0.0f, 0.0f, -100.0f));
  20. mMoveComp = new MoveComponent(this);
  21. mCameraComp = new FollowCamera(this);
  22. mCameraComp->SnapToIdeal();
  23. }
  24. void FollowActor::ActorInput(const uint8_t* keys)
  25. {
  26. float forwardSpeed = 0.0f;
  27. float angularSpeed = 0.0f;
  28. // wasd movement
  29. if (keys[SDL_SCANCODE_W])
  30. {
  31. forwardSpeed += 400.0f;
  32. }
  33. if (keys[SDL_SCANCODE_S])
  34. {
  35. forwardSpeed -= 400.0f;
  36. }
  37. if (keys[SDL_SCANCODE_A])
  38. {
  39. angularSpeed -= Math::Pi;
  40. }
  41. if (keys[SDL_SCANCODE_D])
  42. {
  43. angularSpeed += Math::Pi;
  44. }
  45. mMoveComp->SetForwardSpeed(forwardSpeed);
  46. mMoveComp->SetAngularSpeed(angularSpeed);
  47. // Adjust horizontal distance of camera based on speed
  48. if (!Math::NearZero(forwardSpeed))
  49. {
  50. mCameraComp->SetHorzDist(500.0f);
  51. }
  52. else
  53. {
  54. mCameraComp->SetHorzDist(350.0f);
  55. }
  56. }
  57. void FollowActor::SetVisible(bool visible)
  58. {
  59. mMeshComp->SetVisible(visible);
  60. }