combat_system.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #pragma once
  2. #include "../core/entity.h"
  3. #include "../core/system.h"
  4. #include <unordered_map>
  5. namespace Engine::Core {
  6. class AttackComponent;
  7. }
  8. namespace Game::Systems {
  9. class CombatSystem : public Engine::Core::System {
  10. public:
  11. void update(Engine::Core::World *world, float deltaTime) override;
  12. private:
  13. static void processAttacks(Engine::Core::World *world, float deltaTime);
  14. static void updateCombatMode(Engine::Core::Entity *attacker,
  15. Engine::Core::World *world,
  16. Engine::Core::AttackComponent *attack_comp);
  17. static auto isInRange(Engine::Core::Entity *attacker,
  18. Engine::Core::Entity *target, float range) -> bool;
  19. static void dealDamage(Engine::Core::World *world,
  20. Engine::Core::Entity *target, int damage,
  21. Engine::Core::EntityID attackerId = 0);
  22. void processAutoEngagement(Engine::Core::World *world, float deltaTime);
  23. static auto isUnitIdle(Engine::Core::Entity *unit) -> bool;
  24. static auto findNearestEnemy(Engine::Core::Entity *unit,
  25. Engine::Core::World *world,
  26. float maxRange) -> Engine::Core::Entity *;
  27. std::unordered_map<Engine::Core::EntityID, float> m_engagementCooldowns;
  28. static constexpr float ENGAGEMENT_COOLDOWN = 0.5F;
  29. };
  30. } // namespace Game::Systems