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); } } }
public SelectedVegetationCell(VegetationCell vegetationCell, VegetationStudioCamera vegetationStudioCamera) { VegetationCell = vegetationCell; CameraCount = 0; AddCameraReference(vegetationStudioCamera); }
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); } } }
private void AddVisibleVegetationCells() { for (int i = 0; i <= _vegetationSystemPro.VegetationStudioCameraList.Count - 1; i++) { VegetationStudioCamera vegetationStudioCamera = _vegetationSystemPro.VegetationStudioCameraList[i]; OnAddCamera(vegetationStudioCamera); } }
public void AddCameraReference(VegetationStudioCamera vegetationStudioCamera) { if (!_vegetationStudioCameraList.Contains(vegetationStudioCamera)) { CameraCount++; _vegetationStudioCameraList.Add(vegetationStudioCamera); //Debug.Log("Never happens"); } }
public void RemoveCameraReference(VegetationStudioCamera vegetationStudioCamera) { if (_vegetationStudioCameraList.Contains(vegetationStudioCamera)) { _vegetationStudioCameraList.Remove(vegetationStudioCamera); CameraCount--; } // CameraCount--; }
private void OnRemoveCamera(VegetationStudioCamera vegetationStudioCamera) { //vegetationStudioCamera.OnVegetationCellVisibleDelegate -= OnVegetationCellVisible; //vegetationStudioCamera.OnVegetationCellInvisibleDelegate -= OnVegetationCellInvisible; vegetationStudioCamera.OnPotentialCellInvisibleDelegate -= OnVegetationCellInvisible; vegetationStudioCamera.OnVegetationCellDistanceBandChangeDelegate -= OnVegetationCellDistanceBandChanged; RemoveVisisbleCellsFromCamera(vegetationStudioCamera); }
private void OnAddCamera(VegetationStudioCamera vegetationStudioCamera) { //Debug.Log("OnAddCamera: Sceneview: " + (vegetationStudioCamera.VegetationStudioCameraType == VegetationStudioCameraType.SceneView).ToString()); //vegetationStudioCamera.OnVegetationCellVisibleDelegate += OnVegetationCellVisible; //vegetationStudioCamera.OnVegetationCellInvisibleDelegate += OnVegetationCellInvisible; vegetationStudioCamera.OnPotentialCellInvisibleDelegate += OnVegetationCellInvisible; vegetationStudioCamera.OnVegetationCellDistanceBandChangeDelegate += OnVegetationCellDistanceBandChanged; AddVisisbleCellsFromCamera(vegetationStudioCamera); }
private void OnVegetationCellDistanceBandChanged(VegetationStudioCamera vegetationStudioCamera, VegetationCell vegetationCell, int currentDistanceBand, int previousDistanceBand) { if (currentDistanceBand == 0) { OnVegetationCellVisible(vegetationStudioCamera, vegetationCell); } else if (previousDistanceBand == 0) { OnVegetationCellInvisible(vegetationStudioCamera, vegetationCell); } }
private void OnVegetationCellVisible(VegetationStudioCamera vegetationStudioCamera, VegetationCell vegetationCell) { 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 OnVegetationCellInvisible(VegetationStudioCamera vegetationStudioCamera, VegetationCell vegetationCell) { SelectedVegetationCell selectedVegetationCell = GetSelectorVegetationCell(vegetationCell); if (selectedVegetationCell == null) { return; } selectedVegetationCell.RemoveCameraReference(vegetationStudioCamera); if (selectedVegetationCell.CameraCount == 0) { VisibleSelectorVegetationCellList.Remove(selectedVegetationCell); OnVegetationCellInvisibleDelegate?.Invoke(selectedVegetationCell.VegetationCell); } }
public JobHandle ProcessCulling(JobHandle processCullingHandle) { ResetVisibilityJob resetVisibilityJob = new ResetVisibilityJob { InstanceList = InstanceList }; processCullingHandle = resetVisibilityJob.Schedule(processCullingHandle); for (int i = 0; i <= _vegetationSystemPro.VegetationStudioCameraList.Count - 1; i++) { VegetationStudioCamera vegetationStudioCamera = _vegetationSystemPro.VegetationStudioCameraList[i]; if (!vegetationStudioCamera.Enabled) { continue; } if (vegetationStudioCamera.SelectedCamera == null) { continue; } DistanceCullingJob distanceCullingJob = new DistanceCullingJob { InstanceList = InstanceList, CameraPosition = vegetationStudioCamera.SelectedCamera.transform.position - _vegetationSystemPro.FloatingOriginOffset, CullingDistance = CullingDistance, }; processCullingHandle = distanceCullingJob.Schedule(processCullingHandle); } _visibilityChangedIndexList.Clear(); VisibilityChangedFilterManualJob visibilityChangedFilterManualJob = new VisibilityChangedFilterManualJob { InstanceList = InstanceList, VisibilityChangedIndexList = _visibilityChangedIndexList }; processCullingHandle = visibilityChangedFilterManualJob.Schedule(processCullingHandle); return(processCullingHandle); }
private void OnAddCamera(VegetationStudioCamera vegetationStudioCamera) { vegetationStudioCamera.OnPotentialCellInvisibleDelegate += OnVegetationCellInvisible; vegetationStudioCamera.OnVegetationCellDistanceBandChangeDelegate += OnVegetationCellDistanceBandChanged; AddVisisbleCellsFromCamera(vegetationStudioCamera); }