public void ApplyServerTechnique(Technique newTechnique)
    {
        technique = newTechnique;

        foreach (var x in new TechniqueServerController[] { PINPinTechnique, PatternPinTechnique, Pattern3DPinTechnique })
        {
            x.gameObject.SetActive(false);
        }
        TechniqueServerController controller;

        switch (technique)
        {
        case Technique.PIN: controller = PINPinTechnique; break;

        case Technique.Pattern: controller = PatternPinTechnique; break;

        case Technique.Pattern3D: controller = Pattern3DPinTechnique; break;

        default: throw new InvalidOperationException();
        }
        SetCurrentPin(currentPinTested);
        SetCurrentPinTrial(currentTrialForPin);
        controller.gameObject.SetActive(true);
        techniqueServerPointer.Controller = controller;

        // For instrumentation
        _controller = controller;
        _controller.OnEnteredNumbersChanged += x => DigitEntered();
    }
 void PrepControllers()
 {
     if (isLocalPlayer)
     {
         clientController = GameObject.Find("TechniqueClientPointer").GetComponent <TechniqueClientPointer>().Controller;
     }
     else
     {
         serverController = GameObject.Find("TechniqueServerPointer").GetComponent <TechniqueServerPointer>().Controller;
         serverController.OnEnteredNumbersChanged += XEnteredNumbersChanged;
         serverController.OnCursorPositionChanged += XCursorPositionChanged;
         serverController.OnCursorDepthChanged    += XCursorDepthChanged;
     }
 }