#ifndef WORLD_TYPE_SETTINGS_HPP_
#define WORLD_TYPE_SETTINGS_HPP_

#include <Serialize/Serialize.hpp>
#include <WorldGenerator/WorldGenerator.hpp>

class LocalWorld;

/**
 * @brief Abstract base class for settings for a specific world type.
 */
class WorldTypeSettings
{
public:
    virtual ~WorldTypeSettings() = default;

    /**
     * @brief Append the serialized settings to the `output` vector.
     */
    virtual void serialize(std::vector<uint8_t> &output) = 0;

    /**
     * @brief Make a world generator out of these settings.
     */
    virtual std::unique_ptr<WorldGenerator> makeWorldGenerator(LocalWorld &world) = 0;
};

#endif