Files
2026-06-11 14:45:36 +02:00

47 lines
1.7 KiB
Markdown

# PresentationWall
A slideshow display surface. Loads a set of JPEG slides from Supabase storage and renders them in sequence.
❌ Currently not in Creator
### Type
pre-defined
### 3D
The PresentationWall is a 4m x 2,25m opaque Plane.
When "controls" is set to true it expands to 4m x 2,5m.
Its Origin is at the Bottom-Center (if controls are disabled).
Spawnpoint should be {0,1,0} so its 1m above the floor.
### Custom Args:
| Key | Type | Implemented | Description |
|---|---|---|---|
| file | string | ✔️ | UUID of the `Slide` record in the Supabase `slides` table. The runtime fetches `slides_count` and loads each `{storage_folder}/{i}.jpg` |
| widthcrop | float | ⚠️ no-op in Unity| Horizontal crop|
| heightcrop | float | ⚠️ no-op in Unity| Vertical crop|
|controls| bool | ❌ | If Controls are enabled at the bottom of the screen, currently always true|
| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) |
### Special Notes:
`file` is not a storage path — it is the `id` field of a `Slide` row in Supabase. The behaviour queries `supabase.From<Slide>().Where(s => s.id == value)` to find the slide folder and count.
Signed URLs are generated per slide (1-hour TTL) and loaded as `Texture2D`.
### Example:
```json
{
"position": { "x": 10.0, "y": 4.0, "z": -6.0 },
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0 },
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 },
"type": "pre-defined",
"resourcename": "PresentationWall",
"item-custom-args": [
{ "argument": "file", "value": "b83a17ab-92bf-4122-a4d0-7b467a105ae0/converted/powerpoint1" },
{ "argument": "widthcrop", "value": "0" },
{ "argument": "heightcrop", "value": "0" }
],
"item-custom-args-adv": null
}
```