protected void Awake()
    {
        pcc_animator  = GetComponent <Animator>();
        pcc_rigidbody = GetComponent <Rigidbody>();
        pcc_collider  = GetComponent <Collider>();

        currPlayerStatus = new Dictionary <StatusListElement, bool>();
        foreach (StatusListElement key in Enum.GetValues(typeof(StatusListElement)))
        {
            currPlayerStatus.Add(key, false);
        }


        currPlayerObjectStatus = new Dictionary <Dictionaries.ItemName, bool>();
        foreach (Dictionaries.ItemName key in Enum.GetValues(typeof(Dictionaries.ItemName)))
        {
            currPlayerObjectStatus.Add(key, false);
        }
        UpdateObjectStatus();

        PlayerUnitytoSpineController pUSCDetecte = StateMachineBehaviourUtilities.GetBehaviourByName <PlayerUnitytoSpineController>(this.pcc_animator, "Detecte");

        pUSCDetecte.onStateExitCallbacks.Add(() =>
        {
            this.ChangeStatus(StatusListElement.BLOCKED, false);
            this.ChangeStatus(StatusListElement.DETECTED, false);
        });
    }
    private void UseVentialtion(ObjectInteractionController oicCaller, Collider other)
    {
        spcc = other.GetComponent <SplinePlayerCharacterController>();
        if (!pcc.currPlayerStatus[PlayerCharacterController.StatusListElement.BLOCKED])
        {
            pcc.ChangeStatus(PlayerCharacterController.StatusListElement.BLOCKED, true);
            PlayerUnitytoSpineController pUSC = StateMachineBehaviourUtilities.GetBehaviourByName <PlayerUnitytoSpineController>(pcc.pcc_animator, "Screwdriver");

            pUSC.onStateExitCallbacks.Add(() =>
            {
                StartToMoveInVentialtion(oicCaller, other);
                pUSC.onStateExitCallbacks.Clear();
            });
            pcc.pcc_animator.SetTrigger("isUsingScrew");
            SoundManager.GetAudio(audioScrewdriver).Play();
        }
    }
    private void TpOutPlayerDelegate(Vector3 nextPos, Quaternion nextRot)
    {
        pcc.pcc_animator.SetBool("isTPOut", false);
        PlayerUnitytoSpineController pUSC = StateMachineBehaviourUtilities.GetBehaviourByName <PlayerUnitytoSpineController>(pcc.pcc_animator, "TP In");


        pUSC.onStateExitCallbacks.Add(() =>
        {
            TpInPlayerDelegate();
            pUSC.onStateExitCallbacks.Clear();
        });
        pcc.transform.SetPositionAndRotation(nextPos, nextRot);
        pcc.ninjaModel.SetActive(true);
        pcc.pcc_animator.SetBool("isTPIn", true);
        GameObject.Instantiate(Resources.Load("Prefabs/TPCLoud"), pcc.transform);
        SoundManager.GetAudio(audioTPID).Play();
    }
    protected void TpPlayerOut(Vector3 nextPos, Quaternion nextRot, PlayerCharacterController pcc)
    {
        //Animator anim = pcc.pcc_animator;
        //PlayerUnitytoSpineController pUSC = pcc.pcc_animator.GetBehaviour<PlayerUnitytoSpineController>();

        PlayerUnitytoSpineController pUSC = StateMachineBehaviourUtilities.GetBehaviourByName <PlayerUnitytoSpineController>(pcc.pcc_animator, "TP Out");

        pUSC.onStateExitCallbacks.Add(() =>
        {
            TpOutPlayerDelegate(nextPos, nextRot);
            pUSC.onStateExitCallbacks.Clear();
        });
        pcc.pcc_animator.SetBool("isTPOut", true);
        SoundManager.GetAudio(audioTPID).Play();
        GameObject.Instantiate(Resources.Load("Prefabs/TPCloud"), pcc.transform);
        pcc.ninjaModel.SetActive(false);
    }