# Extended Notification仕様

[English](../specification.md)

## 対象範囲

Extended NotificationはTurboWarpプロジェクトに小さな同期レイヤーを提供します。あるスクリプトが名前付き通知を送り、別のスクリプトがその通知を待てます。キーボード入力を待つ同等のブロックも提供します。

この拡張機能は、姿勢認識、音声認識、スプライトのクリック検出など、入力分野に固有の仕組みを実装しません。それらの仕組みはコントローラースプライトから拡張通知を送ってください。

## 通知の意味

- 通知はキューに入らず、保持もされません。
- 1件の通知によって、その時点で同じ名前を待っているすべてのスクリプトが再開します。
- スクリプトが待機を始める前に送られた通知は、後から始めた待機を満たしません。
- 通知名は`Scratch.Cast.toString`で文字列へ変換されます。

## タイムアウトの意味

タイムアウト付きの真偽値ブロックは次の値を返します。

- 通知またはキー入力が先に起きた場合は`true`
- タイムアウトが先に満了した場合は`false`
- プロジェクトの停止操作によって待機が解除された場合は`false`

有限でない値、0、負数のタイムアウトは0秒として扱われます。

## キーボードの意味

- キーの待機では、ブロックが待機を始めた後に発生する`keydown`イベントを監視します。
- キーを押し続けたときに生成される反復`keydown`イベントは無視されます。
- Space、矢印、Enter、Escapeキーでよく使われる日本語名と英語名を正規化します。
- 英字キーと数字キーは`KeyboardEvent.key`と`KeyboardEvent.code`の両方で照合できます。

## ブロック

- `[MESSAGE] を拡張通知する`
- `[MESSAGE] 拡張通知を受け取るまで待つ`
- `<[MESSAGE] 拡張通知を受け取る または [SECONDS] 秒待った>`
- `[KEY] キー押下の拡張通知まで待つ`
- `<[KEY] キー押下の拡張通知 または [SECONDS] 秒を待った>`

## 実行要件

ブラウザーのキーボードイベントを監視し、TurboWarpランタイムの停止イベントを検出するため、この拡張機能はサンドボックスなしで実行する必要があります。
