# SceneNode \ Assembly

These are **event** nodes for SimLab’s **VR assembly** system. Each one watches a single part and fires the moment something happens to that part in the assembly — for example the moment it becomes fully assembled, or the moment it becomes this part’s turn to be put on. You wire the event’s output to whatever should happen in response.

Unlike an action you run in a sequence, an event runs on its own — it has no Execute input. Every node on this page works the same way:

- **Enable** (true/false) switches the event on or off. It is on by default; set it to `false` to stop the event from firing.
- **SceneNode** (input) is the part to watch.
- **Execute** (output) fires once each time the event happens — wire it to what should happen next.
- **SceneNode** (output) hands the same part back, so you can act on it in your response.

In a VR assembly, parts go together and come apart in a set order, and a part can be **fully assembled** (in place and secured), **partially assembled** (seated but not yet secured), or **fully disassembled** (all the way out). These events let your scene react the instant a part reaches one of those points, or the instant it becomes — or stops being — the part that may be added or removed next.

To *read* or *set* a part’s assembly state on demand instead of reacting to it, see the **SceneNode \\ Assembly** page; to continuously *check* a part’s state as a true/false condition, see the **Assembly** page.

## What’s on this page

- **Node Assembled** — fires when a part becomes fully assembled.
- **Node Disassembled** — fires when a part becomes fully disassembled.
- **Node Can be Assembled** — fires when it becomes this part’s turn to be put on.
- **Node Can Not be Assembled** — fires when the part is no longer the one allowed to be put on next.
- **Node Can be Disassembled** — fires when it becomes this part’s turn to be taken off.
- **Node Can Not be Disassembled** — fires when the part is no longer the one allowed to be taken off next.

## When a part is fully assembled or fully taken apart

---

### Node Assembled

Fires the moment a part finishes being fully assembled into its place in an assembly.

#### What it does

This event keeps an eye on one part of your assembly. As soon as that part is put fully into place — seated and secured in its spot — the event fires on its own. It does not run as a step in a sequence; it simply watches and waits, then reacts.

When it fires, it hands the same part straight back out so you can act on it right away — for example, play a sound, show a “Step complete” message, or light up the next part to install. Watching a part this way doesn’t change it in any way.

#### Inputs

<table id="bkmrk-port-type-what-to-co"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Enable**</td><td style="white-space: nowrap;">True / false</td><td>Switches this event on or off. Leave it on (the default is `true`) to watch for the part being assembled. Set it to `false` to turn the event off — while off, it will not fire.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The part you want to watch. Connect the part from your assembly that should trigger this event when it is fully put into place.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once each time the watched part becomes fully assembled. Connect it to whatever should happen next.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same part you were watching, handed back so you can use it in the steps that follow.</td></tr></tbody></table>

#### Example

<table id="bkmrk-enable-input-true-sc"><tbody><tr><td style="white-space: nowrap;">**Enable** input</td><td>`true`</td></tr><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>The `Front Wheel` part of your assembly</td></tr><tr><td style="white-space: nowrap;">**Execute** output</td><td>Fires the instant the `Front Wheel` is fully assembled</td></tr><tr><td style="white-space: nowrap;">**SceneNode** output</td><td>Hands back the `Front Wheel` so you can highlight it or play a confirmation sound</td></tr></tbody></table>

#### Tips

- You don’t need to start this event from another node — it watches the part and fires by itself the moment the part is fully assembled.
- Connect the **SceneNode** output to the next action so it works on the exact part that was just put into place.

---

### Node Disassembled

Fires the moment a part in a VR assembly becomes fully taken apart — all the way out of place, not just loosened.

#### What it does

This node watches one part and waits for it to become **fully disassembled**. In SimLab’s assembly system a part moves through three stages — think of a screw: tightened down (fully assembled), dropped into place but not tightened (partially assembled), or all the way out (fully disassembled). The instant the part reaches that last stage — completely out of place — this node fires on its own.

It does not run as a step in a sequence and it never moves or changes the part — it only watches and reacts. When the part comes all the way out, the **Execute** output fires once and hands the same part back on its **SceneNode** output, so you can act on it in your response — for example mark a disassembly step complete or play a sound. You can switch the watching on or off with the **Enable** input.

