combat_dust_renderer.h 946 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #pragma once
  2. #include <QVector3D>
  3. #include <vector>
  4. namespace Engine::Core {
  5. class World;
  6. }
  7. namespace Render::GL {
  8. class Renderer;
  9. class ResourceManager;
  10. struct StoneImpactEffect {
  11. QVector3D position;
  12. float start_time{0.0F};
  13. float duration{5.0F};
  14. float radius{6.0F};
  15. float intensity{1.5F};
  16. };
  17. class StoneImpactTracker {
  18. public:
  19. static auto instance() -> StoneImpactTracker &;
  20. void add_impact(const QVector3D &position, float current_time,
  21. float radius = 6.0F, float intensity = 1.5F);
  22. void update(float current_time);
  23. [[nodiscard]] auto impacts() const -> const std::vector<StoneImpactEffect> & {
  24. return m_impacts;
  25. }
  26. void clear() { m_impacts.clear(); }
  27. private:
  28. StoneImpactTracker() = default;
  29. std::vector<StoneImpactEffect> m_impacts;
  30. };
  31. void render_combat_dust(Renderer *renderer, ResourceManager *resources,
  32. Engine::Core::World *world);
  33. } // namespace Render::GL