Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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");
    }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    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");
    }
Exemplo n.º 5
0
    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);
        }
    }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 7
0
    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);
    }
Exemplo n.º 8
0
    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;
    }
Exemplo n.º 9
0
    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);
        }
    }
Exemplo n.º 10
0
        // 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;
        }