Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        public SelectedVegetationCell(VegetationCell vegetationCell, VegetationStudioCamera vegetationStudioCamera)
        {
            VegetationCell = vegetationCell;
            CameraCount    = 0;

            AddCameraReference(vegetationStudioCamera);
        }
Пример #3
0
        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);
                }
            }
        }
Пример #4
0
 private void AddVisibleVegetationCells()
 {
     for (int i = 0; i <= _vegetationSystemPro.VegetationStudioCameraList.Count - 1; i++)
     {
         VegetationStudioCamera vegetationStudioCamera = _vegetationSystemPro.VegetationStudioCameraList[i];
         OnAddCamera(vegetationStudioCamera);
     }
 }
Пример #5
0
 public void AddCameraReference(VegetationStudioCamera vegetationStudioCamera)
 {
     if (!_vegetationStudioCameraList.Contains(vegetationStudioCamera))
     {
         CameraCount++;
         _vegetationStudioCameraList.Add(vegetationStudioCamera);
         //Debug.Log("Never happens");
     }
 }
Пример #6
0
        public void RemoveCameraReference(VegetationStudioCamera vegetationStudioCamera)
        {
            if (_vegetationStudioCameraList.Contains(vegetationStudioCamera))
            {
                _vegetationStudioCameraList.Remove(vegetationStudioCamera);
                CameraCount--;
            }

//			CameraCount--;
        }
Пример #7
0
        private void OnRemoveCamera(VegetationStudioCamera vegetationStudioCamera)
        {
            //vegetationStudioCamera.OnVegetationCellVisibleDelegate -= OnVegetationCellVisible;

            //vegetationStudioCamera.OnVegetationCellInvisibleDelegate -= OnVegetationCellInvisible;

            vegetationStudioCamera.OnPotentialCellInvisibleDelegate           -= OnVegetationCellInvisible;
            vegetationStudioCamera.OnVegetationCellDistanceBandChangeDelegate -= OnVegetationCellDistanceBandChanged;
            RemoveVisisbleCellsFromCamera(vegetationStudioCamera);
        }
Пример #8
0
        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);
        }
Пример #9
0
 private void OnVegetationCellDistanceBandChanged(VegetationStudioCamera vegetationStudioCamera,
                                                  VegetationCell vegetationCell, int currentDistanceBand, int previousDistanceBand)
 {
     if (currentDistanceBand == 0)
     {
         OnVegetationCellVisible(vegetationStudioCamera, vegetationCell);
     }
     else if (previousDistanceBand == 0)
     {
         OnVegetationCellInvisible(vegetationStudioCamera, vegetationCell);
     }
 }
Пример #10
0
        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);
            }
        }
Пример #11
0
        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);
            }
        }
Пример #12
0
        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);
        }
Пример #13
0
 private void OnAddCamera(VegetationStudioCamera vegetationStudioCamera)
 {
     vegetationStudioCamera.OnPotentialCellInvisibleDelegate           += OnVegetationCellInvisible;
     vegetationStudioCamera.OnVegetationCellDistanceBandChangeDelegate += OnVegetationCellDistanceBandChanged;
     AddVisisbleCellsFromCamera(vegetationStudioCamera);
 }