SVX日記
2025-06-20(Fri) PCD(パブリック・サーキット・データ)フォーマットを策定
開発中のゲーム「TopDrivin'」は、さかのぼれば「見せてもらおうかッ! WebAssemblyの性能とやらをッ!」から始まったプロジェクトだ。最近では「F1観戦に先立ってサーキットを体験したい」が目的になっているが。
その点において「TopDrivin'」の圧倒的な利点は「ほぼコースデータを作る必要がない」という点である。空撮画像の上を走らせる、という都合からくる制限は少なくないものの、究極的には「スターティンググリッドの緯度経度情報」だけでレースゲームができてしまうのだ。ゲームシステムのプログラミングは好きだが、レベルデザインにまるで興味のない自分には、うってつけのプロジェクトである。
そしてその開発中にもF1のカレンダは進んでいく。来週末はオーストリアGPだ。サーキットはレッドブル・リンク、と……コースデータもだいぶ増えてきたなぁ……このままmainに追記し続けるのもなぁ……Courseクラスに出すべきだよな……いや、そもそもデータは外から与えられるようにすべきでは……んをッ!? ならばJSON形式にして、ウェブ上に置く形にするのがよいのでは!?
{
"name": "レッドブル・リンク",
"grid": {
"lat": 47.220048, "lng": 14.765464, "dir": 245
}
}
http://localhost/~user/topdrivin/?stage=http://localhost/~user/topdrivin/stages/red_bull_ring.json
コースの定義ファイルは、Courseクラスの初期化時に読み込まれる。面倒くさいことに読み込みは非同期処理なので、mainではCourse.data_complete()がtrueになるのを待ってからメインループを開始するようにしてある。
class Course extends BgRotnscl(Obj)
query = new URLSearchParams(window.location.search)
(it = query.get('stage')) and fetch(it)
.then (response) =>
response.json()
.then (data) =>
@data = data
.catch (err) =>
console.error('json parse error.', err)
@data_complete: ->
@data
:
:
これの長所は、誰でもサーキットのコースデータを勝手に作って遊べるし、それを公開することもできる、というところだ。まさにオープンフォーマット、オープンデータである。昔、電脳倶楽部で提唱されたPDD(パブリック・ドメイン・データ)にちなんで、PCD(パブリック・サーキット・データ)と名付けよう。
{
"name": "レッドブル・リンク",
"grid": {
"lat": 47.220048, "lng": 14.765464, "dir": 245
},
"sectors": [
{ "l": [ 47.219976, 14.765222], "r": [ 47.220080, 14.765181], "name": "=Finish" },
{ "l": [ 47.225082, 14.755456], "r": [ 47.225163, 14.755574], "name": "-Sector 1" },
{ "l": [ 47.222460, 14.759733], "r": [ 47.222409, 14.759600], "name": "-Sector 2" },
{ "l": [ 47.222973, 14.769995], "r": [ 47.222919, 14.769862], "name": " dummy 25" }
]
}