プロジェクトMMOゲーム。 コードベースは約3,000個のC#ファイルです。 クライアントはC#で記述されており、OGRE(C ++)がレンダリングに使用されました。
最下層の「レンダー」は、レンダーの実装であり、さまざまなエフェクト(アニメーションシーン、パーティクル)およびアニメーションをサポートするシーンオブジェクト(骨格、モーフ)の実装です。 何らかの形式での表示に関連するすべてのものがこのレイヤーに実装されました。
レンダリングファサードレイヤーは、レンダリングへのインターフェイス(ファサード)であり、C#で使用するためのすべてのネイティブコードラッパーが含まれていました。
シーングラフレイヤーは、オブジェクトとその相互作用をシミュレートする場所でした。
「ロジック」レイヤーは、オブジェクトをシミュレートし、シミュレーションオブジェクトにロジックをマップしました。
このフラグメントでは、これらのレイヤーにあった他のシステムは省略されています。たとえば、UIはありません(C ++のC#ラッパーも表します)。
グラフシーンレイヤーのオブジェクトは、位置と方向を含む最も単純なオブジェクトでした。 階層をサポートし、識別子を介して抽象的なアニメーションを管理しました(大まかに言うと、idで開始および停止します)。
創造性が再び高まった後、設計者はランタイムのロジックに応じてマテリアルの色を変更する必要がありました。 動機は次のとおりでした:「説明する時間がないので、材料の色を変えさせてください!」、しかし、ゲーム開発ではこれは一般的な習慣です(スマイリーフェイス)。
そのような機能を追加するには、マテリアルなどの特定のものを追加してオブジェクトのインターフェイスを変形し、すべてのレイヤーで転送する必要がありました。 さらに、すべてのオブジェクトが基本的にマテリアル、たとえば光源とカメラ、または合成アニメーションオブジェクト、たとえば小惑星帯などを持っているわけではありません。
考える時間、特に実験する時間が足りなかったため、この機能を独立したサービスとして一時的に配置することが決定されました。 この場合、オブジェクトのインターフェースも影響を受けませんでした。拡張メソッドの特定の実装は、グローバルコンテキストでのみです。
さらに、サービスのすべての段階およびすべてのチェーンで、サービスがシステムを破壊したり、障害の原因になったりしないように、あらゆる種類の妄想チェックが行われました。
時間が経つにつれて、非常にトリッキーなウィジェットやその他の問題のあるソリューションのためのさまざまな方法がこのサービスに登場し、姿を消しました。
そして、視覚化のすべての側面をサポートする本格的なアニメーショングラフの実装後、マテリアルの機能はサービスから削除されました。 そして、デザイナーはアニメーションの一部として材料の変更を示しました。