#### Inputs

<table id="bkmrk-port-type-what-to-co-0"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Enable**</td><td style="white-space: nowrap;">True / false</td><td>Switches this event on or off. It is on by default (`true`), so you can leave it unconnected. Set it to `false` — or feed it a true/false value from elsewhere — when you want to stop the event from firing; while it is `false` the node ignores the part coming apart.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The part you want to watch — for example a `Bolt_01` object from your assembly. The node fires the moment this part becomes fully disassembled.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-0"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once each time the watched part becomes fully disassembled — the instant it comes all the way out of place. Wire this to whatever should happen next, such as marking the step done, playing a confirmation sound, or moving on to the next part.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>Hands back the same part you were watching, so you can act on it in your response — for example pass it on to a node that hides it or highlights it. It is the same object you connected to the input, unchanged.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-bolt"><tbody><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>`Bolt_01`</td></tr><tr><td style="white-space: nowrap;">**Enable** input</td><td>`true` — the event is watching (leave it unconnected for the same result)</td></tr><tr><td style="white-space: nowrap;">**Execute** output</td><td>Fires the instant `Bolt_01` is backed all the way out — you could use it to mark the disassembly step complete and play a confirmation sound</td></tr><tr><td style="white-space: nowrap;">**SceneNode** output</td><td>`Bolt_01` — the same part, ready to pass on to whatever acts on it next</td></tr></tbody></table>

#### Tips

- This event fires once, at the moment the part comes fully out — not continuously while it stays out. If you instead need the current “is it fully out?” answer as a true/false value at any time, use the matching **Node Fully Disassembled** state node on the **Assembly** page.
- A part that is only loosened or seated but not all the way out does *not* fire this event — it fires only when the part is completely disassembled.
- Use the **Enable** input to turn the event off during parts of your scene where a part coming apart shouldn’t trigger anything.

## When a part becomes ready (or stops being ready)

---

### Node Can be Assembled

Fires on its own the moment a part in a VR assembly becomes ready to be put on next — that is, when it finally becomes this part’s turn in the assembly order.

#### What it does

In a VR assembly, parts go on in a set order, and some parts can only be added once the parts before them are already in place. This event keeps an eye on the one part you connect and waits for the moment it becomes ready — the instant everything that has to come before it is assembled, so it is now this part’s turn. The event does not run as part of a sequence; it watches quietly on its own and goes off by itself at that exact moment.

When that moment arrives, the event fires once and hands you back the same part you connected, so you can act on it right away — for example highlight it or show a hint that it is ready to be fitted next. It only watches and reacts; it never assembles the part or changes anything in your scene. You can switch the event off and on with the Enable input.

#### Inputs

<table id="bkmrk-port-type-what-to-co-1"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Enable**</td><td style="white-space: nowrap;">True / false</td><td>Switches the event on or off. It is on by default, so you can usually leave it alone. Connect a true/false value if you want to turn the event off at certain times — while it is `false`, the event will not fire even when the part becomes ready.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The part you want to watch — for example a `Bolt_01` object from your assembly. The event fires the moment this part becomes allowed to be assembled next.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-1"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once each time the part becomes ready to be assembled — the instant the last part that had to come before it is finally in place. Wire this to whatever should happen then, such as highlighting the part or showing a “fit this next” hint.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>Hands back the same part you connected, so you can act on it in whatever runs next — for example pass it straight into a node that highlights or selects it.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-bolt-0"><tbody><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>`Bolt_01`</td></tr><tr><td style="white-space: nowrap;">**Enable** input</td><td>`true` — the event is watching (the default)</td></tr><tr><td style="white-space: nowrap;">**Execute** output</td><td>Fires the instant the `Housing` and `Gear` that come before `Bolt_01` are in place — it is now the bolt’s turn, so you could highlight it to guide the trainee to fit it next</td></tr><tr><td style="white-space: nowrap;">**SceneNode** output</td><td>Hands back `Bolt_01` so you can highlight or select that exact part</td></tr></tbody></table>

