CameraActor.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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 "CameraActor.h"
  9. #include "MoveComponent.h"
  10. #include "SDL/SDL_scancode.h"
  11. #include "Renderer.h"
  12. #include "AudioSystem.h"
  13. #include "Game.h"
  14. #include "AudioComponent.h"
  15. CameraActor::CameraActor(Game* game)
  16. :Actor(game)
  17. {
  18. mMoveComp = new MoveComponent(this);
  19. mAudioComp = new AudioComponent(this);
  20. mLastFootstep = 0.0f;
  21. mFootstep = mAudioComp->PlayEvent("event:/Footstep");
  22. mFootstep.SetPaused(true);
  23. }
  24. void CameraActor::UpdateActor(float deltaTime)
  25. {
  26. Actor::UpdateActor(deltaTime);
  27. // Play the footstep if we're moving and haven't recently
  28. mLastFootstep -= deltaTime;
  29. if (!Math::NearZero(mMoveComp->GetForwardSpeed()) && mLastFootstep <= 0.0f)
  30. {
  31. mFootstep.SetPaused(false);
  32. mFootstep.Restart();
  33. mLastFootstep = 0.5f;
  34. }
  35. // Compute new camera from this actor
  36. Vector3 cameraPos = GetPosition();
  37. Vector3 target = GetPosition() + GetForward() * 100.0f;
  38. Vector3 up = Vector3::UnitZ;
  39. Matrix4 view = Matrix4::CreateLookAt(cameraPos, target, up);
  40. GetGame()->GetRenderer()->SetViewMatrix(view);
  41. GetGame()->GetAudioSystem()->SetListener(view);
  42. }
  43. void CameraActor::ActorInput(const uint8_t* keys)
  44. {
  45. float forwardSpeed = 0.0f;
  46. float angularSpeed = 0.0f;
  47. // wasd movement
  48. if (keys[SDL_SCANCODE_W])
  49. {
  50. forwardSpeed += 300.0f;
  51. }
  52. if (keys[SDL_SCANCODE_S])
  53. {
  54. forwardSpeed -= 300.0f;
  55. }
  56. if (keys[SDL_SCANCODE_A])
  57. {
  58. angularSpeed -= Math::TwoPi;
  59. }
  60. if (keys[SDL_SCANCODE_D])
  61. {
  62. angularSpeed += Math::TwoPi;
  63. }
  64. mMoveComp->SetForwardSpeed(forwardSpeed);
  65. mMoveComp->SetAngularSpeed(angularSpeed);
  66. }
  67. void CameraActor::SetFootstepSurface(float value)
  68. {
  69. // Pause here because the way I setup the parameter in FMOD
  70. // changing it will play a footstep
  71. mFootstep.SetPaused(true);
  72. mFootstep.SetParameter("Surface", value);
  73. }