Tower.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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 "Tower.h"
  9. #include "SpriteComponent.h"
  10. #include "MoveComponent.h"
  11. #include "Game.h"
  12. #include "Enemy.h"
  13. #include "Bullet.h"
  14. Tower::Tower(class Game* game)
  15. :Actor(game)
  16. {
  17. SpriteComponent* sc = new SpriteComponent(this, 200);
  18. sc->SetTexture(game->GetTexture("Assets/Tower.png"));
  19. mMove = new MoveComponent(this);
  20. //mMove->SetAngularSpeed(Math::Pi);
  21. mNextAttack = AttackTime;
  22. }
  23. void Tower::UpdateActor(float deltaTime)
  24. {
  25. Actor::UpdateActor(deltaTime);
  26. mNextAttack -= deltaTime;
  27. if (mNextAttack <= 0.0f)
  28. {
  29. Enemy* e = GetGame()->GetNearestEnemy(GetPosition());
  30. if (e != nullptr)
  31. {
  32. // Vector from me to enemy
  33. Vector2 dir = e->GetPosition() - GetPosition();
  34. float dist = dir.Length();
  35. if (dist < AttackRange)
  36. {
  37. // Rotate to face enemy
  38. SetRotation(Math::Atan2(-dir.y, dir.x));
  39. // Spawn bullet at tower position facing enemy
  40. Bullet* b = new Bullet(GetGame());
  41. b->SetPosition(GetPosition());
  42. b->SetRotation(GetRotation());
  43. }
  44. }
  45. mNextAttack += AttackTime;
  46. }
  47. }