private void AddVisisbleCellsFromCamera(VegetationStudioCamera vegetationStudioCamera) { JobCullingGroup jobCullingGroup = vegetationStudioCamera.JobCullingGroup; if (jobCullingGroup == null) { return; } for (int i = 0; i <= jobCullingGroup.VisibleCellIndexList.Length - 1; i++) { VegetationCell vegetationCell = vegetationStudioCamera.PotentialVisibleCellList[jobCullingGroup.VisibleCellIndexList[i]]; SelectedVegetationCell selectedVegetationCell = GetSelectorVegetationCell(vegetationCell); if (selectedVegetationCell != null) { selectedVegetationCell.AddCameraReference(vegetationStudioCamera); } else { selectedVegetationCell = new SelectedVegetationCell(vegetationCell, vegetationStudioCamera); VisibleSelectorVegetationCellList.Add(selectedVegetationCell); OnVegetationCellVisibleDelegate?.Invoke(selectedVegetationCell.VegetationCell); } } }
private void RemoveVisisbleCellsFromCamera(VegetationStudioCamera vegetationStudioCamera) { JobCullingGroup jobCullingGroup = vegetationStudioCamera.JobCullingGroup; if (jobCullingGroup == null) { return; } for (int j = 0; j <= jobCullingGroup.VisibleCellIndexList.Length - 1; j++) { VegetationCell vegetationCell = vegetationStudioCamera.PotentialVisibleCellList[jobCullingGroup.VisibleCellIndexList[j]]; SelectedVegetationCell selectedVegetationCell = GetSelectorVegetationCell(vegetationCell); if (selectedVegetationCell == null) { continue; } selectedVegetationCell.RemoveCameraReference(vegetationStudioCamera); if (selectedVegetationCell.CameraCount == 0) { VisibleSelectorVegetationCellList.Remove(selectedVegetationCell); OnVegetationCellInvisibleDelegate?.Invoke(selectedVegetationCell.VegetationCell); } } }
void CreateCullingGroup() { JobCullingGroup?.Dispose(); JobCullingGroup = new JobCullingGroup { TargetCamera = SelectedCamera }; JobCullingGroup.OnStateChanged += OnStateChanged; JobCullingGroup.OnDistanceBandStateChanged += OnDistanceBandStateChanged; }
void CreateBillboardCullingGroup() { BillboardJobCullingGroup?.Dispose(); BillboardJobCullingGroup = new JobCullingGroup { TargetCamera = SelectedCamera }; //BillboardJobCullingGroup.OnStateChanged += OnStateChanged; UpdateBillboardCullingGroup(); }
public void Dispose() { PotentialVisibleCellList?.Clear(); JobCullingGroup?.Dispose(); JobCullingGroup = null; BillboardJobCullingGroup?.Dispose(); BillboardJobCullingGroup = null; DisposeVegetationStudioCameraRenderList(); _potentialCellsCenterPosition = new Vector3(0, -10000, 0); }