static Route* mouse2route(Mouse m) { Point p, q; Route *r; p = subpt(m.xy, screen->r.min); p.x /= BoardX; p.y /= BoardY; q = subpt(p, level.glenda); // fprint(2, "x=%d y=%d\n", q.x, q.y); if (q.x == 0 && q.y == 0) return nil; if (q.x == 0 || q.y == 0) { if (q.x < 0) r = extend(nil, Left, -q.x, Pt(level.glenda.x, p.y)); else if (q.x > 0) r = extend(nil, Right, q.x, Pt(level.glenda.x, p.y)); else if (q.y < 0) r = extend(nil, Up, -q.y, level.glenda); else if (q.y > 0) r = extend(nil, Down, q.y, level.glenda); else r = nil; if (r != nil && isvalid(level.glenda, r, validpush)) return r; freeroute(r); } return findroute(level.glenda, p); }
void stopanimation(Animation *a) { if (a == nil) return; if (a->route != nil) freeroute(a->route); memset(a, 0, sizeof(Animation)); }