[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: とりあえず銀行でも・・・


> より単純で、仕組みの似ている銀行プラグインを作ってみることにしました。
> しかし、幾つか分からないこと、および要望があります。

了解です。確かに、順繰りにステップアップという意味では銀行プラグインは
いいスタートだと思います。また、既にFreeTrain.Core側でかなりのインフラ
を用意しているという点でも適していると思います。


> 【GUIも無く、マップ上のオブジェクトでもない常駐モジュールの登録の仕方】
>  返済期限になったら自動的に返済するような仕組みにはClockを使うのは分かるが、
>  ハンドラを登録するモジュール自体を起動するよい方法が分からない

Clockへ登録されたハンドラはpersistentなので、借り入れを行った時に、
一旦Clockに登録してしまえば、saveされてloadされてもそのハンドラは有効です。

詳細は、FreeTrain.Coreの world/accounting/Debt.csを見てください。
銀行UIを書いてDebtオブジェクトを作りさえすれば、返済は勝手に行われます。

従って、「ハンドラを登録するモジュール」は銀行UIでよいので、
それを起動するモジュールが...という質問はmootです。


> 【plugin.xmlからパラメータを読み込みたい】
>  最初の質問とも関連するが、どのようなプラグインにすれば
>  コンストラクタにXmlNodeがもらえるのか分からない

銀行プラグインをどのように定義するのか?という質問だと思います。
私なら、単に「銀行」メニューを追加するMenuContributionにすると思います。
あるいは、現在の借り入れ状況を表示するDockingWindowを作って、それに
借り入れボタンだのを追加してもいいかもしれません。

(DockingWindowにすると、表示されているデータを動的に更新しないと
いけないので結構面倒です。A4のようにダイアログにすれば、銀行UI
表示中は時間が止まるので、データの更新問題を気にせずに済みます。
実装が大変楽になります。)

そして、パラメータなどの情報は、プラグインフォルダの中にconfig.xmlなどと
して格納すると思います。こうしたファイルは、

    PluginManager.theInstance.getPlugin("プラグイン名").loadStream("config.xml")
とやってアクセスできます。



> 【絶対日時、時刻指定で呼び出されるハンドラを追加するメソッドが欲しい】
>  現在時刻から差し引いたTimeSpanオブジェクトを作るしかないのか?

絶対時刻を表現するfreetrain.world.Timeという型があります。Time-Timeと
引き算をすることでTimeSpanオブジェクトを作ることが出来ます。

World.world.clockは現在時刻を表現し、Time型を継承しているので、
借金返済をしたい絶対時刻tがわかっているのなら、現在時刻からのTimeSpanを
計算するには単に(t-World.world.clock)とすればいいだけです。

しかし、絶対時刻でClock handlerを追加できると便利なのはその通りなので、
追加しておきます。



> 【資金だけでなく、資産(不動産、固定資産含む)が取得したい】
>  銀行の場合、借入限度額は資産を元に算出したい

すぐには出来ませんが、バランスシートの実装にも必要なのでやろうと
思っています。プログラムのどこからでも資産状況にアクセスできるようにするので、
今は上限は固定とかにしておいて、あとで書き換えていただくよりないかと。


> 【共通変数のようなものはどうしたらよいのか】
>  利率は景気指数のようなパラメータを元に算出したい
>  景気指数は株式プラグインや、ゆくゆくは発展アルゴリズムなどからも参照したい
>  このような変数、および変数値を決定するアルゴリズムは
>  どこにどのように置くべきなのか。
>  個人的にはWorld.worldのフィールドとするのが良い気がする。

景気指数はかなりグローバルに利用されると思われる情報なので、確かにWorldクラスの
変数として作ってもよいかもしれません。ちょっと考えさせてください。

他、銀行モジュールに固有の情報が必要ならば、World.otherObjectsに格納して
アクセスしてください。AccountGenreがTransactionHistoryをここに格納している
例が、core/world/accounting/AccountGenre.csにありますので参考になるかも。

World.otherObjectsに入れたものはゲームのsave/loadとともにゲーム情報
の一部として保管されます。



#関連する修正は今晩チェックインします。

_______________________________________________
FreeTrain-general mailing list
FreeTrain-general@lists.sourceforge.jp
http://lists.sourceforge.jp/mailman/listinfo/freetrain-general

題名

名前

メッセージ