Her zaman iyi bir varlık yöneticisinin birkaç çalışma moduna sahip olması gerektiğini düşündüm. Bu modlar büyük olasılıkla ortak bir arayüze yapışan ayrı kaynak modülleri olabilir. İki temel çalışma modu şöyle olacaktır:
- Üretim Modu - tüm varlıklar yereldir ve tüm meta verilerden çıkarılır
- Geliştirme Modu - değerler ek meta verilerle bir veritabanında (örn. MySQL, vb.) Saklanır. Veritabanı, paylaşılan bir veritabanını önbelleğe alan yerel bir veritabanına sahip iki katmanlı bir sistem olacaktır. İçerik oluşturucular, paylaşılan veritabanını düzenleyebilir ve güncelleyebilir ve geliştirici / KG sistemlerine otomatik olarak iletilen güncellemeleri yapabilir. Yer tutucu içeriği oluşturmak da mümkün olmalıdır. Her şey bir veritabanında bulunduğundan, üretim durumunu analiz etmek için oluşturulan raporlar ve veritabanında sorgular yapılabilir.
Tüm varlıkları paylaşılan veritabanından alıp üretim veri setini oluşturabilecek bir araca ihtiyacınız olacak.
Bir geliştirici olarak yıllarımda, böyle bir şeyi hiç görmedim, ancak bir avuç şirket için çalıştım, bu yüzden görüşüm gerçekten temsili değil.
Güncelleştirme
Tamam, bazı olumsuz oylar. Bu tasarım üzerinde genişleyeceğim.
Öncelikle, fabrika sınıflarına gerçekten ihtiyacınız yok çünkü:
TextureHandle tex = pRm->getResource<Texture>( "test.otx" );
türünü biliyorsunuz, o yüzden sadece yapın:
TextureHandle tex = new TextureHandle ("test.otx");
ama sonra, yukarıda söylemeye çalıştığım şey, zaten açık dosya isimleri kullanmayacağınız, yüklenecek dokunun, dokunun kullanıldığı model tarafından belirtileceği, aslında okunabilir bir isme ihtiyaç duymadığınız, CPU'nun kullanımı çok daha kolay olan bir 32 bit tam sayı olabilir. Yani, TextureHandle'ın yapıcısında:
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, verilerin konumunu bulmak için resource_id parametresini kullanır. Bunu yapma şekli, içinde bulunduğunuz ortama bağlı olacaktır:
Geliştirme aşamasında: akış, bir dosya adı almak için bir veritabanındaki kimliği arar (örneğin SQL kullanarak) ve ardından dosyayı açar, yerel olarak mevcut değilse veya dosyadan çıkarsa, dosya yerel olarak önbelleğe alınabilir veya bir sunucudan çıkarılabilir. tarihi geçmiş.
Yayınlanma Sürümü: akış, büyük / paketlenmiş bir dosyaya (Doom'un WAD dosyası gibi) bir ofset / boyut almak için bir anahtar / değer tablosundaki kimliği arar.