protected Vector3[] getRaysForFovAndDirection(FovDirectionPair fovDirPair, Vector3 right) { Vector3[] array; if (!fovDirectionPairToRays.ContainsKey(fovDirPair)) { array = GetRaysForFOV(fovDirPair.Fov, NumHorizRays, NumVertRays, fovDirPair.Forward, fovDirPair.Up, right); fovDirectionPairToRays.Add(fovDirPair, array); } else { array = fovDirectionPairToRays[fovDirPair]; } return(array); }
public override void Execute(Visibility visibility) { for (int i = 0; i < gameObjectDatas.Length; i++) { FovDirectionPair fovDirPair = new FovDirectionPair(visibility.Fov, visibility.Forward, visibility.Up); Vector3[] raysForFovAndDirection = getRaysForFovAndDirection(fovDirPair, visibility.Right); for (int j = 0; j < raysForFovAndDirection.Length; j++) { if (Physics.Raycast(visibility.Position, raysForFovAndDirection[j], out var hitInfo)) { Transform key = hitInfo.transform; if (transformToGoData.ContainsKey(key)) { GameObjectData gameObjectData = transformToGoData[key]; gameObjectData.TriangleVisibilities[hitInfo.triangleIndex] = true; } } } } }