level.hpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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() override;
  26. void set_player(player * p) { player_ = p; }
  27. void add_bullet(bullet b);
  28. private:
  29. template <typename T>
  30. void perform_oob_culling_impl(std::vector<std::unique_ptr<T>> &);
  31. void perform_oob_culling();
  32. void update_waves(float delta);
  33. void update_object(float delta);
  34. void check_collisions();
  35. private:
  36. player * player_;
  37. std::vector<std::unique_ptr<actor>> actors_;
  38. std::vector<std::unique_ptr<bullet>> bullets_;
  39. struct {
  40. float const interval;
  41. float remainder{0.f};
  42. } wave_timer_;
  43. std::deque<std::vector<std::unique_ptr<actor>>> waves_;
  44. };
  45. }