#### Tips

- This event fires only at the moment the part *becomes* ready — not over and over while it stays ready. If the part is already ready when your scene starts, the event waits until the answer leaves and returns to ready before firing again.
- Leave **Enable** on for normal use. Connect a true/false value to it only when you want to silence the event during certain parts of your scene.
- This event only reacts to readiness — it never assembles the part. Combine it with your assembly steps to guide the trainee through the parts in the right order.

---

### Node Can Not be Assembled

Fires on its own the moment a part in a VR assembly is *not* allowed to be put on next — that is, when it is not yet this part’s turn in the assembly order.

#### What it does

In a VR assembly, parts go together in a set order, and a part can only be added once the parts that come before it are already in place. This event watches one part and waits for the moment it becomes **not** ready to be assembled — for example, an earlier part it depends on is still missing or has just been taken back off, so it is no longer this part’s turn. When that happens, the event fires once on its own and hands you back the same part so you can react.

You don’t run this event yourself and you don’t wire anything into it from an earlier step — it simply listens while your scene plays and fires the instant the part stops being allowed to go on next. It only watches; it never assembles the part or changes anything in your scene. Use the **Enable** input to switch the watching on or off, and connect the **Execute** output to whatever should happen at that moment, such as hiding a hint or dimming the part’s highlight.

#### Inputs

<table id="bkmrk-port-type-what-to-co-2"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Enable**</td><td style="white-space: nowrap;">True / false</td><td>Switches this event on or off. It is on by default, so the event watches the part and fires when the moment comes. Connect a true/false value to turn the watching off — while it is off (`false`), the event will not fire, no matter what happens to the part.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The part you want to watch — for example a `Bolt_01` object from your assembly. The event fires when this part becomes not allowed to be assembled next.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-2"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once each time the part becomes not allowed to be assembled next — the instant it stops being this part’s turn. Wire this to whatever should happen then, such as hiding a “fit this next” hint or turning off the part’s highlight.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>Hands back the same part you were watching, so you can act on it in response — for example pass it straight into a node that hides it or changes its color. The part itself is not changed.</td></tr></tbody></table>

#### Example

<table id="bkmrk-enable-input-true-%E2%80%94-"><tbody><tr><td style="white-space: nowrap;">**Enable** input</td><td>`true` — the event is watching (the default)</td></tr><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>`Bolt_01`</td></tr><tr><td style="white-space: nowrap;">**Execute** output</td><td>Fires the instant `Bolt_01` is no longer the part allowed to go on next — for example the `Gear` that has to come before it has just been taken back off. You could hide the “fit the bolt” hint until its turn comes around again.</td></tr><tr><td style="white-space: nowrap;">**SceneNode** output</td><td>`Bolt_01` — the same part, ready to send into the node that turns off its highlight</td></tr></tbody></table>

#### Tips

- This is the opposite of **Node Can be Assembled**: that event fires when it becomes the part’s turn to go on, and this one fires when it stops being its turn. Use the two together to highlight a part the moment it is ready and clear the highlight the moment it isn’t.
- Set **Enable** to `false` when you want to stop reacting — for example once a guided step is finished — so the event no longer fires.
- This event only reports; it never assembles the part or moves it. Pair it with your normal assembly steps to guide the trainee through the parts in the right order.

---

### Node Can be Disassembled

Fires on its own the moment a part in a VR assembly becomes the next one allowed to be taken off.

#### What it does

In a VR assembly, parts come apart in a set order — some parts can only be removed once the parts on top of them have already been taken off. This node keeps an eye on one part you choose and waits for the moment it becomes that part’s turn to be removed: when everything that had to come off before it is already off, the event fires.

It fires by itself the instant that happens — you don’t run it from another node. Each time it fires, it also hands you back the part it is watching, so you can act on that exact part in response (for example, highlight it to guide the trainee). It only watches and reacts — it never moves or takes apart the part itself.

#### Inputs

