Enemy.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 "Enemy.h"
  9. #include "Game.h"
  10. #include "SpriteComponent.h"
  11. #include "NavComponent.h"
  12. #include "Grid.h"
  13. #include "Tile.h"
  14. #include "CircleComponent.h"
  15. #include <algorithm>
  16. Enemy::Enemy(class Game* game)
  17. :Actor(game)
  18. {
  19. // Add to enemy vector
  20. game->GetEnemies().emplace_back(this);
  21. SpriteComponent* sc = new SpriteComponent(this);
  22. sc->SetTexture(game->GetTexture("Assets/Airplane.png"));
  23. // Set position at start tile
  24. SetPosition(GetGame()->GetGrid()->GetStartTile()->GetPosition());
  25. // Setup a nav component at the start tile
  26. NavComponent* nc = new NavComponent(this);
  27. nc->SetForwardSpeed(150.0f);
  28. nc->StartPath(GetGame()->GetGrid()->GetStartTile());
  29. // Setup a circle for collision
  30. mCircle = new CircleComponent(this);
  31. mCircle->SetRadius(25.0f);
  32. }
  33. Enemy::~Enemy()
  34. {
  35. // Remove from enemy vector
  36. auto iter = std::find(GetGame()->GetEnemies().begin(),
  37. GetGame()->GetEnemies().end(),
  38. this);
  39. GetGame()->GetEnemies().erase(iter);
  40. }
  41. void Enemy::UpdateActor(float deltaTime)
  42. {
  43. Actor::UpdateActor(deltaTime);
  44. // Am I near the end tile?
  45. Vector2 diff = GetPosition() - GetGame()->GetGrid()->GetEndTile()->GetPosition();
  46. if (Math::NearZero(diff.Length(), 10.0f))
  47. {
  48. SetState(EDead);
  49. }
  50. }