ゲームオブジェクトの設計その3

コンポーネント間の相互通信についても一つ困ったことが。

衝突が検知された場合、こういう仮想関数へコールバックして欲しいわけですよ。
virtual void collisionDetected(Object& target)
衝突を知らされるオブジェクトとしては、衝突した相手が誰だか知りたいのは当然のこと。
だけれど、衝突コンポーネントはそれぞれ自分の「親」であるオブジェクトを知っていないと、どのオブジェクトと衝突したかということは解らない。

各オブジェクトのほうからattachCollisionDetectable(this)とかやってコンポーネントに自分の情報を渡してやる手もあるけれど、面倒くさいのでmixinで解決できないだろうか。

template <class T>
class ICollisionDetectableMixin {
...
    parent = static_cast<T*>(this);
}

うーむ、何か格好悪い気もするけれど、他に良い方法も思いつかないし、とりあえずは良いとするか。