
次のアイデア
◆(Point,Rectなど)座標系のクラスはinterface側に拡張メソッドで共通処理を描く
◆コントリビューションのParser, Repository, を別コントリビューションとして分離

◎コマンド関連整理（ほぼ完？）
CommandUIをUI部分のみ完全分離
コントリビューションとして登録するならやはりICommandProcedureベースが楽
　→ Enable（Availableに改名したい）の機能は分離？ ICommandProcedureWithAvailableFrag
CommandUIとICommandProcedureのセットをCommandEntryとして管理しよう
　当面、CommandUIの個々のプロパティーの変更は考えない
　→CommandEntryにCommandUIを付け替え可能にして、その変更イベントを作る

●検討事項
　KVS,キャッシュサービス(メモリ⇔ファイル) ※utilにcacheクラスがあるが、WeakRefferenceのみ
  1.WeakRefferenceの解放タイミングをキャッチできるか？
  2.CustomAttributeを付与したメソッドのコールをフックできるか？
  →【暫定案】MS標準のMemoryCacheクラスと第三者作のFileCache？を複合して使う？
  →NuGetにRedisクライアントもある（しかしサーバーが必要なのでWinアプリとしては、大げさ）
  →CacheManagerという統合サービスクラスもある（が、必要とする用途には過剰かも）

・凹型(interior)/凸型(exterior)に分かれた３Ｄオブジェクト（線路など用）
・選択ＵＩの基本、ステータス表示の基本 IInputHandler-ITargetSelector<-*SitePicker 見た目=skin
・[済]MRT昼夜同時描画/HitTest用マップ

◎開発メモ
ビルドしてobjからbinへのファイルコピー時にNFT.Framework.dllがロックする問題の暫定対処に
\NeoFT\framework\AssemblyInfo.cs
\NeoFT\core\AssemblyInfo.cs

の29行目"AssemblyVersion"をコメントアウトした。最終リリースではコメント外すべき。

■Contribution寄生パーサー
他のコントリビューションのパースに割り込んで追加処理をするためのパーサー
Genericパラメータ指定で特定クラスのコントリビューションに絞り込めるものとする。
PluginManager読み込み時に、Ctbサブクラス毎に、適用すべき寄生パーサーのリストのキャッシュを作るのはどうか？
読み込み完了時にこのキャッシュリストは破棄する。


■線路・道路の基本パターン
斜めは1:1対角線(45ﾟ)と1:2(30ﾟ)および2:1(60ﾟ)対角線の３種類
1:1線の太さは、TTDX式『1/√2』ではなく、Ａ列車式改『√2』とする
※TTDX式　Ａ列車式　Ａ列車式改『√2』
　∠|／　　　□　　　　／□／
∠|／　　　□　　　　／□／　
ＴＴＤＸはマス目の辺の中点を通るが、Ａ列車は対角頂点を通る。
Ａ列車式『改』と銘打つのは斜めに繋がるマスとマスの間も補間するため。

■３Ｄ座標空間
XNA空間での座標軸               　　NeoFTのゲーム空間
ｘ ｙ ｚ　　　　　　　　　　　　　　　ｙ ｚ ｘ
 ＼|／ 　yは上が正、x,zは奥が正　　　  ＼|／ 　zは上が正、x,yは奥が正


