level.hpp 928 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //
  2. // level.hpp
  3. // danmaku
  4. //
  5. // Created by Sam Jaffe on 5/26/19.
  6. // Copyright © 2019 Sam Jaffe. All rights reserved.
  7. //
  8. #pragma once
  9. #include "game/engine/scene.hpp"
  10. #include <deque>
  11. #include <json/forwards.h>
  12. #include <memory>
  13. #include <vector>
  14. namespace danmaku {
  15. class actor;
  16. class bullet;
  17. class player;
  18. class level : public engine::scene {
  19. public:
  20. level(Json::Value const & json, std::shared_ptr<engine::game_dispatch>);
  21. ~level();
  22. void update(float delta) override;
  23. void render(graphics::renderer & renderer) override;
  24. void add_bullet(bullet b);
  25. public:
  26. void update_waves(float delta);
  27. private:
  28. player * player_;
  29. std::vector<std::unique_ptr<actor>> actors_;
  30. std::vector<std::unique_ptr<bullet>> bullets_;
  31. struct {
  32. float const interval;
  33. float remainder{0.f};
  34. } wave_timer_;
  35. std::deque<std::vector<std::unique_ptr<actor>>> waves_;
  36. };
  37. }