# ServiceSim 表示のルール

## 対象
Scene ビューに出す文字、store_report、Console。
CSV に書く値の言葉は対象外（過去の記録と比べられなくなるため。変えるときは対応表を作ってから別に行う）。

## 場所の名前
- 動かないものにだけ付ける：入口・風除室・待合・レジ・レジの内側・厨房・受け渡し口・返却口・パントリー・ドリンクバー・トイレ
- 待機の点には付けない（待機は吹き出しで表す）
- その場所の床の真ん中に固定する
- 文は場所の名前だけ。人数や状態は書かない
- 薄い白の背景（不透明度55%）＋1点の枠、10点、濃い灰の字、中央そろえ

## 吹き出し
- 動くもの（スタッフ・ロボット・客）にだけ付ける。椅子など動かないものには付けない
- 実際にいる位置に付いて動く
- 文は「誰×数 状態」。1つでも ×1 を付ける
  例：スタッフ×1 会計、ロボット×2 待機、客×3組 席待ち
- 数え方：スタッフとロボットは数、客は組
- 状態は1つだけ。いま何をしているかを書く。秒数・番号・行き先の卓は書かない
- 同じ場所で同じ状態のものは1つにまとめ、数で表す
- 濃い半透明の帯＋左端の色の帯、13点、白い字。左端の色は本体の色に合わせる

## 言葉（表に無い言い方は使わない）
| 意味 | 使う言葉 | 使わない言葉 |
|---|---|---|
| 店で働く人 | スタッフ | 店員 |
| 仕事がなく止まっている | 待機 | 待ち、パントリーで待つ |
| ロボットをよけて止まっている | ロボット待ち | 待つ |
| 席が空くのを待っている客 | 席待ち | 待合（状態には使わない。場所の名前だけ）、外で待つ |
| 店の外で席が空くのを待っている客 | 店外で席待ち | 外で待つ |
| 帰ってしまった客 | あきらめた | あきらめ |
| 料理を運ぶ仕事 | 配膳 | 料理、料理を運ぶ |
| ロボットが止まり、自分で動き出す | 一時停止 | 停止 |
| ロボットが動けず、人の助けが要る | 立ち往生 | 動けない |
| 客席の机 | 卓 | テーブル |
| レジの両側 | 客側／スタッフ側 | お客さん側、店員側 |

## 形と色で表す状態

見た目は、あとで天井の角のカメラの映像から人とロボットを見分ける学習に使う。
本物に近い形にするが、**測る数字は変えない**。見た目を足すときは、当たり判定（Collider）を
持たせない。NavMesh はコライダーの形で焼き、ロボットの前のセンサーもコライダーを見るので、
当たり判定さえ持たなければ、通れる床も卓までの道のりも変わらない。

### ベンチ
- **当たり判定の箱はそのまま**：大きさ・位置・高さ 1.1 m を変えない。NavMesh と
  前のセンサーはこの箱だけを見る。**見た目（Renderer）だけを消す**
- そのうえに、当たり判定を持たない見た目を2つ置く。どちらもベンチの箱の中に収め、
  **互いに重ねない**
    - **座面**：高さ 0.45 m（JSON の meta.heights.bench_seat）。背もたれの板を除いた部分
    - **背もたれ**：**机と反対側**のふちに薄く（0.08 m）、高さ 1.1 m
- 色と素材は、差し替えられるよう1か所にまとめる
    - 座面 Mat_BenchSeat ／ 背もたれ Mat_BenchBack
- 仕切り（Divider）は今までどおり、箱をそのまま見せる

### 立っている人（スタッフ・歩く客・待合の客）
- **形**：座っている客と同じ作りの「胴＋頭」にする
    - 胴：床から立ち上がるカプセル。半径は今までどおり 0.2 m
    - 頭：胴の上の球（半径 0.11 m）。頭の先が背の高さになる
- **背の高さは変えない**（PeopleSpec.personHeight 1.7 m）
- **色も変えない**：スタッフ 青（Mat_Staff）／歩く客 黄（Mat_Guest）／待合の客 紫（Mat_WaitingGuest）
- **取り替えるのは見た目（Renderer）だけ**。当たり判定（CapsuleCollider の半径・高さ・中心）、
  NavMeshAgent の半径と高さ、PersonBody、人がロボットをよける処理には触れない
- Tag も変えない（スタッフ SimStaff ／ 歩く客・待合の客 SimGuest）

### 座っている客
- **出す・消す**：客が席に着いたら、その席に「座っている客」の形を出す。立ち上がったら消す。
  ドリンクバー・トイレ・会計で立つときも消し、戻って座ったらまた出す。
  席にいる人数は「組の人数 − 立って歩いている人 − 会計に立っている人」
- **色**：立っている客と同じ黄色（Mat_Guest）
- **形**：座面（0.45 m）に腰かけて見えるように、胴と頭を分ける
    - 胴：座面の高さ 0.45 m から立ち上がる。半径は立っている客と同じ 0.2 m
    - 頭：胴の上に小さい球（半径 0.11 m）。**頭の先が背もたれ（1.1 m）より少し上に出る**
- **高さ 1.35 m**（頭の先。床から）：背もたれ 1.1 m より 0.25 m 高く、
  仕切り（1.2 m）よりも高いので、真上から見ても隠れない。
  立っている客（1.7 m）より低いので、座っていることが分かる。
  店の形の JSON（meta.heights）の高さを変えたら、この値も見直す
- **見た目だけ**：当たり判定（Collider）・PersonBody・NavMeshAgent を持たない。
  次のどれにも入れない（入れると止まる回数が変わり、計測が前と比べられなくなる）
    - NavMesh（コライダーの形で焼く。焼くのは店の下だけで、人は別の親の下に置く）
    - ロボットの前のセンサー（コライダーを見る）
    - 人がロボットをよける処理・人どうしの詰まりの記録・歩く人の数

### 種類の印（Layer / Tag）
- あとで映像から見分けるために、**Tag** を付ける。いまは付けるだけで、何にも使わない
    | もの | Tag |
    |---|---|
    | ロボット | SimRobot |
    | スタッフ | SimStaff |
    | 立っている客（歩く客・待合の客） | SimGuest |
    | 座っている客 | SimSeatedGuest |
    | ベンチ（当たりの箱・座面・背もたれ） | SimBench |
    | 机（卓の天板） | SimTable |
    | 椅子 | SimChair |
- Layer は使わない。Layer は物理の問い合わせに効くことがあるが、Tag は何にも効かないため
- Tag は ProjectSettings/TagManager.asset に増える（Assets/ServiceSim の外に出る唯一のもの）

## 共通
- 描き方は1つ：Scene ビューの GUI（Handles.BeginGUI 内）。画面に正対し、ズームしても大きさが変わらない
- 床に寝かせた文字、画面の決まった位置に出す文字、凡例は使わない
- 重なり避けは全部で共用する。先に場所の名前、その上に吹き出し
- 計測の回では何も出さない。見る用の回と Build Store のあとは出す
- 新しい表示を足すときは、先にこのファイルを直してから作る
