Temporary Variablesを読み込む
最初にTurboWarpのTemporary Variables拡張を追加します。 そのランタイム変数が条件式の入力になります。
TurboWarp カスタム拡張
Temporary Variablesを安全なJavaScript風の条件式で読み取り、条件が falseからtrueへ、またはtrueからfalseへ変化したときだけbroadcastします。
state == "ready"
watcher conditional broadcast…
紙芝居DSL 4.0集約ランタイム
集約ランタイムのパレットでRuntime Expression見出し直下の ドキュメントボタンを押します。条件式、動的broadcast、式の構文、上限、エラー時の動作は このガイドの説明どおりです。集約時に加わるのは拡張機能別の名前空間と識別アイコンです。
01 · はじめに
Runtime ExpressionはTurboWarpのTemporary Variables拡張が提供するランタイム変数を 読み取ります。2つの拡張を読み込み、プロジェクトで使っている変数名を条件式に書きます。
最初にTurboWarpのTemporary Variables拡張を追加します。 そのランタイム変数が条件式の入力になります。
dist/runtime-expression.jsをカスタム拡張として追加し、確認画面で
サンドボックス化せずに拡張機能を実行するを有効にします。
stateのように変数名をそのまま書けます。空白や日本語を含む名前は
vars["現在の状態"]と書きます。
サンドボックス外での実行が必要です。 Temporary Variablesの読み取りとbroadcastハットの開始にはTurboWarp VMへの直接アクセスが 必要です。信頼できる配布元の拡張ファイルだけを読み込んでください。
https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-runtime-expression@0.4.0/dist/runtime-expression.js
02 · 真偽値レポーター
conditionブロックは制限された式を解析し、参照されたランタイム変数を読み、真偽値を
返します。evalやnew Functionは使用しません。
state = "ready"score = 12
state == "ready" && score > 10
state == "ready" && lives > 0
返された真偽値を「もし」ブロックの条件としてそのまま使えます。
nextScene === undefined
存在しないランタイム変数はundefinedとして読み取られます。
vars["current state"] == "ready"
&& vars["得点"] >= 10
vars["名前"]の形なら、空白やUnicodeを含む名前を扱えます。
03 · 条件付きBroadcast
名前付きの監視を一度登録すると、最初の結果を記憶し、VMの各フレームで参照値を確認します。 真偽値がfalseとtrueの間を移動したときだけメッセージを送ります。
| 出来事 | Runtime Expressionの動作 |
|---|---|
| 登録 | 最初の状態を記憶するため一度評価します。メッセージは送りません。 |
| 参照している値が変化 | 次のフレームで再評価します。関係のない変数は無視します。 |
| 判定結果が変化 | その遷移に対応するtrue時またはfalse時のメッセージを送ります。 |
| 同じIDを再登録 | 以前の監視と記憶状態を新しい登録で一括して置き換えます。 |
| 正のタイムアウトが満了 | 通知せずに監視を削除します。0以下はタイムアウトなしです。 |
| 登録解除/プロジェクト開始・停止 | 監視を削除します。存在しないIDの登録解除は何もしません。 |
次のVMフレームまでに複数回更新されてもまとめて扱います。そのフレームでの最終値だけを 確認するため、途中状態のメッセージが大量に送られることを防ぎます。
level-readyのように変わらないIDを付けます。同じIDを使って、あとから監視を
置き換えたり、登録解除したりできます。
04 · Composition API
状態を管理するアプリケーションは純粋な評価器を直接importできます。Scratch、DOM、 network、storage、Temporary Variablesを読み取りません。
import {createRuntimeExpressionComposition} from
'@kubohiroya/turbowarp-runtime-expression/composition';
const expressions = createRuntimeExpressionComposition();
const ready = expressions.evaluateCondition(
'state === "ready" && score >= 10',
{state: 'ready', score: 10}
);
expressions.releaseAll();
ownかつenumerableなstring、有限number、booleanだけを許可します。未知または不正な値は安定したエラーになります。
制限付きparserと上限付きcacheを共有します。releaseAll()で式を解放した後も同じinstanceを再利用できます。
05 · 条件式の言語
JavaScriptの比較や計算に似ていますが、JavaScriptそのものではありません。 ランタイム変数から値を計算する、短く明確な条件式にしてください。
true、false、null、undefined!、単項+と-+ - * / %== != === !== < <= > >=&&と||vars["名前"]参照new、配列、オブジェクトリテラル06 · トラブルシューティング
よくある原因は拡張の読み込み順、文字列の引用符、プロジェクトの開始・停止による監視解除です。 まず次の項目を確認してください。
条件判定や監視登録を実行する前に、Temporary Variables拡張を読み込んでください。
state == "ready"のように文字列を引用符で囲みます。引用符のない
readyは別の変数名として扱われます。
正常な動作です。登録時は最初の結果を通知せず記憶します。falseとtrueの間を変化させると メッセージが送られます。
プロジェクトの開始と停止では全登録が解除されます。起動用スクリプトから監視を再登録して ください。
vars["current state"]やvars["得点"]のように、厳密な参照形式を
使用します。
式を1つの比較まで短くし、引用符と丸括弧を確認してから、論理条件を1つずつ戻します。