jubeon::storages::ResourceManagerの理想的な仕様は何かな? - PastFantasy1640/jubeon GitHub Wiki
ResourceManagerについて
リソースを無駄にせずに、かつ適切にリソースを管理したい。 全てのファイルがローカルにあるとは限らない。 同じリソースを何度も読み込みたくない。違うクラスで同じリソースを管理することの無いようにしたい
理想的な仕組み
その1 ファイル名アクセス
何かこう、get("ファイル名")ってすれば、それで取得できる。 →問題点は、ファイル名が長いとめんどくさい。
その2 マッピング
というわけで、get("固有のキー")とすることで取得できる。この時、内部的にキーとファイル名のマップを作成して保持する。
その3 様々な(といっても3つの)入力データ対応
ローカルのファイルからはもちろん、メモリ上やストリームから読み出しも可能。
要求仕様
まず入力先
2つの型形式。
- string filename
- 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()