You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Breaking: a character owns its body and capsule. Queries report a
character's capsule like any shape, and m3Shape_GetBody gives its
body, so a program could destroy, retype or reshape either one, or add
a shape to the body, while the character lived on, which the character
does not support. m3DestroyShape, m3DestroyBody, m3Body_SetType, m3Shape_SetSphere, m3Shape_SetCapsule and a shape create on the
character's body now refuse them with m3_errorInvalid, count a
misuse and change nothing; replay refuses the same ops in a tape.
Destroy the character instead: that still takes its body and capsule
with it, and m3Character_SetStance remains the way to resize it.
Replay also refuses a body type the public call refuses (outside
static, kinematic and dynamic); it used to set any byte.
(#73)
Fixed
Restore refuses a snapshot whose structures this engine could not
have written. It checked each snapshot block on its own
(indices in range, flags, finite floats) but not the structures the
blocks form together. It now also checks, before any byte lands: the
id pools, the body to shape and joint lists, the broadphase tree, the
contact pairs, shared content and its reference counts, and the
records of characters, vehicles, soft bodies and joints. Such a
snapshot is refused with m3_errorInvalid like every other restore
refusal, and the world is left as it was. Nothing is rebuilt, so
restored worlds still resimulate bit for bit, and every snapshot this
engine writes still restores, also one taken between a call and the
next step. The snapshot format is unchanged.
(#70)
m3World_TestPoint reports a point far from a voxel chunk as
outside it. The cell of a point's chunk-local coordinates is now
bounded like every other grid-cell cast, and the library's other
float-to-int conversions were checked the same way. No result changes
for any value in range, and no golden or benchmark hash moved.
(#71)