jubeon::storages::ResourceManagerの理想的な仕様は何かな? - PastFantasy1640/jubeon GitHub Wiki

ResourceManagerについて

リソースを無駄にせずに、かつ適切にリソースを管理したい。 全てのファイルがローカルにあるとは限らない。 同じリソースを何度も読み込みたくない。違うクラスで同じリソースを管理することの無いようにしたい

理想的な仕組み

その1 ファイル名アクセス

何かこう、get("ファイル名")ってすれば、それで取得できる。 →問題点は、ファイル名が長いとめんどくさい。

その2 マッピング

というわけで、get("固有のキー")とすることで取得できる。この時、内部的にキーとファイル名のマップを作成して保持する。

その3 様々な(といっても3つの)入力データ対応

ローカルのファイルからはもちろん、メモリ上やストリームから読み出しも可能。

要求仕様

まず入力先

2つの型形式。

  1. string filename
  2. sf::InputStream

メモリから読み出したいときはInputStreamを実装してくれ。

ResourceManager::setKey("キー名",Resource(ID代わり)); 特定のリソースにキー名を施す。trueなら設定できた すでにキー名が施されている場合は…できないことにする。falseを返す。

Resource tex_res = ResourceManager::get("キー"); キーがない場合エラーになる

Resource tex_res = ResourceManager::getf("ファイル名"); なければセットするがファイルはロードしない。あればそれを返す。IDがなければ生成する。

Resource tex_res = ResourceManager::geti(inputstreamの実体); あればそれを返す。なければ設定する。 Resourceの正体は、IDを含んだもの。

仕様

使い方を見ながら

ファイルから読み込み

Resource tex_res = ResourceManager::getf("ファイル名");

tex_res.load(); この時点で、読み込まれていないときは読み込む。

tex_res.loadAsync(); 非同期で読み込み?

tex_res.isReady(); リソースが使用可能か? ロード中だったり、ロードしてなかったり、リソースが使用不可だったらfalseを返す。

tex_res.getTexture(); テクスチャがロードされていればテクスチャを返すが、ロードがまだならロードする。

tex_res.getTexture()