Program Listing for File ridge_based_object.h

Return to documentation for file (src/ridge_impl/ridge_based_object.h)

#pragma once

#include <functional>
#include <iterator>
#include <vector>

#include "ridge.h"
#include "ridge_impl/ridge_group.h"
#include "tal/godot_core.h"
#include "types.h"

namespace sota {

class RidgeBased {
 public:
  void print_biomes() {
    print("\n");
    for (RidgeGroup& group : _mountain_groups) {
      print("Mountain group of size ", (uint64_t)group.meshes().size());
    }
    for (RidgeGroup& group : _water_groups) {
      print("Water group of size ", (uint64_t)group.meshes().size());
    }
    for (RidgeGroup& group : _hill_groups) {
      print("Hill group of size ", (uint64_t)group.meshes().size());
    }
    for (RidgeGroup& group : _plain_groups) {
      print("Plain group of size ", (uint64_t)group.meshes().size());
    }
  }

  std::vector<std::reference_wrapper<RidgeGroup>> all_groups() {
    std::vector<std::reference_wrapper<RidgeGroup>> res;
    res.insert(res.end(), _mountain_groups.begin(), _mountain_groups.end());
    res.insert(res.end(), _water_groups.begin(), _water_groups.end());
    res.insert(res.end(), _plain_groups.begin(), _plain_groups.end());
    res.insert(res.end(), _hill_groups.begin(), _hill_groups.end());
    return res;
  }

  std::vector<RidgeGroup>& get_groups_by_biome(Biome biome) {
    switch (biome) {
      case Biome::PLAIN:
        return _plain_groups;
      case Biome::HILL:
        return _hill_groups;
      case Biome::MOUNTAIN:
        return _mountain_groups;
      case Biome::WATER:
        return _water_groups;
      default:
        printerr("Unknown biome in get_groups_by_biome");  // should be never reached
    }
    printerr("Unknown biome in get_groups_by_biome");  // should be never reached
    return _plain_groups;
  }

 protected:
  std::vector<RidgeGroup> _mountain_groups;
  std::vector<RidgeGroup> _water_groups;
  std::vector<RidgeGroup> _plain_groups;
  std::vector<RidgeGroup> _hill_groups;
  RidgeConfig _ridge_config;
};

}  // namespace sota