// // level.hpp // danmaku // // Created by Sam Jaffe on 5/26/19. // Copyright © 2019 Sam Jaffe. All rights reserved. // #pragma once #include "game/engine/scene.hpp" #include #include #include #include namespace danmaku { class actor; class bullet; class player; class level : public engine::scene { public: level(std::string const & id, Json::Value const & json, std::shared_ptr); level(Json::Value const & json, std::shared_ptr); ~level(); void update(float delta) override; void render() override; void set_player(player * p) { player_ = p; } void add_bullet(bullet b); private: template void perform_oob_culling_impl(std::vector> &); void perform_oob_culling(); void update_waves(float delta); void update_object(float delta); void check_collisions(); private: player * player_; std::vector> actors_; std::vector> bullets_; struct { float const interval; float remainder{0.f}; } wave_timer_; std::deque>> waves_; }; }