diff --git a/data-structure-database.md b/data-structure-database.md index d6fdec7..1b0e5a5 100644 --- a/data-structure-database.md +++ b/data-structure-database.md @@ -60,7 +60,7 @@ All values are serialized as strings. | Creator type | `resourcename` | Custom args | |---|---|---| -| `Cube` | `Cube` | `color`, `opacity` | +| `Cube` | `Cube` | `color` | | `Sphere` | `Sphere` | `color` | | `Cylinder` | `Cylinder` | `color` | | `Cone` | `Cone` | `color` | @@ -71,32 +71,44 @@ All values are serialized as strings. | Creator type | `resourcename` | Custom args | |---|---|---| -| `Directional Light` | `Directional Light` | `color`, `intensity`, `target` (`"x,y,z"`) | -| `Point Light` | `Point Light` | `color`, `intensity` | +| `Directional Light` | `Directional Light` | `color`, `intensity`†, `target` (`"x,y,z"`) | +| `Point Light` | `Point Light` | `color`, `intensity`† | + +> †`intensity` is the key saved in the database, but Unity reads `brightness` — the args will not apply at runtime until this mismatch is resolved. See individual object docs. ### Room access | Creator type | `resourcename` | Custom args | |---|---|---| | `Entrance` | `Entrance` | _(none)_ | -| `Exit` | _(not implemented in save)_ | — | +| `GoToOtherRoom` | `GoToOtherRoom` | `RoomName`, `UUID`, `color` _(❌ not yet implemented in Creator or Unity)_ | ### Streaming / media | Creator type | `resourcename` | Custom args | |---|---|---| -| `Billboard` | `Billboard` | `url` (file path) | +| `Billboard` | `Billboard` | `url` (Supabase storage path, signed at runtime) | | `LiveKitStream` | `LiveKitStream` | `LiveKitRoomID`, `shader`, `GreenScreenColor`, `GreenScreenBorderSettings`, `GreenScreenColorNear`, `widthcrop`, `heightcrop` | -| `VideoWall` | `VideoWall` | `file`, `widthcrop`, `heightcrop` | -| `Presentation` | `Presentation` | `file` | +| `VideoWall` | `VideoWall` | `file`, `shader`, `volume`, `controls`, `autoplay`, `widthcrop`, `heightcrop` | +| `Presentation` | `PresentationWall` | `file`, `widthcrop`, `heightcrop`, `controls` _(❌ not in Creator)_ | | `Camera` | `CCTVCamera` | `target` (`"x,y,z"`), `fov` (derived: `zoom * 60`) | -### Other +### Other / Props | Creator type | `resourcename` | `type` field | Custom args | |---|---|---|---| | `Text` | `Text` | `pre-defined` | `text`, `color`, `fontSize`, `fontWeight` | -| `Custom` | _(the asset filename)_ | `user-defined` | `file` | +| `Whiteboard` | `WhiteboardWall` | `pre-defined` | _(none — not serialized by Creator)_ | +| `Custom` | _(asset filename)_ | `user-defined` | `file`, `color`, `material` | + +#### `material` values (Custom, Speaker) + +| Value | Shader | +|---|---| +| `0` | Metallic | +| `1` | Unlit | +| `2` | Specular | +| `3` | FakeEmission | ### Common optional arg (all types) @@ -140,3 +152,21 @@ All values are serialized as strings. "item-custom-args-adv": null } ``` + +## Example — Custom (user-uploaded GLB) + +```json +{ + "position": { "x": -4.0, "y": 1.0, "z": 0.0 }, + "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "scale": { "x": 1.0, "y": 1.0, "z": 1.0 }, + "type": "user-defined", + "resourcename": "b83a17ab-92bf-4122-a4d0-7b467a105ae0/podest.glb", + "item-custom-args": [ + { "argument": "file", "value": "b83a17ab-92bf-4122-a4d0-7b467a105ae0/podest.glb" }, + { "argument": "color", "value": "#ffffff" }, + { "argument": "material", "value": "0" } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/Billboard.md b/objects/Billboard.md new file mode 100644 index 0000000..ecb4955 --- /dev/null +++ b/objects/Billboard.md @@ -0,0 +1,35 @@ +# Billboard + +### Type +pre-defined + +### 3D +The Billboard is a 4m x 2,25m opaque Plane. +Its Origin is at the Bottom-Center. +Spawnpoint should be {0,1,0} so its 1m above the floor. + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| url | string | ✔️ | Storage path within `user_files` bucket (e.g. `uuid/image.png`). A signed URL is generated at runtime. | +| grabable | `"true"` / `"false"` | ⚠️ (Unity missing) | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: +The Creator handles image uploads and assigns the storage path to `url`. +The `url` value is a Supabase storage path, **not** a full URL — the runtime calls `CreateSignedUrl` to fetch the actual image. + +### Example: + +```json +{ + "position": { "x": 5, "y": 1, "z": -6 }, + "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "scale": { "x": 1.0, "y": 1.0, "z": 1.0 }, + "type": "pre-defined", + "resourcename": "Billboard", + "item-custom-args": [ + { "argument": "url", "value": "b83a17ab-92bf-4122-a4d0-7b467a105ae0/Screenshot_Loading.png" } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/CCTVCamera.md b/objects/CCTVCamera.md new file mode 100644 index 0000000..abcf783 --- /dev/null +++ b/objects/CCTVCamera.md @@ -0,0 +1,37 @@ +# CCTVCamera + +### Type +pre-defined + +### 3D +The CCTV Camera is a small, dark gray box. +Origin is at the Center. +Spawnpoint should be {0,3,0} and its target set so it already points slightly down. + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| target | string `"x,y,z"` | ⚠️ (Unity only reads rotation) | World-space look-at point. Could be a moveable object in the future.| +| fov | float (degrees) | ✔️ | Camera field of view in degrees. Derived in Creator as `zoom * 60`. | +| grabable | `"true"` / `"false"` | ⚠️ (Unity missing) | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: +The `target` arg is documented in the database but the `CCTVCameraBehaviour` switch statement does not handle it — the camera's look direction is controlled by the object's `rotation` in the scene. +In the Creator, `fov = zoom * 60` where zoom is 1–10. + +### Example: + +```json +{ + "position": { "x": 0.0, "y": 3.0, "z": 5.0 }, + "rotation": { "x": 30.0, "y": 0.0, "z": 0.0 }, + "scale": { "x": 1.0, "y": 1.0, "z": 1.0 }, + "type": "pre-defined", + "resourcename": "CCTVCamera", + "item-custom-args": [ + { "argument": "target", "value": "0,0,6" }, + { "argument": "fov", "value": "140" } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/Cone.md b/objects/Cone.md new file mode 100644 index 0000000..f0b26c0 --- /dev/null +++ b/objects/Cone.md @@ -0,0 +1,35 @@ +# Cone + +### Type +pre-defined + +### 3D +The Cone is 1m high with a 0.5m base radius (from Cone.glb mesh). +Its Origin is at the Geometric Center. +Cone is pointing upwards. +Spawnpoint should be {0,0.5,0} so the base rests on the floor. + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| color | hexColor | ✔️ | Color of the cone material | +| grabable | `"true"` / `"false"` | ⚠️ (Unity missing) | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: +_none_ + +### Example: + +```json +{ + "position": { "x": 4.0, "y": 0.5, "z": 0.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": "Cone", + "item-custom-args": [ + { "argument": "color", "value": "#ff9900" } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/Cube.md b/objects/Cube.md new file mode 100644 index 0000000..64d0840 --- /dev/null +++ b/objects/Cube.md @@ -0,0 +1,36 @@ +# Cube + +### Type +pre-defined + +### 3D +The Cube is a 1m x 1m x 1m opaque Cube. +Its Origin is in the Geometric Center. +Spawnpoint should be {0,0.5,0} so its on the floor. + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| color | hexColor | ✔️ | Color the Material of the Cube uses | + +### Special Notes: +The Cube has a collider and is a "Teleportation Area". + +### Example: + +```json +{ + "position": { "x": 0.0, "y": 0.5, "z": 0.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": "Cube", + "item-custom-args": [ + { + "value": "#ff3300", + "argument": "color" + } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/Cylinder.md b/objects/Cylinder.md new file mode 100644 index 0000000..d8cb0af --- /dev/null +++ b/objects/Cylinder.md @@ -0,0 +1,36 @@ +# Cylinder + +### Type +pre-defined + +### 3D +The Cylinder is 1m high and has a radius of 0.5m. Its "standing": The round face faces upwards. +Its Origin is in the Geometric Center. +Spawnpoint should be {0,0.5,0} so its on the floor. + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| color | hexColor | ✔️ | Color the Material of the Cube uses | + +### Special Notes: +The Cylinder has a collider and is a "Teleportation Area". + +### Example: + +```json +{ + "position": { "x": 2.0, "y": 1, "z": 0.0 }, + "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "scale": { "x": 1.0, "y": 2.0, "z": 1.0 }, + "type": "pre-defined", + "resourcename": "Cylinder", + "item-custom-args": [ + { + "value": "#0033ff", + "argument": "color" + } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/DirectionalLight.md b/objects/DirectionalLight.md new file mode 100644 index 0000000..2847c8d --- /dev/null +++ b/objects/DirectionalLight.md @@ -0,0 +1,42 @@ +# Directional Light + +### Type + +pre-defined + +### 3D + +No visible mesh. Represents a scene-wide directional light source (like the sun). +The `target` arg defines the direction the light points toward. +Default spawn height is y=5. + +### Custom Args: + +| Key | Type | Implemented | Description | +| --------- | -------------------- | ------------------------------ | ------------------------------------------------------------------- | +| color | hexColor | ⚠️ (Creator tbd) | Color of the light | +| intensity | float | ✔️ | Light intensity (default 1). | +| target | string `"x,y,z"` | ⚠️ (Unity only reads rotation) | World-space look-at point the light aims at | +| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: + +**Key name discrepancy:** The database save format uses `intensity` as the argument key. `LightManupulationBehaviour.cs` read `brightness` and "intensity". + +### Example: + +```json +{ + "position": { "x": 0.0, "y": 5.0, "z": 0.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": "Directional Light", + "item-custom-args": [ + { "argument": "color", "value": "#ffffff" }, + { "argument": "intensity", "value": "20" }, + { "argument": "target", "value": "0,0,0" } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/Entrance.md b/objects/Entrance.md new file mode 100644 index 0000000..9308556 --- /dev/null +++ b/objects/Entrance.md @@ -0,0 +1,31 @@ +# Entrance + +### Type +pre-defined + +### 3D +An (invisible) Object marking where the player spawns when entering the Room. In the creator is marked with a small disk. + +Default spawn is at y=0.1 to prevent players falling through the floor. + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: +_none_ + +### Example: + +```json +{ + "position": { "x": 0.0, "y": 0.1, "z": 0.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": "Entrance", + "item-custom-args": [], + "item-custom-args-adv": null +} +``` diff --git a/objects/Floor.md b/objects/Floor.md new file mode 100644 index 0000000..17b492e --- /dev/null +++ b/objects/Floor.md @@ -0,0 +1,36 @@ +# Floor + +### Type +pre-defined + +### 3D +The Floor is a flat plane. Default dimensions are 10m × 10m. +Its Origin is at the Center (surface level). +Spawnpoint should be {0,0,0}. + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| color | hexColor | ✔️ | Color of the floor material | +| opacity | float (0–1) | ⚠️ (not in Unity) | Transparency of the floor material | +| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: +The Floor uses `Plane` as its `resourcename`. The Creator type is `Floor`. +Has a collider and is a "Teleportation Area". + +### Example: + +```json +{ + "position": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "scale": { "x": 10, "y": 1, "z": 5.0 }, + "type": "pre-defined", + "resourcename": "Plane", + "item-custom-args": [ + { "argument": "color", "value": "#cccccc" } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/GoToOtherRoom.md b/objects/GoToOtherRoom.md new file mode 100644 index 0000000..d8f9a09 --- /dev/null +++ b/objects/GoToOtherRoom.md @@ -0,0 +1,37 @@ +# GoToOtherRoom + +### Type +pre-defined + +### 3D +Unity: Pink 2x2 square in the floor, text hovering 1.5m above. +Text is always facing the user. + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| RoomName | string | ❌ | Display label shown on the entrance | +| UUID | string | ❌ | UUID of the target room to teleport to | +| color | hexColor | ❌ | Tint color of the entrance mesh, default xrwise pink| +| grabable | `"true"` / `"false"` | ⚠️ (not in Unity yet) | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: +Only the Mesh still exists. Neither Unity nor Creatro implemented yet. + +### Example: + +```json +{ + "position": { "x": 7.0, "y": 0.1, "z": -2.0 }, + "rotation": { "x": 0.0, "y": 45.0, "z": 0.0 }, + "scale": { "x": 1.0, "y": 1.0, "z": 1.0 }, + "type": "pre-defined", + "resourcename": "Entrance", + "item-custom-args": [ + { "argument": "RoomName", "value": "Demo Room Number 2" }, + { "argument": "UUID", "value": "a0a11a08-dc35-49e1-9808-1452b9d31be3" }, + { "argument": "color", "value": "#b4da55" } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/LiveKitStream.md b/objects/LiveKitStream.md new file mode 100644 index 0000000..eb98d32 --- /dev/null +++ b/objects/LiveKitStream.md @@ -0,0 +1,44 @@ +# LiveKitStream + +### Type +pre-defined + +### 3D +A video display surface that streams live video from a LiveKit room. +The LiveKitStream is a 4m x 2,25m opaque Plane. +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 | +|---|---|---|---| +| LiveKitRoomID | string | ✔️ | Name of the LiveKit room to connect to (e.g. `"Gas Station"`) | +| widthcrop | float | ❌| Horizontal crop | +| heightcrop | float | ❌| Vertical crop | +| shader | string | ✔️ | `"unlit"` / `"lit"` / `"greenscreen"` | +| GreenScreenColor | hexColor |✔️ | Greenscreen key color | +| GreenScreenBorderSettings | int(string) | ✔️ | Greenscreen border tolerance. 0 - 1000, default 640 | +| GreenScreenColorNear | float (string)| ✔️ | Greenscreen color proximity. 0-2, default 0.3 | +| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: +The LiveKit token is fetched via `LiveKitURLProvider.getToken(roomName)`. + +### Example: + +```json +{ + "position": { "x": 5.0, "y": 1.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": "LiveKitStream", + "item-custom-args": [ + { "argument": "shader", "value": "unlit"}, + { "argument": "LiveKitRoomID", "value": "Demo Room" }, + { "argument": "widthcrop", "value": "1600" }, + { "argument": "heightcrop", "value": "900" } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/PointLight.md b/objects/PointLight.md new file mode 100644 index 0000000..3da0127 --- /dev/null +++ b/objects/PointLight.md @@ -0,0 +1,39 @@ +# Point Light + +### Type + +pre-defined + +### 3D + +No visible mesh. Represents an omnidirectional point light source that emits light equally in all directions. +Default spawn height is y=2. + +### Custom Args: + +| Key | Type | Implemented | Description | +| --------- | -------------------- | ---------------- | ------------------------------------------------------------------- | +| color | hexColor | ⚠️ (Creator tbd) | Color of the light | +| intensity | float | ✔️ | Light intensity (default 1). | +| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: + +**Key name discrepancy:** The database save format uses `intensity` as the argument key. `LightManupulationBehaviour.cs` read `brightness` and "intensity". + +### Example: + +```json +{ + "position": { "x": 0.0, "y": 2.0, "z": 0.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": "Point Light", + "item-custom-args": [ + { "argument": "color", "value": "#ff0000" }, + { "argument": "intensity", "value": "50" } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/PresentationWall.md b/objects/PresentationWall.md new file mode 100644 index 0000000..b198453 --- /dev/null +++ b/objects/PresentationWall.md @@ -0,0 +1,46 @@ +# 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 +} +``` diff --git a/objects/README.md b/objects/README.md new file mode 100644 index 0000000..6c52e0c --- /dev/null +++ b/objects/README.md @@ -0,0 +1,51 @@ +# Objects + +In this folder every object has a File that includes: +- Name of that object. +- Type of the Object ("pre-defined" or "user-defined") +- Description of 3D representation of that object. +- List of custom args, their type, if its implemented (✔️⚠️ ❌), and usage +- Special Notes. +- One or more example JSON Objects of that object. + +## Example: + +Cube.md +```markdown +# Cube + +### Type +pre-defined + +### 3D +The Cube is a 1m x 1m x 1m opaque Cube. +Its Origin is in the Geometric Center. +Spawnpoint should be {0,0.5,0} so its on the floor. + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| color | hexColor | ✔️ | Color the Material of the Cube uses | + +### Special Notes: +_none_ + +### Example: + +```json +{ + "position": { "x": 0.0, "y": 0.5, "z": 0.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": "Cube", + "item-custom-args": [ + { + "value": "#ff3300", + "argument": "color" + } + ], + "item-custom-args-adv": null +} +``` +``` diff --git a/objects/Sphere.md b/objects/Sphere.md new file mode 100644 index 0000000..3cb0aad --- /dev/null +++ b/objects/Sphere.md @@ -0,0 +1,34 @@ +# Sphere + +### Type +pre-defined + +### 3D +The Sphere is a 1m diameter sphere (radius 0.5m). +Its Origin is in the Geometric Center. +Spawnpoint should be {0,0.5,0} so it rests on the floor. + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| color | hexColor | ✔️ | Color of the sphere material | +| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: +The Sphere has a collider and is a "Teleportation Area". + +### Example: + +```json +{ + "position": { "x": 6.0, "y": 0.5, "z": 0.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": "Sphere", + "item-custom-args": [ + { "argument": "color", "value": "#ff0000" } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/VideoWall.md b/objects/VideoWall.md new file mode 100644 index 0000000..e5fb9f8 --- /dev/null +++ b/objects/VideoWall.md @@ -0,0 +1,41 @@ +# VideoWall + +### Type +pre-defined + +### 3D +The VideoWall 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 | ✔️ | the location in storage (user_files) of the video file | +| volume | string | ⚠️ (only Unity) | float between 0 and 1, default 1.| +|shader | string | ✔️ | "unlit"(default),"lit","greenscreen"| +|controls| bool | ❌ | If Controls are enabled at the bottom of the screen| +|autoplay|bool| ⚠️ (only Unity) |if the video automaticly plays when user enters the Room| + + +### Special Notes: +The Creator handles Uploading of Videos, generating Meta-Quest compatible Videos and then assiging the id to the url field. + +### Example: + +```json +{ + "position": { "x": 0.0, "y": 1.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": "Cube", + "item-custom-args": [ + { + "value": "b83a17ab-92bf-4122-a4d0-7b467a105ae0/converted/output.webm", + "argument": "file" + } + ], + "item-custom-args-adv": null +} diff --git a/objects/Wall.md b/objects/Wall.md new file mode 100644 index 0000000..9882288 --- /dev/null +++ b/objects/Wall.md @@ -0,0 +1,34 @@ +# Wall + +### Type +pre-defined + +### 3D +The Wall is a flat rectangular Cube with dimensions 10m × 5m × 0.1m. +Its Origin is at the Geometric Center. +Spawnpoint should be {0,2.5,0} (half height above floor). + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| color | hexColor | ✔️ | Color of the wall material | +| opacity | float (0–1) | ⚠️ (not in Unity) | Transparency of the wall material | +| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: + +### Example: + +```json +{ + "position": { "x": 0.0, "y": 2.5, "z": -5.0 }, + "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 }, + "scale": { "x": 1.0, "y": 2.0, "z": 1 }, + "type": "pre-defined", + "resourcename": "Wall", + "item-custom-args": [ + { "argument": "color", "value": "#ffffff" } + ], + "item-custom-args-adv": null +} +``` diff --git a/objects/WhiteboardWall.md b/objects/WhiteboardWall.md new file mode 100644 index 0000000..c932b84 --- /dev/null +++ b/objects/WhiteboardWall.md @@ -0,0 +1,32 @@ +# WhiteboardWall + +### Type +The VideoWall is a 1,8m x 0,9m opaque Plane. +Its Origin is at the Bottom-Center. +Spawnpoint should be {0,1,0} so its 1m above the floor. + + +### 3D +An interactive whiteboard surface that users can draw on collaboratively. + +### Custom Args: +| Key | Type | Implemented | Description | +|---|---|---|---| +| grabable | `"true"` / `"false"` | ⚠️ | Whether the item can be grabbed in-experience (common to all types) | + +### Special Notes: +**Not implemented in save.** The Whiteboard is not serialized to the database JSON by the Creator. It can be placed in the scene but its state will not persist between sessions. + +### Example: + +```json +{ + "position": { "x": 14.0, "y": 1.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": "WhiteboardWall", + "item-custom-args": [], + "item-custom-args-adv": null +} +```