次のような対称関係マトリックスがあるとします。
それぞれの「結果」が小さなコードであることを除いて。
私のシナリオ:Entity
互いに「衝突」するオブジェクトがたくさんあります。各エンティティにはCollisionType
値 (列挙型) があります。設計には、異なる CollisionType が互いに出会ったときにエンティティがどのように動作するかを説明する関係マトリックスが存在します。
新しい CollisionTypes を簡単に追加できるクリーンで高性能な方法で、関係を表現し、その上にロジックを実装するにはどうすればよいでしょうか? 私の考えでは、2D Switch ステートメントのように見えます。
例 (貧弱な) ソリューション:
void CollideEntities( Entity e1, Entity e2 ) {
CollisionType t1 = e1.GetCollisionType();
CollisionType t2 = e2.GetCollisionType();
// perform basic logic based on t1 & t2
if ( (t1 == COL_SOLID && t2 == COL_SQUISHY) || (t1 == COL_SQUISHY && t2 == COL_SOLID) ) {
// do stuff..
} else if ( (t1 == COL_SOLID && t2 == COL_DAMAGE) || (t1 == COL_DAMAGE && t2 == COL_SOLID) ) {
// do other stuff..
} // and so on...
}
多くの潜在的な解決策は明らかですが、特にクリーンで効率的で、新しいタイプを簡単に追加できるとは思えません...