···301301 c_top := py - SIZE11;
302302 c_bot := py + SIZE11;
303303304304- -- Swept overlap: edge-crossing checks (prev and new extents straddle the face)
304304+ -- Swept overlap
305305 if vx(9) = '0' then
306306- x_overlap := (c_right >= OBS_L(obs_i)) and (c_prev_right <= OBS_L(obs_i));
306306+ x_overlap := (c_right >= OBS_L(obs_i)) and (c_prev_left <= OBS_R(obs_i));
307307 else
308308- x_overlap := (c_left <= OBS_R(obs_i)) and (c_prev_left >= OBS_R(obs_i));
308308+ x_overlap := (c_prev_right >= OBS_L(obs_i)) and (c_left <= OBS_R(obs_i));
309309 end if;
310310311311+ -- Strict y: exclude characters at/below bottom face (down) or at/above top face (up)
311312 if vy(9) = '0' then
312312- y_overlap := (c_bot >= OBS_T(obs_i)) and (c_prev_bot <= OBS_T(obs_i));
313313+ y_overlap := (c_bot >= OBS_T(obs_i)) and (c_prev_top < OBS_B(obs_i));
313314 else
314314- y_overlap := (c_top <= OBS_B(obs_i)) and (c_prev_top >= OBS_B(obs_i));
315315+ y_overlap := (c_prev_bot > OBS_T(obs_i)) and (c_top <= OBS_B(obs_i));
315316 end if;
316317317318 if x_overlap and y_overlap then
+4-4
visualizer.py
···249249 c_top = py - SIZE; c_bot = py + SIZE
250250251251 if to_signed(vx) >= 0:
252252- x_overlap = c_right >= ol and prev_right <= ol
252252+ x_overlap = c_right >= ol and prev_left <= orr
253253 else:
254254- x_overlap = c_left <= orr and prev_left >= orr
254254+ x_overlap = prev_right >= ol and c_left <= orr
255255 if to_signed(vy) >= 0:
256256- y_overlap = c_bot >= ot and prev_bot <= ot
256256+ y_overlap = c_bot >= ot and prev_top < ob
257257 else:
258258- y_overlap = c_top <= ob and prev_top >= ob
258258+ y_overlap = prev_bot > ot and c_top <= ob
259259260260 if x_overlap and y_overlap:
261261 if prev_bot <= ot: