/// <summary> /// Build the <see cref="VisibilityProbeIntersectionJobData"/> and feed the <see cref="VisibilityProbeLocalPoints"/> based on targetted interactive object probe. /// </summary> private VisibilityProbeIntersectionJobData CalculatingVisibilityProbeJobData(RangeIntersectionCalculator RangeIntersectionCalculatorV2, ref int currentVisibilityProbeLocalPointsCounter) { var visibilityProbes = RangeIntersectionCalculatorV2.TrackedInteractiveObject.InteractiveGameObject.VisibilityProbe; VisibilityProbeIntersectionJobData visibilityProbeIntersectionJobData = default; if (visibilityProbes.LocalPoints != null && visibilityProbes.LocalPoints.Length > 0) { int startIndex = currentVisibilityProbeLocalPointsCounter; int endIndex = startIndex; for (int i = 0; i < visibilityProbes.LocalPoints.Length; i++) { this.VisibilityProbeLocalPoints[currentVisibilityProbeLocalPointsCounter] = visibilityProbes[i]; endIndex = currentVisibilityProbeLocalPointsCounter; currentVisibilityProbeLocalPointsCounter += 1; } visibilityProbeIntersectionJobData = new VisibilityProbeIntersectionJobData() { VisibilityProbeLocalToWorld = RangeIntersectionCalculatorV2.TrackedInteractiveObject.InteractiveGameObject.LogicCollider.transform.localToWorldMatrix, VisibilityProbePositionsBeginIndexIncluded = startIndex, VisibilityProbePositionsEndIndexIncluded = endIndex }; } return(visibilityProbeIntersectionJobData); }
public void CalculationDataSetupForRangeIntersectionCalculator(RangeIntersectionCalculator rangeIntersectionCalculator, IsOccludedByObstacleJobData IsOccludedByObstacleJobData, VisibilityProbeIntersectionJobData visibilityProbeIntersectionJobData, int currentObstacleIntersectionCalculatorCounter) { if (rangeIntersectionCalculator.GetAssociatedRangeObjectType() == RangeType.SPHERE) { var SphereRangeObject = (SphereRangeObjectV2)rangeIntersectionCalculator.GetAssociatedRangeObject(); var SphereIntersectionJobData = new SphereIntersectionJobData { RangeIntersectionCalculatorV2UniqueID = rangeIntersectionCalculator.RangeIntersectionCalculatorV2UniqueID, RangeTransform = SphereRangeObject.GetTransform(), IsOccludedByObstacleJobData = IsOccludedByObstacleJobData, VisibilityProbeIntersectionJobData = visibilityProbeIntersectionJobData, ObstacleCalculationDataIndex = SphereRangeObject.GetObstacleListener() == null ? -1 : (currentObstacleIntersectionCalculatorCounter - 1), SphereRadius = SphereRangeObject.SphereBoundingCollider.radius }; this.SphereIntersectionJobData[this.currentSphereIntersectionJobdataCounter] = SphereIntersectionJobData; this.currentSphereIntersectionJobdataCounter += 1; } }
public void CalculationDataSetupForRangeIntersectionCalculator(RangeIntersectionCalculator rangeIntersectionCalculator, IsOccludedByObstacleJobData IsOccludedByObstacleJobData, VisibilityProbeIntersectionJobData visibilityProbeIntersectionJobData, int currentObstacleIntersectionCalculatorCounter) { if (rangeIntersectionCalculator.GetAssociatedRangeObjectType() == RangeType.ROUNDED_FRUSTUM) { var RoundedFrustumRangeObject = (RoundedFrustumRangeObjectV2)rangeIntersectionCalculator.GetAssociatedRangeObject(); var RoundedFrustumIntersectionJobData = new RoundedFrustumIntersectionJobData { RangeIntersectionCalculatorV2UniqueID = rangeIntersectionCalculator.RangeIntersectionCalculatorV2UniqueID, FrustumRadius = RoundedFrustumRangeObject.GetFrustum().GetFrustumFaceRadius(), RangeTransform = RoundedFrustumRangeObject.GetTransform(), IsOccludedByObstacleJobData = IsOccludedByObstacleJobData, RoundedFrustumPositions = RoundedFrustumRangeObject.GetFrustumWorldPositions(), VisibilityProbeIntersectionJobData = visibilityProbeIntersectionJobData, ObstacleCalculationDataIndex = RoundedFrustumRangeObject.GetObstacleListener() == null ? -1 : (currentObstacleIntersectionCalculatorCounter - 1) }; this.RoundedFrustumIntersectionJobData[currentRoundedFrustumIntersectionJobDataCounter] = RoundedFrustumIntersectionJobData; currentRoundedFrustumIntersectionJobDataCounter += 1; } }