| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- //
- // 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 <deque>
- #include <json/forwards.h>
- #include <memory>
- #include <vector>
- 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<engine::game_dispatch>);
- level(Json::Value const & json, std::shared_ptr<engine::game_dispatch>);
- ~level();
- void update(float delta) override;
- void render() override;
- void set_player(player * p) { player_ = p; }
- void add_bullet(bullet b);
- private:
- template <typename T>
- void perform_oob_culling_impl(std::vector<std::unique_ptr<T>> &);
- void perform_oob_culling();
- void update_waves(float delta);
- void update_object(float delta);
- void check_collisions();
- private:
- player * player_;
- std::vector<std::unique_ptr<actor>> actors_;
- std::vector<std::unique_ptr<bullet>> bullets_;
- struct {
- float const interval;
- float remainder{0.f};
- } wave_timer_;
- std::deque<std::vector<std::unique_ptr<actor>>> waves_;
- };
- }
|