private ModuleCamera AvailableCamera(int priority = CameraInUse) { ModuleCamera bestCamera = null; int minPriority = CameraPinned + 1; int minIndex = int.MaxValue; foreach (ModuleCamera cam in cameras) { // First available unused camera if (cam.priority == CameraNotInUse) { return(cam); // And we're done! } else if ((cam.priority < minPriority) || ((cam.priority == minPriority) && (cam.index < minIndex))) { bestCamera = cam; minPriority = cam.priority; minIndex = cam.index; } } // If no unused camera... // return the "best" camera (topmost camera of lowest priority) // but not if it's already prioritised and we're not demanding priority return((minPriority <= priority) ? bestCamera : null); }
public void DisableCameraWall() { if (!CameraWallEnabled) { DebugHelper.Log("Camera Wall already disabled"); return; } DebugHelper.Log("Disabling Camera Wall"); CameraWallEnabled = false; GameRoom.ShowCamera(); while (_cameras.Count > 6) { ModuleCamera camera = _cameras[6]; _cameras.RemoveAt(6); camera.Deactivate(); Destroy(camera.CameraInstance); Destroy(camera.gameObject); } for (int i = 0; i < 6; i++) { TryViewModule(PreferredToView); } DebugHelper.Log("Camera Wall disabled"); }
private int BorrowCameraForZoom(TwitchModule component) { int[] camerasIndexes = { 11, 12, 7, 16, 15, 8, 10, 13, 9, 14, 17, 6, 5, 4, 3, 2, 1, 0 }; for (int i = _cameras.Count > 6 ? 0 : 12; i < 18; i++) { int index = camerasIndexes[i]; ModuleCamera camera = _cameras[index]; if ((camera.PreviousModule != null) && (ReferenceEquals(camera.PreviousModule, component))) { //Already borrowed this camera, continue to use it. return(index); } if ((camera.Module == null) || camera.Module.CameraPriority == CameraPriority.Pinned) { continue; } camera.PreviousModule = camera.Module; camera.ViewModule(component); return(index); } //Could not even borrow an unpinned camera, to allow the requested zoom to happen. return(-1); }
public void EnableCameraWall() { if (CameraWallEnabled) { DebugHelper.Log("Camera wall already enabled"); return; } DebugHelper.Log("Enabling camera wall"); CameraWallEnabled = true; GameRoom.HideCamera(); for (int i = 6; i < _cameraLocations.Length; i++) { _moduleCameras.Add(ModuleCamera.CreateModuleCamera(this, i)); } while (HasEmptySlot) { var preferredToView = PreferredToView; if (!TryViewModule(preferredToView)) { break; } } DebugHelper.Log("Camera wall enabled"); }
public void AttachToModule(MonoBehaviour component, MonoBehaviour handle, int priority = CameraInUse) { int existingCamera = CurrentModulesContains(component); if (existingCamera > -1) { cameras[existingCamera].index = ++index; cameras[existingCamera].module.index = cameras[existingCamera].index; return; } ModuleCamera camera = AvailableCamera(priority); try { // If the camera is in use, return its module to the appropriate stack if ((camera.priority > CameraNotInUse) && (camera.module.component != null)) { camera.module.index = camera.index; AddModuleToStack(camera.module.component, camera.module.handle, camera.priority); camera.priority = CameraNotInUse; } // Add the new module to the stack AddModuleToStack(component, handle, priority); // Refresh the camera camera.Refresh(); } catch (Exception e) { Debug.Log(LogPrefix + "Error: " + e.Message); } }
private void InstantiateCamera(int cameraIx) { Camera instantiatedCamera = Instantiate(CameraPrefab); instantiatedCamera.rect = _cameraLocations[cameraIx]; instantiatedCamera.aspect = 1f; instantiatedCamera.depth = 99; ModuleCamera cam = ModuleCamera.CreateModuleCamera(instantiatedCamera, this, CameraLayers[cameraIx]); _cameras.Add(cam); }
public IEnumerator UnzoomCamera(TwitchModule component, float delay) { int existingCamera = CurrentModulesContains(component); if (existingCamera == -1) { existingCamera = BorrowCameraForZoom(component); } if (existingCamera > -1) { ModuleCamera cam = _cameras[existingCamera]; return(cam.UnzoomCamera(delay)); } return(null); }
private void Start() { Instance = this; // Create the first 6 module cameras (more will be created if the camera wall gets enabled) for (int i = 0; i < 6; i++) { _moduleCameras.Add(ModuleCamera.CreateModuleCamera(this, i)); } // Change timer/strike colors according to current game mode (normal mode, time mode, Zen mode, etc.) TimerComponent timer = _currentBomb.Bomb.GetTimer(); Color modeColor = ModeColors[OtherModes.currentMode]; TimerPrefab.color = modeColor; timer.text.color = modeColor; timer.StrikeIndicator.RedColour = modeColor; }
public void AttachToModule(BombComponent component, TwitchComponentHandle handle, int priority = CameraInUse) { if (handle != null && (handle.claimed) && (priority == CameraClaimed)) { priority = CameraClaimed; } int existingCamera = CurrentModulesContains(component); if (existingCamera > -1) { ModuleCamera cam = cameras[existingCamera]; if (cam.priority < priority) { cam.priority = priority; cam.module.priority = priority; } cam.index = ++index; cam.module.index = cam.index; return; } ModuleCamera camera = AvailableCamera(priority); try { // If the camera is in use, return its module to the appropriate stack if ((camera.priority > CameraNotInUse) && (camera.module.component != null)) { camera.module.index = camera.index; AddModuleToStack(camera.module.component, camera.module.handle, camera.priority); camera.priority = CameraNotInUse; } // Add the new module to the stack AddModuleToStack(component, handle, priority); // Refresh the camera camera.Refresh(); } catch (Exception e) { Debug.Log(LogPrefix + "Error: " + e.Message); } }
// Swap the properties of a camera to another one. // Used so that a zoom can continue if the camera wall gets disabled interupting the sequence. public void SwapTo(ModuleCamera otherCamera) { // Copy over the properties that get changed while doing a zoom var otherInstance = otherCamera.CameraInstance; CameraInstance.rect = otherInstance.rect; CameraInstance.fieldOfView = otherInstance.fieldOfView; CameraInstance.transform.localPosition = otherInstance.transform.localPosition; // Copy everything else over otherCamera.PreviousModule = Module; otherCamera.CameraInstance = CameraInstance; otherCamera.ViewModule(otherCamera.Module); CameraInstance = otherInstance; otherCamera.CameraLayer = CameraLayer; otherCamera.OriginalCameraRect = OriginalCameraRect; }