`Camera.flyTo` does not suspend controllers registered with `Scene.controllerHost`, so the new modular camera controllers can hijack a flight
- Dominant language
- JavaScript
- Stars
- 15.7k
- Forks
- 3.9k
- Avg merge
- 4d 6h
- Merged PRs (30d)
- 34
Description
### What happened?
`CameraFlightPath.createTween()` suspends camera input for the duration of a flight by setting `scene.screenSpaceCameraController.enableInputs = false`, restoring it afterwards (see open Issue: #13771, fixed in: #1377).
However, it only ever touches the legacy, monolithic `ScreenSpaceCameraController`. It never suspends controllers registered with the new `Scene.controllerHost` (the `Controller` framework added in #13604, e.g. `ScreenSpaceMapCameraController`, `ScreenSpaceTiltOrbitCameraController`, `ScreenSpaceZoomCameraController`).
The documented migration path to the new framework is:
```js
scene.screenSpaceCameraController.enableInputs = false;
viewer.addController(new Cesium.ScreenSpaceMapCameraController());
```
Once an application follows this path, camera flights lose *all* input suspension: dragging, scrolling, or tilting during a `flyTo()` competes with the flight animation instead of being ignored, because nothing tells the modular controllers a flight is in progress. This is a behavioral regression relative to `ScreenSpaceCameraController`, which has always suspended input for the duration of a flight.
**Expected:** while a camera flight is in progress, no registered controller (legacy or modular) responds to user input. Input should resume normally once the flight completes or is cancelled, without replaying whatever was accumulated during the flight as a sudden camera jump.
**Actual:** modular controllers registered with `Scene.controllerHost` keep processing input throughout the flight and can hijack the camera before it reaches its destination.
### Reproduction steps
1. Open the Sandcastle below. It disables the legacy `screenSpaceCameraController` and registers a `ScreenSpaceMapCameraController` instead.
2. Click **Fly somewhere (3s)**. While the HUD reads `FLYING`, click-and-drag the globe with the left mouse button.
3. Notice the drag pans the camera immediately, fighting the in-progress flight, instead of being ignored the way it would be with the legacy controller and `enableInputs = false`.
### Sandcastle example
https://sandcastle.cesium.com/#c=pVZpj9s2EP0rAwdFZMSm7XiPRF6nRTYHFkjSIklbFFE/0OJIIpYaCiTlo8H+94IU5SPHokVswDKpmTfDR84b5pqsg7XEDRpYAuEGrtHKtmZ/hLkkG+RhfK3JcUlossFwkVEe/GyOhLCM/iwMFxllNJnAK62U3oCrEITO2xrJoYBaloY7qQka7iootAkWIa4mZ7RSaKAwvMaNNrdpgBLS8pXCYKmw5PkOak1aSVfJHPKDHycBBktpnR9ArUWruAFNyDIK2TGbG0T60PAcr3mNhh/CMiQf5oaa1llYQsGVxf1aa9586XBK2IcD8tuvbRPPWuSJC3H04hvAw57E8XgMv9/4x499+kU4rdWK+8T7PWElupcK/d/nuxuRZINo0+1zHDDrdgpZbu1H3DpYZgSQDYS0jeK7tFC4XfifsZAGc7+9aa5VW9OCK1nSWDqsbWqdQZdXi5I36WzabBc13443UrgqnV/4cTaARx3yiue3pdEtidSUK55MR/7LngwXDRdCUpnOzprtYqWNQDM2XMjWpn4m10qb9EFRFEdohSYXHCYzdnYOlpMdWzSyyAaB6I6bqhXHvOQGucNITeIXu+4oqVrxJR19jJVWAmaXzTacT+uPQgjRs8ibBklcV1KJpGrF8Ch6oXbPW+c03ZfDKlh0aewdWK64te94jSGRrlzHvemJpcOt86cMqUv6ldqB1TVuKjQIydwOv5vuHuQ46Rqt5SX+J9qi7WkO3f68MLwMxV0qvULYSFfFWi8c1Lq1CN1yYFPJqAN5KBmQ1jMnqWRw2O8/e4BeAO4vzb1koAgK4j0PYFFwjlQmypEYwU63BoTP3jqpFDSc7HF2Hu3oGMqyct37Qvn/wEnWQQ3Zd3mPtJ0oQvT+YU2YTODjRgOnUqEIIt5oSc6OgCuHhriTVI7AasA1mh3kSua3nnIOBrmCuY2psP5AeAwvnZ/8ij+D0pTCE3Z+PgLFXQpnl2x+OYIKvVMKs8fT6ZRN/QQPRQ2Pw7CRLq9SGM/P2RTuRkdYl+xsj3XBnp7fhzW+OAWbRrC/FxkpdEBd6U7jsDtGR7J/XDiaurUvoWgpCBwkQ/jsMzssPDZC+8kj+yjQx0jC8xHMhvBTZ8MUUumqEAYOsZ1pMTjGTtGdI1ao3UedhHAAAq2TFI5N2veea24cWslpzgqj6xdYGkSbdA4dGlOaRqcT3J1OdFzGuWF8aiORXAz3ubffsxwTeMtdxZx+z4XkZJMIF2yG+yBxK+5xCRYHB19wKfht7Gbu4lO0JiY037/Ldd0odJh+vUX+89X2HuPlnHJU/9/zzpfl3XFpKrlGXxxCtz9UoAHwN683IhZfuBOlYLDRxlnYVOiqcMuJaiAtSILG6NKgtaFqpXtoAbndBTSnwaFS3pPCwOyCdpVePTPar91gYdBWPQW+3Z32jY6QjoeffRd589fNu9cwPkEE0pts0Bml8FAKhTCOCvJF48kGDxd9pNhYfRffRwpBHhTFxepilQ0g9aOLVVE8PQ+qeefp3ye96C96jbbuPZLo7lsv10jujVd5QpNEa288GA2uQtBnPoVfZO3phdaohLGJw7pR3KGdrNr8Fp3v+N7patK7XAm5BimW37gmQ+jLy2xQtEp9kP9gNnh2NRFyfeKmdCiSX9doFN95k2r27E03yRi7mlSzb3jt72j7d/8C
### Environment
Browser: all (reproduced in Chrome and Firefox; not browser-specific)
CesiumJS Version: 1.145.0
Operating System: all
### AI acknowledgment
- [x] I used AI to generate this issue report.
- [x] (If the above is checked) I have reviewed the AI-generated content before submitting.
Contributor guide
Research direction
Start at CameraFlightPath.createTween() and inspect how it toggles scene.screenSpaceCameraController.enableInputs, then trace Scene.controllerHost and the listed modular camera controllers. Reproduce the Sandcastle flight and verify that registered legacy and modular controllers ignore input during the flight, resume after completion or cancellation, and do not cause a camera jump.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- computer-graphics, frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 64/100