ねねチャレ 7日目 !! コンポーネント化(すいませんリファクタリングですまじスイマセン)

7日目!

二回目のリファクタリングしました!
(ネタがないわけじゃないです・・・工数と予定が合わないのです・・・。)

今日の目的

先日のTransformにコンポーネント指向を取り入れます。

コンポーネント指向

システムを独立した結合の弱い再利用可能なコンポーネント群で構成する。
というのがコンポーネント指向の趣旨のようです。(By wiki)
ゲーム製作に置き換えると、アプリケーション層のオブジェクトに対して エンジン層/アプリケーション層のコンポーネントを付与することでゲームのロジックやビジュアルを組み立てていくといった感じでしょうか。
unityやUe4などのゲームエンジンもこの思考を取り入れていますね。

ならばきっとNENEEngineも取り入れているでしょう。
それでは、最小のコードを見ていきます。

github.com

最小コード(の差分)です。
簡単に紹介していきます。

IBehavior

コンポーネントの基本となるインターフェースです。
検索要素としての実体名と型情報を持っています。
型情報は持たせなくともDynamicCastによるnull比較で代用可能ですが、
私はこちらのほうが好きなので持たせています。

Behavior

コンポーネントを持つクラスです。
Unity(C#)では出来ない可変長テンプレートによる完全コンストラクタなコンポーネントを生成できるのは自分的にポイント高いです。
コンポーネントも親を持つので、更新中に削除されることを考慮して破棄を遅延して行っています。

まとめ

一応、ねねエンジンに実装されているであろう機能は実装する方針なのでコンポーネントを実装してみました。
コンポーネントとして付与できるようになると、圧倒的にゲームエンジン感できますねーーー。
そろそろ、絵的な進捗がないと怒られそうなので次はシェーダ周りをやろうかと。

8日目は「シェーダーでごにょごにょ」を行う予定です!

進捗!

絵的なものはありません!

github.com