• Showing Page History #105996

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

新しいコントリビューションの追加

1. コントリビューションクラスの追加

  1. namespace nft.contributions.ui
  2. {
  3. /// <summary>
  4. /// CtbMenuItem の概要の説明です。
  5. /// </summary>
  6. public class CtbMenuItem : Contribution
  7. {
  8. /// <summary>
  9. /// Contributes a menu and submenu items to mainmenu.
  10. ///
  11. /// This contribution can add several items at once.
  12. /// </summary>
  13. public CtbMenuItem(Plugin p, ParamsReader e)
  14. : base(p, e)
  15. {
  16. // 実装を定義
  17. }
  18. }
  19. }

2. コントリビューションタイプの宣言 plugin.xmlに以下のような記述を追加する

  1. <declare-contribution type="MenuItem">
  2. <name>Menu items</name>
  3. <class name="nft.contributions.ui.CtbMenuItem"/>
  4. <!--<factory-class name="nft.framework.plugin.DefaultContributionFactory"/> 省略化-->
  5. </declare-contribution>

3. コントリビューションの追加 plugin.xmlに以下のような記述を追加する。 任意の数だけ記述することが出来る。2 とは別のplugin.xmlに書くこともできる。

  1. <contribution type="MenuItem" id="hogehoge">
  2. <name>Sample Menu Item</name>
  3. <description>サンプルのメニュー項目</description>
  4. <!--その他固有のパラメータ-->
  5. </contribution>

4. NeoFT起動 起動時にCtbMenuItemのコンストラクタが呼ばれるようになる。 引数 ParamsReader には 3 に記述したノードの内容が含まれる。

特殊例

バイナリモジュール

BinaryModule を継承して作る ゲームシステムに必須ではない拡張コードを伴う。 基本的にはそれ単体で完結するシングルトン的利用を想定しているが、同じクラスを複数登録することもできる。 (その場合はxmlにパラメーターを記述して挙動を変えたりすることになると思われる)

  <contribution type="binary" id="TestModule">
    <name>TestBinaryModule</name>
    <class name="nft.debug.TestBinaryModule" codebase=".Core"/>
  </contribution>

グローバルモジュール

IGlobalModule を実装したクラス コントリビューションの一種ではなくゲームシステムに必須なモジュール。 ただし、モジュールごとに別な実装による置き換えは想定している。 アプリケーション内では GlobalModules で管理されている。

デフォルトコントリビューションファクトリ

DefaultContributionFactory FreeTrainで存在したContributionFactoryの概念を引き継いだもの。 コントリビューションごとに独自のファクトリを宣言できるが、基本的にはこれ一つで事足りるはず。

匿名コントリビューション

CtbAnonymous クラスを継承して作る

  <contribution type="Anonymous" id="Test_CtbAnonymous">
    <name>匿名コントリビューション</name>
    <description>ファクトリ宣言を必要としない、孤立したコントリビューションのサンプル(CtbAnonymousを継承すべし)</description>
    <class name="nft.debug.TestAnonymousCtb" codebase=".Core"/>
  </contribution>
実際には type=Anonymous の宣言がメインのplugin.xmlに書いてある シングルトンのような孤立したコントリビューションを気軽に追加できるように作ったものだが、 改めて考えると、そういう物は基本コードで成り立つので、BinaryModule として定義する方がよい。 (各プラグインの初期化順に影響するため)

今後処遇検討