// 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); }