Exemple #1
0
        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);
        }
Exemple #2
0
 public static Axial operator /(Axial lhs, float scalar)
 {
     return(Axial.Round(lhs.q / scalar, lhs.r / scalar));
 }
Exemple #3
0
 public static Axial operator *(float scalar, Axial rhs)
 {
     return(Axial.Round(rhs.q * scalar, rhs.r * scalar));
 }