﻿#pragma once

#include <array>
#include <cstddef>

// ゲーム内で使う画像を、ファイル名ではなく識別子で指定する
enum class ImageId
{
    Player,
    Enemy,
    Tile,
    Goal,
    Count
};

// DXライブラリの画像ハンドルと画像サイズをまとめて保持する
struct ImageResource
{
    int handle = -1;
    int width = 0;
    int height = 0;
};

// 画像の読み込み、参照、解放を一括して管理する
class ImageManager
{
public:
    ImageManager();
    ~ImageManager();

    // ハンドルの二重解放を防ぐため、画像管理オブジェクトはコピーしない
    ImageManager(const ImageManager&) = delete;
    ImageManager& operator=(const ImageManager&) = delete;

    // 必須画像をすべて読み込む。1つでも失敗した場合はfalseを返す
    bool LoadAll();
    // 読み込み済みの画像情報を識別子から取得する
    const ImageResource& Get(ImageId id) const;

private:
    void Release();

    // enumのCountを配列要素数として利用する
    static constexpr std::size_t imageCount =
        static_cast<std::size_t>(ImageId::Count);

    std::array<ImageResource, imageCount> resources = {};
};
