A local state machine started over in every Run behavior call, so a
state set in a sub-behavior was gone by the next call. A character
controller split into sub-behaviors could therefore never remember
that it was attacking. Scene or global scope would keep the state, but
then every character shares it.
- A call now runs on the states of the instance that runs it, however
deep. A state one call sets is still set in the next one, and the
call begins in the start state like the instance does.
- A move made inside a call is reported like one the caller made. The
caller's On state entered and On state exited hear it, the event
nodes of the called graph stay silent as before.
- Two objects running the same behavior still hold a state each.
- This reverses the rule from #229 that local machines of a called
behavior are not kept. Keep stays a switch for variables only.
Tests:
- Two unit tests that pinned the old rule now expect the shared state.
- New world test: a sub-behavior closes a door per object, the
caller's events hear it, and the next call finds it closed.
- Counter-check: with the old call context the 3 tests fail.
- Gate on melektaus-atx: 239 files, 3600 tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>