自作ノベルゲームエンジンですが、スクリプトコンバータとスクリプトプレイヤーの二つに分かれます。名前の通り、前者が人間が書いたソーススクリプトから中間言語を生成し、その中間言語を元に後者が動作するという寸法です。
で、今作ってるのはスクリプトプレイヤーのほうです。とりあえず名前は「INGP」としています。コンバータのほうは「INGC」になるでしょう。両方まとめて「ING」とでも呼びましょうか。
ちなみに前に作ってたのは「SAG」でした。こっちもプレイヤーとコンバータに別れてましたが個別の名前はなし。まぁ過去の話。

で、これらの違いですが設計方針が大きく異なるため、作り直しをしています。ただしSAGコンバータは手をつけていなかったので、プレイヤーに関するところだけですが。
どう方針が違うか、といいますと、ユーザから隠蔽する部分とそうでない部分を明確にわけました。それからSAGではGUIを制御するクラスに中間言語を読み込んで処理する部分も含まれていましたが、これを分離しました。これによりGUIでの処理をほぼユーザのキー・マウス入力に集中させることができるはずです。
まぁよくわからん説明ですが、要するに「一極集中」の悪い見本をやめて「分散処理」をすることにしました。・・・というかオブジェクト指向の基本ですね。
それに加えて、SAGでは将来の拡張性を考えるあまりソースが複雑になってしまっていたのでその部分を見直しました。そのためINGではバグフィックスのしやすさを重視し、クラスに対して明確な役割分担をさせています。各々のクラスは専門化し、他のクラスへの干渉は極力控えるようになっています。

まぁそんなところでしょうか。ただまだINGの試作型が出来ていないのでテストもしていません。大半はSAGのソースの良い部分を抜き出してあるのでバグも少ないでしょうが、どうなることやら。

ちなみに昨日は夜に再開しようと思っていたのですが、朝寝ようとしたら親から電話があって起こされてしまいました。どうにも寝付けないので、昼過ぎから夕方に掛けてスクリプト処理の主に画像に関する部分を書いていました。とりあえずGUIの部分を書けばテストはできそうですが、それはまた後日・・・。

・メモ
C#を使っていて少し戸惑ったこと。それは列挙型のキャストに関すること。
列挙型を文字列に変換するのはすぐにわかったのですが、その逆がなかなかわかりませんでした。で、調べてみると解決
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_016/cs2_016_04.html#cs1614

enum Enume{...}と定義したとします。
string strをEnumeにキャストするには
(Enume)Enum.Parse(Type.GetType("hoge.Enume"),str)
といった感じにするとできます。
hogeにはEnumeを定義したNamespaceやクラス名称を入れましょう。
また最初の括弧つきEnumeも必須です。

しかし、これは使いにくいな・・・本来なら使わなくてもいい代物なんだろうか。

・17:30追記
文字列から列挙型へのキャストに関して、Enumeをクラス内で定義した場合どうも上の方法だと上手くいかないようです。
対処法としてはEnume hogehogeと定義して
(Enume)Enum.Parse(hogehoge.GetType(),str)
としてやるといいようです

コメント