kowさんは天ざる大好き

創作に絶望すると、世界が反転した日記

ScenarioDraw

yaneSDK4dのScenarioDrawクラスは
ぼちぼちつくりかけ...
のまま、実装されていない。

それで、去年ぐらいにyaneSDK2ndから移植して、ぼちぼち作った。

それは良かったのだが、どうもTaskにごり押しで実装してしまったので、部品化されていない。
TextDrawContextで、属性の設定は出来るのだけど、
画面に二つ、シナリオビューを用意したいってときに唸ってしまう。
あとあとのことも考えて、複数のシナリオビューに対応したScenarioDrawの再実装をしてみているところだ。

シナリオを描画するだけの部品にしたいのだが、シナリオビューにどういった刺激を与えられるか、という風になるとこれは、仕様が決まっていない限りいくらでも考えられるのだ。

右クリックで読み進めるとか、セーブタスクに移動するとか、バックログとかいろいろある。ゲームが固有になればなるほど、そういったものが無数に出てくる。
すると、読み進めるための刺激を与えるために、入力コマンドを抽象化しようとする。
右クリックで読み進めるかもしれないし、マウスゼスチャーで、左右左右上下クリックで読み進めるかもしれない。
こなんはリスナで渡せばいいのかもしれない。
でも、そのコマンドはScenarioDrawの内部状態によっては、(例えばキャラクターが回転防御しているときは攻撃のコマンドなのだ!)別の意味をもつかもしれない。
あかんやん。結局、ScenarioDrawクラスをごりごり固有にかきくだすはめになる。

結局、yaneSDK4dに実装されている、ScenarioTextDrawぐらいが部品化できるあたりで、以外を使い回そうと汎用的にコーディングしても、クラス全体の見通しが悪くなったり、固有のリスナだらけになってしまう気がする。

ある程度、決まった仕様にしてしまえば、使い回せるやつもできるのだとおもうけど、そういうのって部品化しても結局、使われないままになるだろうなあと思う。

追記:
どうも、アプローチがいけないような気がする。
これはMVCでやればいいと思う。
ScenarioViewとScenarioControllerとScenarioDataクラスを用意する。
どうせ要件単位でカスタマイズしなければならないのだったら、ロジックは分離されているほういだろうし。
これをSimpleGameTaskに入れ込んで、TaskControllerでがりがり動かす。
こんなんが、無難な実装なのかなと。