hitTestInput method
Evaluates this display object to see if the coordinates localX
and
localY
are inside this display object.
If the coordinates are inside, this display object is returned; null otherwise.
localX
and localY
are relative to to the origin (0,0) of this
display object (local coordinates).
Implementation
@override
DisplayObject? hitTestInput(num localX, num localY) {
for (var i = 0; i < ixList.length - 2; i += 3) {
final i1 = ixList[i + 0] << 2;
final i2 = ixList[i + 1] << 2;
final i3 = ixList[i + 2] << 2;
final x1 = vxList[i1 + 0];
final y1 = vxList[i1 + 1];
final x2 = vxList[i2 + 0];
final y2 = vxList[i2 + 1];
final x3 = vxList[i3 + 0];
final y3 = vxList[i3 + 1];
if (localX < x1 && localX < x2 && localX < x3) continue;
if (localX > x1 && localX > x2 && localX > x3) continue;
if (localY < y1 && localY < y2 && localY < y3) continue;
if (localY > y1 && localY > y2 && localY > y3) continue;
final vx1 = x3 - x1;
final vy1 = y3 - y1;
final vx2 = x2 - x1;
final vy2 = y2 - y1;
final vx3 = localX - x1;
final vy3 = localY - y1;
final dot11 = vx1 * vx1 + vy1 * vy1;
final dot12 = vx1 * vx2 + vy1 * vy2;
final dot13 = vx1 * vx3 + vy1 * vy3;
final dot22 = vx2 * vx2 + vy2 * vy2;
final dot23 = vx2 * vx3 + vy2 * vy3;
final u =
(dot22 * dot13 - dot12 * dot23) / (dot11 * dot22 - dot12 * dot12);
final v =
(dot11 * dot23 - dot12 * dot13) / (dot11 * dot22 - dot12 * dot12);
if ((u >= 0) && (v >= 0) && (u + v < 1)) return this;
}
return null;
}