// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.ui.gfx;

// Describes where a hit occurred within the content of a node tagged
// by this session.
//
// To compute the point of intersection within the node's local coordinate
// system, perform the following calculation using the ray which was
// originally passed to |Session.HitTest()|.
//
//   hit_point = ray.origin + (hit.distance * ray.direction)
//   local_point = hit.inverse_transform * hit_point
struct Hit {
  // The node's tag value.
  uint32 tag_value;

  // The origin of the ray that was used for the hit test, in the hit
  // node's coordinate system.
  vec4 ray_origin;

  // The direction of the ray that was used for the hit test, in the hit
  // node's coordinate system.
  vec4 ray_direction;

  // The inverse transformation matrix which maps the coordinate system of
  // the node at which the hit test was initiated into the local coordinate
  // system of the node which was hit.
  mat4 inverse_transform;

  // The distance from the ray's origin to the closest point of intersection
  // in multiples of the ray's direction vector.
  float32 distance;
};
