public KCLHit CheckHit(Vector3 point)
        {
            HitPrisms.Clear();
            var hit = CollisionHandler.CheckPoint(this, point, 1, 1);

            return(hit);
        }
        /// <summary>
        /// Checks if a prism gets hit from a given point and returns hit information.
        /// </summary>
        /// <returns></returns>
        public KCLHit CheckHit(Vector3 point)
        {
            ResetHits();

            point = CollisionHandler.ConvertLocalSpace(Transform, point);
            //Model only has one model to search, check directly instead
            if (Models.Count == 1)
            {
                return(Models[0].CheckHit(point));
            }

            //Check total bounding area
            bool inRange = (MinCoordinate.X < point.X && point.X < MaxCoordinate.X &&
                            MinCoordinate.Y < point.Y && point.Y < MaxCoordinate.Y &&
                            MinCoordinate.Z < point.Z && point.Z < MaxCoordinate.Z);

            if (!inRange)
            {
                return(null);
            }

            Vector3 boxSize = new Vector3(
                1 << (int)CoordinateShift.X,
                    1 << (int)CoordinateShift.Y,
                    1 << (int)CoordinateShift.Z);

            var block = SearchModelBlock(ModelOctreeRoot.Children, point, MinCoordinate, boxSize);

            if (block != null && block.ModelIndex != null)
            {
                var hit = Models[(int)block.ModelIndex].CheckHit(point);
                return(hit);
            }

            return(null);
        }