Saya selalu berpikir bahwa manajer aset yang baik harus memiliki beberapa mode operasi. Mode-mode ini kemungkinan besar akan menjadi modul sumber terpisah yang mengikuti antarmuka umum. Dua mode dasar operasi adalah:
- Mode Produksi - semua aset bersifat lokal dan tidak memiliki semua data meta
- Mode Pengembangan - assests disimpan dalam database (misalnya MySQL, dll) dengan meta data tambahan. Basis data akan menjadi sistem dua tingkat dengan basis data lokal yang menyimpan basis data bersama. Pembuat konten akan dapat mengedit dan memperbarui database bersama dan pembaruan secara otomatis disebarkan ke sistem pengembang / QA. Harus juga dimungkinkan untuk membuat konten placeholder. Karena semuanya ada dalam database, pertanyaan dapat dibuat pada database dan laporan yang dihasilkan untuk menganalisis keadaan produksi.
Anda membutuhkan alat yang dapat mengambil semua assest dari database bersama dan membuat dataset produksi.
Dalam tahun-tahun saya sebagai pengembang, saya belum pernah melihat yang seperti ini, meskipun saya hanya bekerja untuk beberapa perusahaan sehingga pandangan saya tidak benar-benar representatif.
Memperbarui
OK, beberapa suara negatif. Saya akan memperluas desain ini.
Pertama, Anda tidak benar-benar membutuhkan kelas pabrik karena jika Anda punya:
TextureHandle tex = pRm->getResource<Texture>( "test.otx" );
Anda tahu tipenya, jadi lakukan saja:
TextureHandle tex = new TextureHandle ("test.otx");
tapi kemudian, apa yang saya coba katakan di atas adalah bahwa Anda tidak akan menggunakan nama file eksplisit, tekstur untuk memuat akan ditentukan oleh model tekstur digunakan, sehingga Anda tidak benar-benar membutuhkan nama yang dapat dibaca manusia, itu bisa menjadi nilai integer 32 bit, yang jauh lebih mudah untuk ditangani oleh CPU. Jadi, dalam konstruktor untuk TextureHandle Anda akan memiliki:
if (texture already loaded)
update texture reference count
else
asset_stream = new AssetStream (resource_id)
asset_stream->ReadBytes
create texture
set texture ref count to 1
AssetStream menggunakan parameter resource_id untuk menemukan lokasi data. Cara melakukannya tergantung pada lingkungan tempat Anda menjalankan:
Dalam Pengembangan: aliran mencari ID dalam database (menggunakan SQL misalnya) untuk mendapatkan nama file dan kemudian membuka file, file tersebut dapat di-cache secara lokal, atau ditarik dari server jika file lokal tidak ada atau kadaluarsa.
Dalam Rilis: aliran melihat ID dalam tabel kunci / nilai untuk mendapatkan offset / ukuran menjadi file besar yang dikemas (seperti file WAD Doom).