#pragma once

#include "core/world/Registry.hpp"

namespace world::module::core {

/// Minimal root module
class Core final: public Module {
public:
    Core() { }
    ~Core() { }

    const char *getName() const override { return "core"; }
    const char *getRequirements() const override { return ""; }
    void setup(Registry::Loader);

    struct IDS {
        size_t AIR;
        size_t DIRT;
        size_t GRASS;
        size_t ROCK;
        size_t SAND;
        size_t WATER;

        size_t PLAYER;
    } ids;

    static _FORCE_INLINE_ Core *Get() {
        assert(sInstance != nullptr && "Uninitialized module");
        return sInstance;
    }

private:
    static Core *sInstance;
};
}