北　東　　後　　
　×　　左◇右　
西　南　　前　　
（Ｘ軸：東が正、Ｙ軸：北が正、Ｚ軸：上が正）
・デフォルトは北東を画面上方とする。
・InterCardinalDirectionはNE(北東)から始まる。
■Ground/Cliff Polygon のID割り当てについて
【×】左後右前→ne,nw,sw,se？TerrainPatternのIDか？
【×】後左前右→ne,nw,sw,se(09/5/3訂正）
【○】前左後右→sw,nw,ne,se(13/2/17再訂正。影響範囲、要確認）
・現仕様：ushortを4bitに分けて高さを格納。使われない頂点には0xfを適用
　MSB<far|right|near|left>LSB　
　→see GroundPolygon.PrivateMakePolygonID()
　Cliffポリゴンではfarを使わない
　→see CliffPolygon.PrivateMakePolygonID()
◎もしもID割り当てを変える場合に留意すること
・TerrainPieceTemplate.TerrainPolygonSetのコンストラクタでは
　Ground/Cliff PolygonのIDの相関性を利用している

World.ProvisionalDistrictクラスの実装
→テラインマップから、実際の地形データを生成

DistrictFactory(=マップの実体を生成する部分)は、
交換は考えなくてもよいだろう。
広範囲のマップで効率のよいデータ保持を行うには？

アイデア:
フォームのGUIを定義できるコントリビューション
プラグインのPreferenceをxmlで記述できるように→設定画面汎用化
プラグイン読み込みをフィルタするプラグイン、プラグインマネージャにそのためのイベント追加

PictureManagerがキャッシュを実装する？→キャッシュのヘルパを用意
SpriteクラスがFilterクラスを呼び出し、生成画をキャッシュに保存する。
イメージのID検索：
・他のコントリビューションから
・デシリアライズ
→デシリアライズの際に、キャッシュに無ければ生成しなければならない。
　生成するのはコントリビューション？ピクチャー？

マップ容量節約のため、ボクセル配列は[x,y,z]→[x,y]とする。
この配列は、地価データなど数値データと、ストラクチャ配列の参照を持つ。
z方向のスタックは、ストラクチャ配列に持たせるため、配列の次元は二次元
（ただし、描画時には、表示範囲のみ3次元配列に展開して、重ね合わせ判定に使用する。かも？）

memo:技術メモ
・PixelShaderでTexCoordを0～1内に収める(Wrap)するにはfrac関数を使う
・BitmapはCloneを使えばメモリ節約。しかもDisposeしても大丈夫。
・int配列は通常参照渡しだが、Cloneを使えば値渡しと同じに扱える。
・Q.いつフィルタを掛けるか。
　A.OffScreenSerfaceを更新時に。→XNAのPSで

■MultiRenderTargetの用途割り当てについて(XNA4/HiDefでは最大4つ)
ゲームビュー＆プレコンバインドでは下記
0:RGB=昼間色、A=透過情報
1:AR=グループ内ID GB=ID塗り分け
2:RGB=照り返し、A=深度
3:RGB=夜間色、A=

IDは24bit枠
・地形は(x-y)値(16bit)+0xff
・物体は global index(16bit) + local index(8bit,0xff以外)

※アイデア：オブジェクトの深度情報は、カメラの最近点のz値をベースに加算すればよさそう
　→複合型オブジェクトの保存とロードのサポート

■地形パターンについて
地形の増減は0～4。それ以上は断崖。
★ただし坂道用に緩やかな斜面のパターンを特殊例として用意。
対角線で三角形ポリゴンに分割して描画。
パターンは基本テクスチャから動的生成。側面は別プラグインとしてパターン生成＆描画。

地形テクスチャは向きに関係なく彩度最大で書く。ゲーム画面では明暗加工される。
水平面はオリジナルより若干(≒1/16)暗くなる。もっとも光量の多い面では若干明るくなる。
地形テクスチャの色合わせは、ゲーム画面の色ではなく、オリジナル画像の色で合わせる必要がある。

地形の最少グリッドと建物配置の最少グリッドは同じにする。ポリゴン数低減などの工夫は当面考えない。
線路用勾配は本来の勾配地形＋坂の手前１マス使う。
＋１マスの延長分は坂の始点と終点それぞれで、水平面との滑らかな弧を描くために使う(予定)。

・
■多言語対応の方針（下準備）
◆アプリケーション・コアのテキスト（エラーメッセージなど）
nftfw.resouce.xml, nftcore.resouce.xmlなど外部ファイル化
動的な言語切替を考えなければ、単純置き換えでよい。
◆プラグイン内テキストの多言語化対応
XmlUtil.LoadFileで読み込んだ際に、ファイルごと翻訳置換処理する。
個々のコントリビューションやGUI側で意識しないように。
◆フォームなどのUI上のテキスト
メニューのようにサイズ自動調整のものはともかく、
カスタムフォームでは文字列長次第ではレイアウトの変更も必要。
フォームそのものを別DLLに切り分けるか、
javaライクにレイアウトを子コントロールに併せて変更させるか。

■XNA4.0ライブラリの特性
◆動作環境
WinXP以降
.NET4.0/XNA4.0/DirectX9.0c以上/
グラフィックボード ShaderModel2.0対応
◆配布
現時点でMS側の明確な指針なし。バイナリを同梱してもOK？という記事を読んだ
ClickOnceを使う？と.NET/XNAを自動インストールしてくれる？要調査

■優先度：高■
ClockEvent指定時間の最少単位を決める必要あり。それより大きくTickを進めるときは
最小単位に分割してループで回して各Queueを巡回する必要あり。
○Ｚバッファを使った２Ｄ描画は可能か？→疑似2D描画：XNAライブラリで実現
OverrideTableもコントリビューション化しよう。
気候を定義するクラス、→季節オーバーライドを定義。パーサー、画像保持配列
■優先度：中■
☆特殊描画系ルーチン16ビットモードは実装不完全→XNAでは常に32bitモードなので不要

■優先度：低■
PreFormatContribution：他のコントリビューションがplugin.xmlを読む前に修正を加えることができる。
地域マップモード:
	＋広域マップゲームを読み込む→地域選択→個別ゲーム
	＋個別ゲームはマップの人口、産業、需要などと、路線図を広域マップからアクセスできるように保存する。
	＋個別マップでマップ外に接続すると、隣の個別マップとの接続口になる。
	＋上記で、隣の個別マップでは、接続口からマップ内の路線や駅と繋がないと、機能しない。
	
画像
オーバーライド【高次元】
+早朝：午前：午後：夕方：夜：深夜
+曜日指定（土日祝日)
+日付（毎年）指定（毎月指定）
+春：夏：秋：冬
+月指定
レイヤー【中次元】
アニメーション【低次元】
+フレーム番号、ウェイト
