level.hpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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(std::string const & id, Json::Value const & json,
  21. std::shared_ptr<engine::game_dispatch>);
  22. level(Json::Value const & json, std::shared_ptr<engine::game_dispatch>);
  23. ~level();
  24. void update(float delta) override;
  25. void render(graphics::renderer & renderer) override;
  26. void set_player(player * p) { player_ = p; }
  27. void add_bullet(bullet b);
  28. public:
  29. void update_waves(float delta);
  30. private:
  31. player * player_;
  32. std::vector<std::unique_ptr<actor>> actors_;
  33. std::vector<std::unique_ptr<bullet>> bullets_;
  34. struct {
  35. float const interval;
  36. float remainder{0.f};
  37. } wave_timer_;
  38. std::deque<std::vector<std::unique_ptr<actor>>> waves_;
  39. };
  40. }