# 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().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 } ```