Example #1
0
        // Depthの値が指定順に並んでいるか確認する
        // 並んでいない場合は調整する
        void ModifyDepth(int studioId)
        {
            Studio studio = studios.GetValue(studioId);
            IReadOnlyList <CameraInStudio> cameraList = cameraListHolder.GetCameraList(studioId);

            if (studio == null && !cameraList.IsEmpty())
            {
                Debug.LogError($"Cannot get studio: studioId={studioId}");
                return;
            }

            int usableMinDepth = studio.MinDepth;

            for (int i = 0; i < cameraList.Count; i++)
            {
                CameraInStudio camera       = cameraList[i];
                float          currentDepth = camera.CameraOperator.CameraDepth;

                int usableExclusiveMaxDepth = studio.ExclusiveMaxDepth - (cameraList.Count - i - 1) * studio.Setting.DepthInterval;
                if (currentDepth < (float)usableMinDepth ||
                    currentDepth >= (float)usableExclusiveMaxDepth)
                {
                    camera.CameraOperator.SetDepth((float)usableMinDepth);
                    currentDepth = usableMinDepth;
                }

                usableMinDepth = Mathf.CeilToInt(currentDepth) + studio.Setting.DepthInterval;
            }
        }
        int GetIndexToInsert(List <CameraInStudio> cameraList, CameraInStudio insertingCamera)
        {
            for (int i = cameraList.Count - 1; i >= 0; i--)
            {
                if (cameraList[i].DepthInStudio > insertingCamera.DepthInStudio)
                {
                    continue;
                }

                return(i + 1);
            }
            return(0);
        }
        public void AddCamera(CameraInStudio camera)
        {
            List <CameraInStudio> cameraList = this.cameraListDictionary.GetValue(camera.StudioId, false);

            if (cameraList == null)
            {
                cameraList = new List <CameraInStudio>();
                this.cameraListDictionary.Add(camera.StudioId, cameraList);
            }

            // DestroyされたCameraを消去する
            cameraList.RemoveAll(cs => cs.CameraOperator == null);

            int index = GetIndexToInsert(cameraList, camera);

            cameraList.Insert(index, camera);
        }
 void ICameraBank.AddCamera(CameraInStudio camera)
 {
     cameraRepository.AddCamera(camera);
     cameraDepthModifier.SetDepth(camera.StudioId);
 }