私はコンポーネント ベースのゲーム エンジンを作成しています。次の設計を使用して、可能な限りロジックからデータを分離しようとしています。
Engine
/ | \
EntityManager ComponentManager SystemManager
(vector of entities) (map of (entities - vector of components)) (vector of systems)
基本的に、これらすべてのマネージャーは、エンティティ、コンポーネント、およびシステムの所有者にすぎません。
これらの簡単な説明は次のとおりです。
エンティティ: ゲーム内のすべてのオブジェクト (および UUID) を表すクラス。
Component : (そのサブクラスが) Entity の特定のものに関するデータのみを ex として保持する抽象クラス。PositionComponent は、Entity の x、y 値のみを持ちます。
システム: (そのサブクラスが) エンティティに作用するすべてのロジックを持つ抽象クラス。PositionSystem は、エンジンによって渡された Process() メソッドに操作対象のエンティティを持ち、事前定義されたロジックを使用してコンポーネントの値を変更します。
私の問題は、オブジェクトにこのようなシナリオを伝えるにはどうすればよいですか? たとえば、システム (SystemManager に存在する) から ComponentManager にメッセージを送信して、システムが処理している現在のエンティティの特定のコンポーネントを取得するにはどうすればよいですか (これを行うためのメソッドが ComponentManagers に既にあるため、私の問題は、これを行うための適切な方法の設計は何ですか)? または、一般に、オペレーティング システムのようにモデル化されたプログラム
(内部カーネルから外部世界までのレイヤー) は、どのようにしてすべてのレイヤー間の通信を実現できるのでしょうか? この目的に役立つ優れた設計パターンはありますか?
どんな助けでも感謝します。