Epic: #738 / Phase P1
ゴール
甲子園拡張機能の各ブロックを編集機上でクリック/実行したときに、意味のある固定値を返し、引数のリストを実際に更新するようにする。実通信はまだ行わない(未接続モード)。Part 2(#C)の「未接続フォールバック」の土台になる。
方針: KoshienClient 抽象 + MockClient
packages/scratch-vm/src/extensions/koshien/index.js の現状の KoshienClient(スタブ)を、差し替え可能なインターフェースに整理し、固定値を返す MockClient を実装する。ブロックメソッドは client 経由で値を得る。
ブロック別 固定値仕様(案)
| ブロック |
現状 |
固定値/挙動(案) |
connectGame (HAT) |
動作OK |
維持(connected フラグ) |
getMapArea |
no-op |
no-op(エラーなし) |
moveTo |
空Promise |
no-op(エラーなし) |
setItem(dynamite/bomb) |
no-op |
no-op |
turnOver |
no-op |
no-op |
setMessage |
空Promise |
no-op(任意でログ) |
map(POSITION) |
-1 |
0(空間) |
mapFrom(POSITION, MAP) |
-1 |
MAP 文字列をパースして該当セル。不能なら 0 |
mapAll() |
undefined |
全マス空間の15行CSV "000000000000000,…"(15行) |
targetCoordinate player |
undefined |
position→"1:1", x→1, y→1 |
targetCoordinate goal |
undefined |
position→"13:13", x→13, y→13 |
targetCoordinate other_player |
undefined |
position→"7:7", x→7, y→7 |
targetCoordinate enemy |
undefined |
position→"7:7", x→7, y→7 |
position / positionOf / object |
動作OK |
維持 |
calcGoalRoute(RESULT) |
空Promise |
RESULT リストに ["1:1", "13:13"](player→goal)を書き込む |
calcRoute(SRC,DST,…,RESULT) |
空Promise |
RESULT リストに [SRC, DST] を書き込む |
locateObjects(…,RESULT) |
no-op |
RESULT リストに ["7:7"] を書き込む |
固定値の具体値(goal=13:13 等)は実装時に調整可。map=0/座標=1:1 を基本とする。
リスト書き込みの実装
RESULT は list 名(field)。ステージのグローバルリスト変数を取得して中身を置換:
const stage = this.runtime.getTargetForStage();
const list = stage.lookupVariableByNameAndType(name, 'list');
if (list) list.value = [...coords];
RESULT が空 ' '(未指定)のときは no-op。
作業ステップ(TDD)
- [RED]
packages/scratch-vm/test/unit/extension_koshien.js(tap)に各ブロックの戻り値/リスト書き込みのテストを追加し失敗を確認
- [GREEN]
KoshienClient 抽象 + MockClient を実装、ブロックメソッドを接続
- [PASS] lint + 当該テスト(
cd packages/scratch-vm && npm exec tap test/unit/extension_koshien.js)
- [COMMIT & PUSH]
feat(scratch-vm): return meaningful fixed values from koshien blocks
- [PR] → develop
Definition of Done
備考
- 別途検討した Ruby V2 対応(
calc_route 等の list("$名前") → V2 配列変数 $名前 構文)は scratch-gui 側の generator/converter 修正で、本 issue(vm 側)とは独立。必要なら別 PR で並行。
Epic: #738 / Phase P1
ゴール
甲子園拡張機能の各ブロックを編集機上でクリック/実行したときに、意味のある固定値を返し、引数のリストを実際に更新するようにする。実通信はまだ行わない(未接続モード)。Part 2(#C)の「未接続フォールバック」の土台になる。
方針: KoshienClient 抽象 + MockClient
packages/scratch-vm/src/extensions/koshien/index.jsの現状のKoshienClient(スタブ)を、差し替え可能なインターフェースに整理し、固定値を返すMockClientを実装する。ブロックメソッドは client 経由で値を得る。ブロック別 固定値仕様(案)
connectGame(HAT)getMapAreamoveTosetItem(dynamite/bomb)turnOversetMessagemap(POSITION)-10(空間)mapFrom(POSITION, MAP)-10mapAll()"000000000000000,…"(15行)targetCoordinateplayer"1:1", x→1, y→1targetCoordinategoal"13:13", x→13, y→13targetCoordinateother_player"7:7", x→7, y→7targetCoordinateenemy"7:7", x→7, y→7position/positionOf/objectcalcGoalRoute(RESULT)["1:1", "13:13"](player→goal)を書き込むcalcRoute(SRC,DST,…,RESULT)[SRC, DST]を書き込むlocateObjects(…,RESULT)["7:7"]を書き込むリスト書き込みの実装
RESULT は list 名(field)。ステージのグローバルリスト変数を取得して中身を置換:
RESULT が空
' '(未指定)のときは no-op。作業ステップ(TDD)
packages/scratch-vm/test/unit/extension_koshien.js(tap)に各ブロックの戻り値/リスト書き込みのテストを追加し失敗を確認KoshienClient抽象 +MockClientを実装、ブロックメソッドを接続cd packages/scratch-vm && npm exec tap test/unit/extension_koshien.js)feat(scratch-vm): return meaningful fixed values from koshien blocksDefinition of Done
-1/undefined/空Promise を解消)calcRoute/calcGoalRoute/locateObjectsが指定リストへ実際に書き込む?no_beforeunload=1&tab=ruby): 甲子園ブロックをクリックすると固定値が表示され、calc系実行後にリストモニタへ座標が反映される備考
calc_route等のlist("$名前")→ V2 配列変数$名前構文)は scratch-gui 側の generator/converter 修正で、本 issue(vm 側)とは独立。必要なら別 PR で並行。