Browse Source

Make levels scoped to the screen size correctly.

Sam Jaffe 6 years ago
parent
commit
8b5b387c76
5 changed files with 12 additions and 11 deletions
  1. 1 0
      Resources/scripts/level/1/level.json
  2. 1 1
      include/danmaku/level.hpp
  3. 1 1
      include/danmaku/world.hpp
  4. 8 8
      src/level.cxx
  5. 1 1
      src/world.cxx

+ 1 - 0
Resources/scripts/level/1/level.json

@@ -1,5 +1,6 @@
 {
   "timeBetweenWaves":10,
+  "bounds":[1600, 900],
   "waves":[
     [
       {"id":"Drake", "position":[350, 600]},

+ 1 - 1
include/danmaku/level.hpp

@@ -26,7 +26,7 @@ namespace danmaku {
     level(Json::Value const & json, std::shared_ptr<engine::game_dispatch>);
     ~level();
     void update(float delta) override;
-    void render(graphics::renderer & renderer) override;
+    void render() override;
 
     void set_player(player * p) { player_ = p; }
     void add_bullet(bullet b);

+ 1 - 1
include/danmaku/world.hpp

@@ -25,7 +25,7 @@ namespace danmaku {
     ~world();
 
     void update(float delta) override {}
-    void render(graphics::renderer & renderer) override {}
+    void render() override {}
 
     static std::shared_ptr<world>
     load_world(std::string const & path,

+ 8 - 8
src/level.cxx

@@ -55,13 +55,11 @@ struct wave_helper {
 
 level::level(Json::Value const & json,
              std::shared_ptr<engine::game_dispatch> dispatch)
-    : engine::scene(json["id"].asString(), dispatch),
-      player_(), wave_timer_{json["timeBetweenWaves"].asFloat()},
-      waves_(wave_helper{json, graphics_manager()}()) {}
+    : level(json["id"].asString(), json, dispatch) {}
 
 level::level(std::string const & id, Json::Value const & json,
              std::shared_ptr<engine::game_dispatch> dispatch)
-    : engine::scene(id, dispatch),
+    : engine::scene(id, engine::to_vec2(json["bounds"]), dispatch),
       player_(), wave_timer_{json["timeBetweenWaves"].asFloat()},
       waves_(wave_helper{json, graphics_manager()}()) {}
 
@@ -97,6 +95,7 @@ void level::perform_oob_culling_impl(std::vector<std::unique_ptr<T>> & data) {
 
 void level::perform_oob_culling() {
   //  perform_oob_culling_impl(actors_);
+  // Optimization, pre-compute TTL for bullets
   perform_oob_culling_impl(bullets_);
 }
 
@@ -140,12 +139,13 @@ void level::update_waves(float delta) {
   }
 }
 
-void level::render(graphics::renderer & renderer) {
-  renderer.draw(player_->render_info());
+void level::render() {
+  renderer->draw(player_->render_info());
   for (auto & a : actors_) {
-    renderer.draw(a->render_info());
+    renderer->draw(a->render_info());
   }
   for (auto & b : bullets_) {
-    renderer.draw(b->render_info());
+    renderer->draw(b->render_info());
   }
+  renderer->flush();
 }

+ 1 - 1
src/world.cxx

@@ -33,7 +33,7 @@ level_from_path(Json::Value const & json, std::string const & path,
 world::world(std::shared_ptr<engine::game_dispatch> game,
              std::unique_ptr<player> player,
              std::vector<std::shared_ptr<level>> levels)
-    : engine::scene("world", game), player_(std::move(player)),
+    : engine::scene("world", {}, game), player_(std::move(player)),
       levels_(levels) {
   for (auto & l : levels_) {
     l->set_player(player_.get());