| 1 |
・プラグイン関連ファイルをParamReaderで抽象化、最終的にStreamで読み込むように |
| 2 |
・前景と背景に分かれた3Dオブジェクト(線路など用) |
| 3 |
・選択UIの基本、ステータス表示の基本 |
| 4 |
・MRT昼夜同時描画/HitTest用マップ |
| 5 |
|
| 6 |
◎開発メモ |
| 7 |
ビルドしてobjからbinへのファイルコピー時にNFT.Framework.dllがロックする問題の暫定対処に |
| 8 |
\NeoFT\framework\AssemblyInfo.cs |
| 9 |
\NeoFT\core\AssemblyInfo.cs |
| 10 |
|
| 11 |
の29行目"AssemblyVersion"をコメントアウトした。最終リリースではコメント外すべき。 |
| 12 |
|
| 13 |
■線路・道路の基本パターン |
| 14 |
斜めは1:1対角線(45゚)と1:2(30゚)および2:1(60゚)対角線の3種類 |
| 15 |
1:1線の太さは、TTDX式『1/√2』ではなく、A列車式改『√2』とする |
| 16 |
※TTDX式 A列車式 A列車式改『√2』 |
| 17 |
∠|/ □ /□/ |
| 18 |
∠|/ □ /□/ |
| 19 |
TTDXはマス目の辺の中点を通るが、A列車は対角頂点を通る。 |
| 20 |
A列車式『改』と銘打つのは斜めに繋がるマスとマスの間も補間するため。 |
| 21 |
|
| 22 |
■3D座標空間 |
| 23 |
XNA空間での座標軸 NeoFTのゲーム空間 |
| 24 |
x y z y z x |
| 25 |
\|/ yは上が正、x,zは奥が正 \|/ zは上が正、x,yは奥が正 |
| 26 |
|
| 27 |
|
| 28 |
北 東 後 |
| 29 |
× 左◇右 |
| 30 |
西 南 前 |
| 31 |
(X軸:東が正、Y軸:北が正、Z軸:上が正) |
| 32 |
・デフォルトは北東を画面上方とする。 |
| 33 |
・InterCardinalDirectionはNE(北東)から始まる。 |
| 34 |
■Ground/Cliff Polygon のID割り当てについて |
| 35 |
【×】左後右前→ne,nw,sw,se?TerrainPatternのIDか? |
| 36 |
【×】後左前右→ne,nw,sw,se(09/5/3訂正) |
| 37 |
【○】前左後右→sw,nw,ne,se(13/2/17再訂正。影響範囲、要確認) |
| 38 |
・現仕様:ushortを4bitに分けて高さを格納。使われない頂点には0xfを適用 |
| 39 |
MSB<far|right|near|left>LSB |
| 40 |
→see GroundPolygon.PrivateMakePolygonID() |
| 41 |
Cliffポリゴンではfarを使わない |
| 42 |
→see CliffPolygon.PrivateMakePolygonID() |
| 43 |
◎もしもID割り当てを変える場合に留意すること |
| 44 |
・TerrainPieceTemplate.TerrainPolygonSetのコンストラクタでは |
| 45 |
Ground/Cliff PolygonのIDの相関性を利用している |
| 46 |
|
| 47 |
World.ProvisionalDistrictクラスの実装 |
| 48 |
→テラインマップから、実際の地形データを生成 |
| 49 |
|
| 50 |
DistrictFactory(=マップの実体を生成する部分)は、 |
| 51 |
交換は考えなくてもよいだろう。 |
| 52 |
広範囲のマップで効率のよいデータ保持を行うには? |
| 53 |
|
| 54 |
アイデア: |
| 55 |
フォームのGUIを定義できるコントリビューション |
| 56 |
プラグインのPreferenceをxmlで記述できるように→設定画面汎用化 |
| 57 |
プラグイン読み込みをフィルタするプラグイン、プラグインマネージャにそのためのイベント追加 |
| 58 |
|
| 59 |
PictureManagerがキャッシュを実装する?→キャッシュのヘルパを用意 |
| 60 |
SpriteクラスがFilterクラスを呼び出し、生成画をキャッシュに保存する。 |
| 61 |
イメージのID検索: |
| 62 |
・他のコントリビューションから |
| 63 |
・デシリアライズ |
| 64 |
→デシリアライズの際に、キャッシュに無ければ生成しなければならない。 |
| 65 |
生成するのはコントリビューション?ピクチャー? |
| 66 |
|
| 67 |
マップ容量節約のため、ボクセル配列は[x,y,z]→[x,y]とする。 |
| 68 |
この配列は、地価データなど数値データと、ストラクチャ配列の参照を持つ。 |
| 69 |
z方向のスタックは、ストラクチャ配列に持たせるため、配列の次元は二次元 |
| 70 |
(ただし、描画時には、表示範囲のみ3次元配列に展開して、重ね合わせ判定に使用する。かも?) |
| 71 |
|
| 72 |
memo:技術メモ |
| 73 |
・PixelShaderでTexCoordを0~1内に収める(Wrap)するにはfrac関数を使う |
| 74 |
・BitmapはCloneを使えばメモリ節約。しかもDisposeしても大丈夫。 |
| 75 |
・int配列は通常参照渡しだが、Cloneを使えば値渡しと同じに扱える。 |
| 76 |
・Q.いつフィルタを掛けるか。 |
| 77 |
A.OffScreenSerfaceを更新時に。→XNAのPSで |
| 78 |
|
| 79 |
■MultiRenderTargetの用途割り当てについて |
| 80 |
ゲームビュー&プレコンバインドでは下記 |
| 81 |
0:RGB=昼間色、A=透過情報 |
| 82 |
1:RGB=ID塗り分け、A=深度 |
| 83 |
2:RGB=夜間色、A=照り返し |
| 84 |
|
| 85 |
IDは24bit枠 |
| 86 |
・地形は(x-y)値(16bit)+0xff |
| 87 |
・物体は global index(16bit) + local index(8bit,0xff以外) |
| 88 |
|
| 89 |
※アイデア:オブジェクトの深度情報は、カメラの最近点のz値をベースに加算すればよさそう |
| 90 |
→複合型オブジェクトの保存とロードのサポート |
| 91 |
|
| 92 |
■地形パターンについて |
| 93 |
地形の増減は0~4。それ以上は断崖。 |
| 94 |
★ただし坂道用に緩やかな斜面のパターンを特殊例として用意。 |
| 95 |
対角線で三角形ポリゴンに分割して描画。 |
| 96 |
パターンは基本テクスチャから動的生成。側面は別プラグインとしてパターン生成&描画。 |
| 97 |
|
| 98 |
地形テクスチャは向きに関係なく彩度最大で書く。ゲーム画面では明暗加工される。 |
| 99 |
水平面はオリジナルより若干(≒1/16)暗くなる。もっとも光量の多い面では若干明るくなる。 |
| 100 |
地形テクスチャの色合わせは、ゲーム画面の色ではなく、オリジナル画像の色で合わせる必要がある。 |
| 101 |
|
| 102 |
地形の最少グリッドと建物配置の最少グリッドは同じにする。ポリゴン数低減などの工夫は当面考えない。 |
| 103 |
線路用勾配は本来の勾配地形+坂の手前1マス使う。 |
| 104 |
+1マスの延長分は坂の始点と終点それぞれで、水平面との滑らかな弧を描くために使う(予定)。 |
| 105 |
|
| 106 |
・ |
| 107 |
■多言語対応の方針(下準備) |
| 108 |
◆アプリケーション・コアのテキスト(エラーメッセージなど) |
| 109 |
nftfw.resouce.xml, nftcore.resouce.xmlなど外部ファイル化 |
| 110 |
動的な言語切替を考えなければ、単純置き換えでよい。 |
| 111 |
◆プラグイン内テキストの多言語化対応 |
| 112 |
XmlUtil.LoadFileで読み込んだ際に、ファイルごと翻訳置換処理する。 |
| 113 |
個々のコントリビューションやGUI側で意識しないように。 |
| 114 |
◆フォームなどのUI上のテキスト |
| 115 |
メニューのようにサイズ自動調整のものはともかく、 |
| 116 |
カスタムフォームでは文字列長次第ではレイアウトの変更も必要。 |
| 117 |
フォームそのものを別DLLに切り分けるか、 |
| 118 |
javaライクにレイアウトを子コントロールに併せて変更させるか。 |
| 119 |
|
| 120 |
■XNA4.0ライブラリの特性 |
| 121 |
◆動作環境 |
| 122 |
WinXP以降 |
| 123 |
.NET4.0/XNA4.0/DirectX9.0c以上/ |
| 124 |
グラフィックボード ShaderModel2.0対応 |
| 125 |
◆配布 |
| 126 |
現時点でMS側の明確な指針なし。バイナリを同梱してもOK?という記事を読んだ |
| 127 |
ClickOnceを使う?と.NET/XNAを自動インストールしてくれる?要調査 |
| 128 |
|
| 129 |
■優先度:高■ |
| 130 |
ClockEvent指定時間の最少単位を決める必要あり。それより大きくTickを進めるときは |
| 131 |
最小単位に分割してループで回して各Queueを巡回する必要あり。 |
| 132 |
○Zバッファを使った2D描画は可能か?→疑似2D描画:XNAライブラリで実現 |
| 133 |
OverrideTableもコントリビューション化しよう。 |
| 134 |
気候を定義するクラス、→季節オーバーライドを定義。パーサー、画像保持配列 |
| 135 |
■優先度:中■ |
| 136 |
☆特殊描画系ルーチン16ビットモードは実装不完全→XNAでは常に32bitモードなので不要 |
| 137 |
|
| 138 |
■優先度:低■ |
| 139 |
PreFormatContribution:他のコントリビューションがplugin.xmlを読む前に修正を加えることができる。 |
| 140 |
地域マップモード: |
| 141 |
+広域マップゲームを読み込む→地域選択→個別ゲーム |
| 142 |
+個別ゲームはマップの人口、産業、需要などと、路線図を広域マップからアクセスできるように保存する。 |
| 143 |
+個別マップでマップ外に接続すると、隣の個別マップとの接続口になる。 |
| 144 |
+上記で、隣の個別マップでは、接続口からマップ内の路線や駅と繋がないと、機能しない。 |
| 145 |
|
| 146 |
画像 |
| 147 |
オーバーライド【高次元】 |
| 148 |
+早朝:午前:午後:夕方:夜:深夜 |
| 149 |
+曜日指定(土日祝日) |
| 150 |
+日付(毎年)指定(毎月指定) |
| 151 |
+春:夏:秋:冬 |
| 152 |
+月指定 |
| 153 |
レイヤー【中次元】 |
| 154 |
アニメーション【低次元】 |
| 155 |
+フレーム番号、ウェイト |