<table id="bkmrk-port-type-what-to-co-3"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Enable**</td><td style="white-space: nowrap;">True / false</td><td>Switches the event on or off. It is on (`true`) by default, so you can usually leave it alone. Set it to `false` when you want to ignore this event for a while — while it is off, the event will not fire.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The part you want to watch — for example a `Bolt_01` object from your assembly. The event fires when this part becomes the next one allowed to be taken off.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-3"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once the moment it becomes this part’s turn to be taken off — that is, when the last part that had to come off before it is finally removed. Wire this to whatever should happen next, such as highlighting the part or showing a hint.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The same part you connected on the way in, handed back so you can act on it right away — for example pass it into a node that highlights it or shows its name.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-bolt-1"><tbody><tr><td style="white-space: nowrap;">**SceneNode** input</td><td>`Bolt_01`</td></tr><tr><td style="white-space: nowrap;">**Enable** input</td><td>`true` — the event is on and watching</td></tr><tr><td style="white-space: nowrap;">**Execute** output</td><td>Fires the instant the `Cover` that sits over `Bolt_01` is removed — the bolt is now the next part allowed to come off, so you could highlight it to guide the trainee to remove it next</td></tr><tr><td style="white-space: nowrap;">**SceneNode** output</td><td>`Bolt_01` — handed back so you can highlight it or show its name</td></tr></tbody></table>

#### Tips

- This is an event — it fires on its own when the part’s turn comes. You don’t connect it after another node; instead you connect its **Execute** output to what should happen.
- Use the **SceneNode** output rather than naming the part again downstream — it is already the exact part the event watched.
- To pause this event for part of your scene, set **Enable** to `false`; set it back to `true` to start watching again.

---

### Node Can Not be Disassembled

Fires the moment a part stops being the one allowed to be taken off next in the assembly order.

#### What it does

In a SimLab assembly, parts come apart in a set order, and at any moment only certain parts are allowed to be removed. This event watches the part you connect and fires on its own the instant that part is no longer the one allowed to be taken off next — for example, when an earlier part that had to come off before it is put back, so it is no longer this part's turn to remove.

It does not watch for the user trying to remove the part, and it does not change anything in the scene. It simply notices the change in the order and hands you back the same part so you can react — show a hint, lock something, play a sound, or update a score.

#### Inputs

<table id="bkmrk-port-type-what-to-co-4"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What to connect</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Enable**</td><td style="white-space: nowrap;">True / false</td><td>Switches the event on or off. Leave it `true` (the default) to have it watch the part. Set it to `false` to turn the event off so it will not fire.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>The part you want to watch — the assembly piece whose turn-to-be-removed you care about.</td></tr></tbody></table>

#### Outputs

<table id="bkmrk-port-type-what-you-g-4"><thead><tr><th style="white-space: nowrap;">Port</th><th style="white-space: nowrap;">Type</th><th>What you get</th></tr></thead><tbody><tr><td style="white-space: nowrap;">**Execute**</td><td style="white-space: nowrap;">Trigger</td><td>Fires once each time the watched part stops being the one allowed to be taken off next. Wire it to whatever should happen in response.</td></tr><tr><td style="white-space: nowrap;">**SceneNode**</td><td style="white-space: nowrap;">Scene node</td><td>Hands back the same part you were watching, so you can act on it in your response.</td></tr></tbody></table>

#### Example

<table id="bkmrk-scenenode-input-brak"><tbody><tr><td>**SceneNode** input</td><td>`Brake Caliper`</td></tr><tr><td>**Enable** input</td><td>`true`</td></tr><tr><td>**Execute** output</td><td>Fires the moment the Brake Caliper is no longer allowed to be taken off next — for instance, after the Mounting Bolt that comes off before it is put back on.</td></tr><tr><td>**SceneNode** output</td><td>`Brake Caliper` — ready to dim, lock, or show a “not yet” hint on.</td></tr></tbody></table>

#### Tips

- This is an automatic event — it fires on its own when the order changes. You do not need to trigger it from another node.
- Use it together with **Node Can be Disassembled** to react both when a part becomes allowed to be removed and when it stops being allowed.
- To pause this event during part of your scene, feed the **Enable** input a `false` value; switch it back to `true` to resume watching.