public void Initialize_Modules(Capture_module capture, Compare_module compare, Animation_module animate,Interaction_module interact, Recorded_animation_module animate_trial)
    {
        _scenario_state = Capture_scene_state.INITIALISATION;

        _capture = capture;
        _compare = compare;
        _animate = animate;
        _interact = interact;

        _animate_trial = animate_trial;
        //Initialise 3D environment

        //Initialise 3D animation

        //Initialise capture module
        _capture.Initialise_capture(_device);
        //Initialise comparison module
        _compare.Initialise_comparison();
        _compare.DrawPlots = false;
        //Initialise database module

        //Initialise GUI module
        //TEMP

        Animation_data temp = new Animation_data();
        temp.Initialize_from_file("test_recorded_data/HB_Underarm_reference");
        _animate_trial.SetRecordedAnimation(temp);

        Animation_data temp_2 = new Animation_data();
        temp_2.Initialize_from_file("test_recorded_data/HB_Underarm_reference_copy");
        _animate_trial.SetReferenceAnimation(temp_2);

        Wait_user();
    }
    IEnumerator Run_3D_animation(float waitTime)
    {
        _user_interface.SetTrialGuiData(_skills_list[_current_skill]._description_trial, _skills_list[_current_skill]._display_name, _current_skill+1, _skills_list.Count);
        _user_interface.SetSkillName(_skills_list[_current_skill]._display_name);

        _user_interface.SetTrialInstructionVisibility(true);
        Debug.Log("Duration: " + _skill_duration);
        yield return new WaitForSeconds(_time_between_scene);
        _user_interface.SetTrialInstructionVisibility(false);

        _scenario_state = Capture_scene_state.VIEW_HERO_ANIM;
        _skill_duration = _animate.PlayAnimation(_current_skill, _skills_list[_current_skill]._target_sport);
        _animate.SetAnimSpeed(1.0f);
        _animate.SetCameraView(_skills_list[_current_skill]._camera_view);

        _user_interface.SetAnimationVisibility(true);
        Debug.Log("Duration: " + _skills_list[_current_skill]._anim_duration);
        yield return new WaitForSeconds(_skills_list[_current_skill]._anim_duration * 1.5f);

        _animate.SetAnimSpeed(0.5f);
        yield return new WaitForSeconds(_skills_list[_current_skill]._anim_duration * 2);
        /*
        _animate.SetAnimSpeed(0.25f);
        yield return new WaitForSeconds(_skills_list[_current_skill]._anim_duration * 2);*/
        _user_interface.SetAnimationVisibility(false);
        _animate.Stop_animation();
        NewTrial();
    }
    public void NewTrial()
    {
        _animate_trial.AvatarVisibilityState(false);
        _scenario_state = Capture_scene_state.PREPARE_NEW_TRIAL;

        //Clean recorded data for the capturing module
        _capture.Prepare_new_capture();
        _capture.Activate_visualization(true);
        _animate.Look_at_user_avatar();
        _avatar_controller.New_record();
        //Initialise comparison module with the corresponding reference
        //TODO: load the corresponding file
        //var default_act = Compare.Utilities.Properties.Activity.GF_PK;
        _compare.Initialise_comparison(_skills_list[_current_skill]._compare_activity);

        /*
        Debug.Log("Instruction screen capture");
        _user_interface.SetTrialVisibility(true);
        yield return new WaitForSeconds(waitTime);
        _user_interface.SetTrialVisibility(false);
        Debug.Log("Instruction screen capture [OK]");
        */
        _current_trials++;
        StartCoroutine(Start_recording(_skills_list[_current_skill]._recording_duration));
        Debug.Log ("New trial ");
    }
    public void Wait_user()
    {
        for (int i = 0; i < _skills_list.Count; i++)
        {
            _skills_list[i]._score = 0.0f;

        }
            StopAllCoroutines();
            _animate.Stop_animation();
            _scenario_state = Capture_scene_state.WAITING_USER;
            _capture.Activate_visualization(false);
            _user_interface.HideAll();
            _user_interface.SetWaitVisibility(true);

            //_animate.Look_at_center();
    }
    /*public void SelectClub(string club_name){
        Debug.Log ("The club selected: " + GlobalVariables.selected_club_id);
        Debug.Log ("Club selected: "+club_name);
        _user_interface.SetMainMenuVisibility(false);
        _user_interface.SetPlayersPanelVisibility(true);
        _coach_scenario_state = Coach_scenario_state.PLAYER_MENU;
    }

    public void SelectPlayer(string player_name){
        Debug.Log ("Player selected: "+player_name);
        _user_interface.SetPlayersPanelVisibility(false);
        _user_interface.SetDisciplinePanelVisibility(true);
        _user_interface.SetPlayerInfoPanelVisibility(true);
        _coach_scenario_state = Coach_scenario_state.DISCIPLINE_MENU;
    }
    public void SelectDiscipline(string discipline_name){
        Debug.Log ("Discipline selected: "+discipline_name);
        _user_interface.SetDisciplinePanelVisibility(false);
        _user_interface.SetTrialsVisibility(true);
        _coach_scenario_state = Coach_scenario_state.TRIALS_MENU;
    }*/
    public void NewTrial()
    {
        _animate_trial.AvatarVisibilityState(false);
        _coach_scenario_state = Capture_scene_state.PREPARE_NEW_TRIAL;

        _user_interface.SetRecordVisibility(true);

        //Clean recorded data for the capturing module
        _capture.Prepare_new_capture();

        //Initialise comparison module with the corresponding reference
        //TODO: load the corresponding file
        var default_act = Compare.Utilities.Properties.Activity.DEFAULT;
        _compare.Initialise_comparison(default_act);

        Debug.Log ("New trial ");
    }