public bool Raycast(Ray ray, out Axial position) { Plane horizontalPlane = new Plane(Vector3.up, transform.position); float distance = 0.0f; if (horizontalPlane.Raycast(ray, out distance)) { Vector3 hitWorldPosition = ray.origin + ray.direction * distance; Vector3 hitLocalPosition = transform.InverseTransformPoint(hitWorldPosition); float q = (Mathf.Sqrt(3.0f) / 3.0f * hitLocalPosition.x - 1.0f / 3.0f * hitLocalPosition.z) / HexSize; float r = (2.0f / 3.0f * hitLocalPosition.z) / HexSize; position = Axial.Round(q, r); return(IsWithinBounds(position)); } position = new Axial(); return(false); }
public static Axial operator /(Axial lhs, float scalar) { return(Axial.Round(lhs.q / scalar, lhs.r / scalar)); }
public static Axial operator *(float scalar, Axial rhs) { return(Axial.Round(rhs.q * scalar, rhs.r * scalar)); }