// This file was generated by generate-classes.
// DO NOT EDIT THIS FILE!
#pragma once

#include "Cesium3DTiles/Library.h"
#include "Cesium3DTiles/Subtrees.h"

#include <CesiumUtility/ExtensibleObject.h>

#include <cstdint>

namespace Cesium3DTiles {
/**
 * @brief This object allows a tile to be implicitly subdivided. Tile and
 * content availability and metadata is stored in subtrees which are referenced
 * externally.
 */
struct CESIUM3DTILES_API ImplicitTiling final
    : public CesiumUtility::ExtensibleObject {
  static inline constexpr const char* TypeName = "ImplicitTiling";

  /**
   * @brief Known values for A string describing the subdivision scheme used
   * within the tileset.
   */
  struct SubdivisionScheme {
    inline static const std::string QUADTREE = "QUADTREE";

    inline static const std::string OCTREE = "OCTREE";
  };

  /**
   * @brief A string describing the subdivision scheme used within the tileset.
   *
   * Known values are defined in {@link SubdivisionScheme}.
   *
   */
  std::string subdivisionScheme = SubdivisionScheme::QUADTREE;

  /**
   * @brief The number of distinct levels in each subtree. For example, a
   * quadtree with `subtreeLevels = 2` will have subtrees with 5 nodes (one root
   * and 4 children).
   */
  int64_t subtreeLevels = int64_t();

  /**
   * @brief The numbers of the levels in the tree with available tiles.
   */
  int64_t availableLevels = int64_t();

  /**
   * @brief An object describing the location of subtree files.
   */
  Cesium3DTiles::Subtrees subtrees;
};
} // namespace Cesium3DTiles
