FollowActor.cpp 2.0 KB

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