arrow_system.h 815 B

123456789101112131415161718192021222324252627282930313233343536
  1. #pragma once
  2. #include "../core/system.h"
  3. #include "../core/world.h"
  4. #include "../game_config.h"
  5. #include <QVector3D>
  6. #include <vector>
  7. namespace Game::Systems {
  8. struct ArrowInstance {
  9. QVector3D start;
  10. QVector3D end;
  11. QVector3D color;
  12. float t{};
  13. float speed{};
  14. bool active{};
  15. float arc_height{};
  16. float inv_dist{};
  17. };
  18. class ArrowSystem : public Engine::Core::System {
  19. public:
  20. ArrowSystem();
  21. void update(Engine::Core::World *world, float delta_time) override;
  22. void spawn_arrow(const QVector3D &start, const QVector3D &end,
  23. const QVector3D &color, float speed = 8.0F);
  24. [[nodiscard]] auto arrows() const -> const std::vector<ArrowInstance> & {
  25. return m_arrows;
  26. }
  27. private:
  28. std::vector<ArrowInstance> m_arrows;
  29. ArrowConfig m_config;
  30. };
  31. } // namespace Game::Systems