# Elastic time (/docs/unreal/elastic-time)

A Level Sequence normally plays everything at the second it was authored. Elastic time marks a moment as stretchy: a section loops at normal speed until a trigger arrives, and everything after it moves later by the same amount. Nothing plays faster or slower.

## Words [#words]

- **Anchor:** a marker on the Living Stories track for the stretchy moment. Each anchor has its own colour.
- **Binding:** a section follows an anchor. When the anchor moves, bound sections move with it.
- **Trigger:** the text that ends the wait. Vote anchors are triggered when the vote resolves.

## Wait for a vote [#wait-for-a-vote]

1. Select the **Interaction** section on the Living Stories track.
2. In **Details → Timing**, tick **Wait For All Votes (Elastic)**.

A vote anchor appears at the end of the interaction. Untick the box to remove it. Without it, the interaction is a fixed window, and the result is whatever was voted when time ran out.

## Add your own anchor [#add-your-own-anchor]

1. Put the playhead at the moment.
2. Right-click the Living Stories track and choose **Add Anchor at Playhead**.
3. Name it, and give it a trigger channel if it should wait. By convention, use `LS.Manual.<anchor name>`.

An anchor with an empty trigger channel doesn't wait. Drag the anchor's marker on the ruler to move it; bound sections follow.

## Bind sections [#bind-sections]

1. Select the sections that should follow the anchor: animation, lights, camera cuts or a whole subsequence.
2. Right-click the Living Stories track and choose **Bind Selected Section(s) to Anchor**, then pick the anchor.

Bound sections are tinted in the anchor's colour and keep their distance to it. To undo, choose **Unbind Selected Section(s)**.

Put everything that comes after the moment in one subsequence and bind that, instead of binding many sections.

## The waiting loop [#the-waiting-loop]

The section that repeats while waiting, usually an idle animation, needs one more setting. In the track's properties, under **Advanced → ExternalBindings**, find its row and set **Mode** to **ExtendEndLoop**. Its end then loops until the anchor resolves.

- Keep the clip shorter than the section, so it visibly loops.
- A section with keyframes, such as a light fade or a camera move, should be bound normally, not as a loop.
- A subsequence that loops needs **Can Loop** turned on.

## Cameras [#cameras]

A camera that should stay on through the wait should not be bound. Untick the end of its camera cut section's range instead, so it never ends. Bind cameras only to cut at the elastic moment: end camera A at the anchor with **ExtendEndLoop**, and start camera B there with **TranslateOnStart**.

## Test it in the editor [#test-it-in-the-editor]

Play the sequence in Play In Editor through **Play Living Sequence**. To stand in for a trigger, open the console and type:

```
LS.Trigger LS.Manual.<anchor name>
```

The log says when an anchor is waiting (`anchor 'X' awaiting 'channel'`) and when it resolves. If a trigger matches no anchor, the log prints the channel it expected. A typo in the channel is the most common reason nothing happens.

Playing never changes the sequence asset, and one undo reverts any edit.
