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); }