Ship.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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 "Ship.h"
  9. #include "AnimSpriteComponent.h"
  10. #include "Game.h"
  11. Ship::Ship(Game* game)
  12. :Actor(game)
  13. ,mRightSpeed(0.0f)
  14. ,mDownSpeed(0.0f)
  15. {
  16. // Create an animated sprite component
  17. AnimSpriteComponent* asc = new AnimSpriteComponent(this);
  18. std::vector<SDL_Texture*> anims = {
  19. game->GetTexture("Assets/Ship01.png"),
  20. game->GetTexture("Assets/Ship02.png"),
  21. game->GetTexture("Assets/Ship03.png"),
  22. game->GetTexture("Assets/Ship04.png"),
  23. };
  24. asc->SetAnimTextures(anims);
  25. }
  26. void Ship::UpdateActor(float deltaTime)
  27. {
  28. Actor::UpdateActor(deltaTime);
  29. // Update position based on speeds and delta time
  30. Vector2 pos = GetPosition();
  31. pos.x += mRightSpeed * deltaTime;
  32. pos.y += mDownSpeed * deltaTime;
  33. // Restrict position to left half of screen
  34. if (pos.x < 25.0f)
  35. {
  36. pos.x = 25.0f;
  37. }
  38. else if (pos.x > 500.0f)
  39. {
  40. pos.x = 500.0f;
  41. }
  42. if (pos.y < 25.0f)
  43. {
  44. pos.y = 25.0f;
  45. }
  46. else if (pos.y > 743.0f)
  47. {
  48. pos.y = 743.0f;
  49. }
  50. SetPosition(pos);
  51. }
  52. void Ship::ProcessKeyboard(const uint8_t* state)
  53. {
  54. mRightSpeed = 0.0f;
  55. mDownSpeed = 0.0f;
  56. // right/left
  57. if (state[SDL_SCANCODE_D])
  58. {
  59. mRightSpeed += 250.0f;
  60. }
  61. if (state[SDL_SCANCODE_A])
  62. {
  63. mRightSpeed -= 250.0f;
  64. }
  65. // up/down
  66. if (state[SDL_SCANCODE_S])
  67. {
  68. mDownSpeed += 300.0f;
  69. }
  70. if (state[SDL_SCANCODE_W])
  71. {
  72. mDownSpeed -= 300.0f;
  73. }
  74. }