概要(Epic #738 / DoD で発覚)
メニューバーの 「AIを試す」 を押すと、モーダルを開く前に従来の保存処理(ダウンロード)が
走ってしまう。「AIを試す」は AI を base64 エンコードして URL パラメータ(?player1=data:...)で
ゲームサーバーに渡すだけなので、保存は不要。保存処理を解除し、モーダルを開くだけにする。
根本原因
packages/scratch-gui/src/components/menu-bar/menu-bar.jsx:
「AIを試す」MenuItem が <RubyDownloader onSaveFinished={this.handleTestAISaveFinished}> で
ラップされ、onClick が保存を起動している:
getTestAIHandler (downloadProjectCallback) {
return () => {
// Save first, then open modal via onSaveFinished callback
this.props.onSetAiSaveStatus('saving');
downloadProjectCallback(); // ← 不要な保存/ダウンロード
};
}
handleTestAISaveFinished () {
this.handleAISaveFinished();
this.props.onOpenKoshienTestModal(); // 保存完了後にモーダルを開く
}
<RubyDownloader onSaveFinished={this.handleTestAISaveFinished}>
{(className, downloadProjectCallback) => (
<MenuItem className={className} onClick={this.getTestAIHandler(downloadProjectCallback)}>
<FormattedMessage ... id="gui.menuBar.testAI" /> {/* AIを試す */}
</MenuItem>
)}
</RubyDownloader>
やること
- 「AIを試す」MenuItem から保存(
RubyDownloader / downloadProjectCallback / onSetAiSaveStatus('saving'))を
外し、onClick で直接 this.props.onOpenKoshienTestModal() を呼ぶだけにする。
- 不要になる
getTestAIHandler / handleTestAISaveFinished(および RubyDownloader ラップ)を整理。
- 「AIを保存」「AIに名前をつけて保存…」は従来どおり保存を維持(こちらは保存が目的なので変更しない)。
- モーダル側(
koshien-test-modal.jsx)は generatePreviewCode で現スプライト+ステージを生成して
base64 URL を組み立てる実装なので、保存に依存していない(変更不要)。
受け入れ条件
ベースブランチ
関連
Epic #738 / #827(AIを試す 出力)/ #839(v1 リスト記法)。DoD(実エディタで「AIを試す」)で発覚。
概要(Epic #738 / DoD で発覚)
メニューバーの 「AIを試す」 を押すと、モーダルを開く前に従来の保存処理(ダウンロード)が
走ってしまう。「AIを試す」は AI を base64 エンコードして URL パラメータ(
?player1=data:...)でゲームサーバーに渡すだけなので、保存は不要。保存処理を解除し、モーダルを開くだけにする。
根本原因
packages/scratch-gui/src/components/menu-bar/menu-bar.jsx:「AIを試す」MenuItem が
<RubyDownloader onSaveFinished={this.handleTestAISaveFinished}>でラップされ、onClick が保存を起動している:
やること
RubyDownloader/downloadProjectCallback/onSetAiSaveStatus('saving'))を外し、onClick で直接
this.props.onOpenKoshienTestModal()を呼ぶだけにする。getTestAIHandler/handleTestAISaveFinished(およびRubyDownloaderラップ)を整理。koshien-test-modal.jsx)はgeneratePreviewCodeで現スプライト+ステージを生成してbase64 URL を組み立てる実装なので、保存に依存していない(変更不要)。
受け入れ条件
?player1=data:<base64>で現在の AI が読み込まれて動作するベースブランチ
topic/koshien-epic-738(Epic feat: スモウルビー甲子園 拡張機能の本格対応(ブロック挙動 + 実サーバー通信)[Epic] #738 の一部)関連
Epic #738 / #827(AIを試す 出力)/ #839(v1 リスト記法)。DoD(実エディタで「AIを試す」)で発覚。