続々 新ステージ構造考察

昨日の続きです。
キャラクタの種類をUUIDで表現すると、キャラクタを作成する関数はこんな感じになると思います。

boost::shared_ptr<game_character>
create_character(game_system& game, const hamigaki::uuid& type);

座標等の設定はどのキャラクタでも同じなので引数には加えず、create_character()の後で設定することにします。
キャラクタをプラグイン化する場合はこの形式の関数をエクスポートすればよいと思います。
エクスポートする関数を、

boost::shared_ptr<game_character>
create_character(game_system& game);

のようにしないのは、一つのDLLで複数のキャラクタを扱えるようにするためです。
例えばキャラクタエディタでキャラクタを作成する場合、DLL専用の形式でキャラクタデータを管理しておき、それぞれのキャラクタにUUIDを振っておけば、そのDLLで扱える範囲の任意のキャラクタを作成できます。


で、ここまで考えて、キャラクタをプラグイン化するのに共通処理を全てDLLにしないとマズいことに気が付きました。
現在、再度コードを整理しつつHamigaki.Gameとしてまとめているところです。
DLLにするとVorbisエンコーダまでくっついてきて無駄にデカくなりますね。
う〜む。