The boom never shortened: the spring arm was created with SetAutoActivate(false) and ToggleCamera() activated only the camera, so the arm never ticked and its collision probe never ran.
-cameratest reproduces it and writes a placement screenshot. Two traps are documented in the changelog because each made a working mechanism look broken: a spawned static-mesh actor has no collision unless created deferred, and TargetArmLength is not rewritten when the boom shortens.
The boom never shortened: the spring arm was created with `SetAutoActivate(false)` and `ToggleCamera()` activated only the camera, so the arm never ticked and its collision probe never ran.
Now, with a 2 m wall spawned 4 m behind the pawn:
```
CAMTEST spawned wall blocks trace=1 dist=300
CAMTEST wall behind pawn: boom 288 cm (requested 340, shortened 52) -> PASS
```
`-cameratest` reproduces it and writes a placement screenshot. Two traps are documented in the changelog because each made a working mechanism look broken: a spawned static-mesh actor has no collision unless created deferred, and `TargetArmLength` is not rewritten when the boom shortens.
0.2.3 is about camera clipping, and nothing had ever exercised the spring arm's
collision test. This adds a harness: find the nearest wall from the spawn, stand the pawn
70 cm off it facing away, wait for the boom, then report the arm length, whether the boom
ends inside geometry, and a back-trace from camera to head.
Inconclusive, and the setup is the suspect rather than the engine: every run reports the
arm at its resting 340 cm, but BOTH traces come back clear, so nothing was between the
pawn and the boom at all. The placement is wrong, not necessarily the collision.
Three wrong turns recorded in TODO.md because each cost a run: the probe accepted the
floor as a wall, then faced the pawn into the wall by negating the impact normal (which
points away from it), then set actor rotation only - which a possessed pawn discards in
favour of control rotation.
Next: look at the placement screenshot before trusting the measurement.
Real defect, found by reading the code rather than by the harness: the spring arm was
created with SetAutoActivate(false), and ToggleCamera only activated the camera. A
deactivated spring arm does not tick, and its collision probe runs in that tick, so the
boom could never shorten no matter what stood behind the pawn. ToggleCamera and BeginPlay
now activate the arm alongside the camera.
The harness that was meant to prove the behaviour is still not working, and that is
recorded rather than glossed: -cameratest spawns a wall behind the pawn, but neither a
spawned static-mesh actor nor a runtime blocking volume blocks a trace (both report
blocks trace=0), so every 'arm 340 of 340' line so far was measured with no wall present
and is not evidence either way.
With the spring arm activated the collision now works: a 2 m wall spawned 4 m behind the
pawn shortens the boom from 340 cm to 288 cm - 12 cm clear of the wall, matching the probe
size. -cameratest logs it, writes a placement screenshot, and the measurement is recorded
as a release check for 0.2.3.
Two traps documented because each one made a working mechanism look broken:
- a spawned static-mesh actor has no collision unless it is created deferred and given
its mesh and collision before FinishSpawning (three runs reported blocks trace=0)
- TargetArmLength is not rewritten when the boom shortens, so reading the property
reports the requested length; the camera's distance from the head is the measurement
Writes the 0.2.3 changelog entry and prunes the section from TODO.md.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The boom never shortened: the spring arm was created with
SetAutoActivate(false)andToggleCamera()activated only the camera, so the arm never ticked and its collision probe never ran.Now, with a 2 m wall spawned 4 m behind the pawn:
-cameratestreproduces it and writes a placement screenshot. Two traps are documented in the changelog because each made a working mechanism look broken: a spawned static-mesh actor has no collision unless created deferred, andTargetArmLengthis not rewritten when the boom shortens.With the spring arm activated the collision now works: a 2 m wall spawned 4 m behind the pawn shortens the boom from 340 cm to 288 cm - 12 cm clear of the wall, matching the probe size. -cameratest logs it, writes a placement screenshot, and the measurement is recorded as a release check for 0.2.3. Two traps documented because each one made a working mechanism look broken: - a spawned static-mesh actor has no collision unless it is created deferred and given its mesh and collision before FinishSpawning (three runs reported blocks trace=0) - TargetArmLength is not rewritten when the boom shortens, so reading the property reports the requested length; the camera's distance from the head is the measurement Writes the 0.2.3 changelog entry and prunes the section from TODO.md.