ゲームオブジェクト設計の変遷


● 黎明期

扱っているゲームオブジェクト(エンティティ)は人間型のキャラクターだけであり、それが最も小さな単位だったため、霊魂にたとえた名前をもつ基底クラスからすべてのエンティティクラスが派生している。ネットワークからデータを取得して動くのはGhostPuppetだけであり、自分のデータをネットワークに送出するのはGhostOfMeとサーバ上のGhostServerBotのみであった。ローカルに情報をやりとりするGhostはGhostInteractiveとし、そのような機能を持たなくてはならないエンティティはGhostではなくこちらから派生させた。管理層はそれぞれのオブジェクトを型ごとに別々のリストに入れ、それぞれの型に相応しい処理を施していた。このままでは新しくGhostの種類が増えるたびに管理層はそれをどう扱うかを新しく定義しなくてはならなくなるし実際そうなりつつあった。




● 変遷期

Ghostに管理層が施す処理はパケットのネットワークへの送出、ネットワークからのパケットを適用、ローカルでのインタラクションのやりとり、の3つであることが分ってきたので、それぞれの処理に使われるインターフェイスをGhostから一段階継承した位置で定義した。各具象クラスはいわゆる菱形継承を使って、エンティティの内部状態の型としてのGhost、それぞれ施される処理としてのGhostInteractiveを始めとする三種類の内の任意のインターフェイス、を同時に取得して構築された。黎明期のGhostInteractiveの構造を延長するようにもう2つの機能を付け足したこの設計には重大な欠陥があった。

つづく。