public Controller(IStateAssigner stateAssigner, IControllerBehaviour controllerBehaviour)
        {
            stateAssigner_       = stateAssigner;
            controllerBehaviour_ = controllerBehaviour;

            controllerBehaviour_.TransformChanged          += OnTransformChanged;
            controllerBehaviour_.TriggerPressed            += OnTriggerPressed;
            controllerBehaviour_.TriggerReleased           += OnTriggerReleased;
            controllerBehaviour_.ThumbstickPositionChanged += OnThumbStickPositionChanged;

            controllerBehaviour_.Updated += OnUpdated;

            currentState_ = stateAssigner_.Unassign(this);
            currentState_.OnStateSelected();
        }
        private void ChangeStateTo(IControllerState nextState)
        {
            currentState_.OnStateDeselected();
            currentState_.FreqChanged      -= OnFreqChanged;
            currentState_.AmpChanged       -= OnAmpChanged;
            currentState_.WaveformUpdated  -= OnWaveformUpdated;
            currentState_.ResonanceChanged -= OnResonanceChanged;


            currentState_ = nextState;
            controllerBehaviour_.IndicatorBehaviour.FuncText = currentState_.Identifier;
            controllerBehaviour_.WaveVisibility = currentState_.Identifier != "idle";

            currentState_.OnStateSelected();
            currentState_.OnDistanceChanged(distance_);
            currentState_.FreqChanged      += OnFreqChanged;
            currentState_.AmpChanged       += OnAmpChanged;
            currentState_.WaveformUpdated  += OnWaveformUpdated;
            currentState_.ResonanceChanged += OnResonanceChanged;
        }