コード例 #1
0
        IEnumerator pursueCharacter(CharacterBehavior chara, List <GameObject> opponentObjectives, int movementsThisTurn)
        {
            yield return(new WaitForSeconds(1.5f));

            for (int i = 0; i < movementsThisTurn; i++)
            {
                chara.GetComponent <CharacterBehaviorIHM>().characterSelection();
                yield return(new WaitForSeconds(0.75f));

                if (gManager.adversaireAdjacent)
                {
                    yield return(new WaitForSeconds(1.5f));

                    gManager.combatManager.combat(opponentObjectives[i]);
                    yield return(new WaitForSeconds(1.5f));

                    break;
                }
                else if (opponentObjectives.Count == 1)
                {
                    Debug.Assert(false, "ScriptedPlayerBehavior, pursueCharacter: Créer le chemin vers la cible");
                    gManager.actionPoints = movementsThisTurn + 1;
                    //opponentObjectives.Insert(0, null);
                    StartCoroutine(pursueCharacter(chara, opponentObjectives, movementsThisTurn + 1));
                    break;
                }
                // Déplacement
                if (opponentObjectives[i].GetComponent <CaseBehavior>() != null)
                {
                    opponentObjectives[i].GetComponent <CaseBehavior>().cibleAssociated.GetComponent <CibleDeplacementIHM>().moveSelectedTokenToTarget();
                    yield return(new WaitForSeconds(1.5f));
                }
            }
            yield return(new WaitForSeconds(3));
        }
コード例 #2
0
        IEnumerator playScriptedMoves(CharacterBehavior chara, List <GameObject> opponentObjectives)
        {
            yield return(new WaitForSeconds(1.5f));

            int steps = opponentObjectives.Count;

            for (int i = 0; i < steps; i++)
            {
                chara.GetComponent <CharacterBehaviorIHM>().characterSelection();
                yield return(new WaitForSeconds(0.75f));

                // Déplacement
                if (opponentObjectives[i].GetComponent <CaseBehavior>() != null)
                {
                    opponentObjectives[i].GetComponent <CaseBehavior>().cibleAssociated.GetComponent <CibleDeplacementIHM>().moveSelectedTokenToTarget();
                    yield return(new WaitForSeconds(0.75f));
                }
                // Combat
                if (opponentObjectives[i].GetComponent <CharacterBehavior>() != null)
                {
                    yield return(new WaitForSeconds(1.5f));

                    gManager.combatManager.combat(opponentObjectives[i]);
                }
                yield return(new WaitForSeconds(1.5f));
            }
            yield return(new WaitForSeconds(3));
        }
コード例 #3
0
 // TODO: allow to reinitialise gameManager in order to reload during an ongoing game (only needed for debug)
 #region reset
 private void clearTokenData()
 {
     GameObject[] tokens = GameObject.FindGameObjectsWithTag("Token");
     foreach (GameObject token in tokens)
     {
         Token t = token.GetComponent <Token>();
         t.caseActuelle = null;
         t.tokenPlace   = false;
         t.horsJeu      = false;
         if (t.cibleToken != null)
         {
             t.cibleToken.tokenAssociated = null;
             t.cibleToken.locked          = false;
         }
         t.cibleToken = null;
         t.ciblesTokens.Clear();
         t.selected           = false;
         t.deplacementRestant = 0;
         if (token.GetComponent <CharacterBehavior>() != null)
         {
             CharacterBehavior chara = token.GetComponent <CharacterBehavior>();
             chara.deplacementRestant = chara.MOVE_VALUE;
             chara.tokenTranporte     = null;
             chara.actionPoints       = 0;
             chara.wounded            = false;
             chara.freshlyHealed      = false;
             chara.freshlyWounded     = false;
             chara.killed             = false;
             chara.GetComponent <TokenIHM>().getTokenIcon().GetComponent <SpriteRenderer>().color = Color.white;
         }
         token.GetComponent <TokenIHM>().displayToken();
         token.GetComponent <Collider>().enabled = true;
     }
 }
コード例 #4
0
    public CharacterBehavior addCharacter(Vector3 pos, int id)
    {
        Data.Instance.events.OnAddNewPlayer(id);
        CharacterBehavior newCharacter = null;

        foreach (CharacterBehavior cb in deadCharacters)
        {
            if (cb.player.id == id)
            {
                newCharacter = cb;
            }
        }
        if (newCharacter == null)
        {
            newCharacter = Instantiate(character, Vector3.zero, Quaternion.identity) as CharacterBehavior;
        }
        else
        {
            deadCharacters.Remove(newCharacter);
        }

        Player player = newCharacter.GetComponent <Player> ();

        player.Init(id);
        player.SetInvensible(3);
        player.id = id;
        newCharacter.Revive();
        characters.Add(newCharacter);
        totalCharacters = characters.Count;

        newCharacter.transform.position = pos;
        Data.Instance.events.OnCharacterInit(id);

        return(newCharacter);
    }
コード例 #5
0
    void OnAutomataCharacterDie(CharacterBehavior automataCharacter)
    {
        CharacterBehavior parentCharacter = null;
        CharacterBehavior childCharacter  = null;

        foreach (CharacterBehavior cb1 in characters)
        {
            foreach (CharacterBehavior cb2 in cb1.controls.childs)
            {
                if (cb2 == automataCharacter)
                {
                    parentCharacter = cb1;
                    childCharacter  = cb2;
                    parentCharacter.controls.StopAllCoroutines();
                    childCharacter.GetComponent <CharacterAutomata> ().Reset();
                }
            }
        }
        if (childCharacter != null)
        {
            parentCharacter.controls.RemoveChild(childCharacter);
        }

        deadCharacters.Remove(automataCharacter);
    }
コード例 #6
0
        private void ExecuteActionDoor(ActionDoor action)
        {
            if (gManager.onlineGameInterface.WaitingForExpectedState())
            {
                gManager.onlineGameInterface.ForceEndReplayAction(); return;
            }

            CaseBehavior actionCharacterCell = gManager.getCase(action.y1, action.x1).GetComponent <CaseBehavior>();

            CharacterBehavior c = actionCharacterCell.getNonWoundedCharacter();

            Debug.Assert(c != null);
            CharacterBehaviorIHM character = c.GetComponent <CharacterBehaviorIHM>();

            character.characterSelection();
            if (action.action == ActionType.DESTROYDOOR)
            {
                Debug.Assert(character is CB_GuerrierIHM);
                character.GetComponent <CB_GuerrierIHM>().briserHerse();
            }
            else
            {
                Debug.Assert(character is CB_VoleuseIHM);
                character.GetComponent <CB_VoleuseIHM>().changerEtatHerse();
            }
            gManager.onlineGameInterface.ForceEndReplayAction();
        }
コード例 #7
0
 void Start()
 {
     _character = gameObject.GetComponentInParent <CharacterBehavior>();
     if (_character != null)
     {
         _jetpack = _character.GetComponent <CharacterJetpack>();
     }
 }
コード例 #8
0
ファイル: Automata.cs プロジェクト: pontura/MadRollers
 public void Init(CharacterBehavior cb)
 {
     this.cb = cb;
     Invoke("MoveLoop", moveRandomTry * 2);
     Invoke("ShootLoop", shootRandomTry * 2);
     Invoke("JumpLoop", jumpRandomTry * 2);
     cb.GetComponent <CharacterControls>().isAutomata = true;
 }
コード例 #9
0
 void Start()
 {
     _character = gameObject.GetComponentInParent <CharacterBehavior>();
     if (gameObject.GetComponentInParent <Tank>() != null)
     {
         _tank = _character.GetComponent <Tank>();
     }
 }
コード例 #10
0
 void fireballConsequences()
 {
     Debug.Assert(gManager.actionCharacter == associatedItem.tokenHolder.gameObject, "Action Character is not set");
     fireballTarget.GetComponent <CharacterBehaviorIHM>().killCharacterIHM();
     fireballFired = false;
     ((Item_BatonDeBouleDeFeu)associatedItem).endfireballaction();
     destroyItem();
     gManager.onlineGameInterface.EndReplayAction();
 }
コード例 #11
0
    public CharacterBehavior AddChildPlayer(CharacterBehavior parentPlayer)
    {
        int id = parentPlayer.controls.childs.Count + 4;
        CharacterBehavior newCharacter = addCharacter(parentPlayer.transform.position, id);

        newCharacter.controls.isAutomata = true;
        parentPlayer.controls.AddNewChild(newCharacter);
        newCharacter.GetComponent <CharacterAutomata> ().Init();
        return(newCharacter);
    }
コード例 #12
0
    void AddAutomata(int avatarID)
    {
        CharacterBehavior cb = Game.Instance.level.charactersManager.AddAutomata(avatarID);

        if (cb == null)
        {
            return;
        }
        cb.gameObject.AddComponent <Automata>();
        cb.GetComponent <Automata>().Init(cb);
    }
コード例 #13
0
 void Update()
 {
     if (characterOnRotationMechanism())
     {
         if (rotationActionReminder == null)
         {
             CharacterBehavior character = associatedCase.getMainCharacter();
             if (character.GetComponent <CharacterBehaviorIHM>().isAtStandardScale())
             {
                 GameObject arrow = (GameObject)Instantiate(rotationArrowPrefab, character.transform.position, rotationArrowPrefab.transform.rotation);
                 if (clockwiseRotation)
                 {
                     arrow.GetComponent <SpriteRenderer>().flipX = true;
                 }
                 rotationActionReminder = arrow.transform;
                 rotationActionReminder.SetParent(character.transform);
                 stdScale = arrow.transform.localScale;
                 arrow.transform.localScale = neutralScale;
             }
         }
         else
         {
             if (showRotationAnimationFeedback())
             {
                 rotationActionReminder.localScale = stdScale;
                 if (clockwiseRotation)
                 {
                     angleArrow -= 100.0f * Time.deltaTime;
                 }
                 else
                 {
                     angleArrow += 100.0f * Time.deltaTime;
                 }
                 angleArrow = angleArrow % 360.0f;
                 if (angleArrow < 0)
                 {
                     angleArrow += 360;
                 }
                 rotationActionReminder.rotation = Quaternion.Euler(0, 0, angleArrow);
             }
             else
             {
                 rotationActionReminder.localScale = neutralScale;
             }
         }
     }
     else
     {
         if (rotationActionReminder != null)
         {
             Destroy(rotationActionReminder.gameObject);
         }
     }
 }
コード例 #14
0
ファイル: Automata.cs プロジェクト: pontura/MadRollers
 void MoveLoop()
 {
     if (Game.Instance.state != Game.states.GAME_OVER && CanDoIt())
     {
         StopAllCoroutines();
         int rand = Random.Range(0, 100);
         if (rand < 70)
         {
             if (cb.transform.localPosition.x < 0)
             {
                 StartCoroutine(Move(1));
             }
             else
             {
                 StartCoroutine(Move(-1));
             }
         }
         else
         {
             cb.GetComponent <CharacterControls>().MoveInX(0);
         }
     }
     Invoke("MoveLoop", moveRandomTry);
 }
コード例 #15
0
        private void ExecuteActionMove(ActionMove action)
        {
            if (gManager.onlineGameInterface.WaitingForExpectedState())
            {
                gManager.onlineGameInterface.ForceEndReplayAction(); return;
            }

            CharacterBehavior    chara    = GetTokenByNameAndPlayerId(action.tokenName, action.playerId).GetComponent <CharacterBehavior>();
            CharacterBehaviorIHM charaIHM = chara.GetComponent <CharacterBehaviorIHM>();

            if (!chara.selected)
            {
                charaIHM.characterSelection();
            }

            // synchronize carried token
            if (gManager.onlineGameInterface.IsCarrier(action.tokenId))
            {
                int   carriedId    = gManager.onlineGameInterface.GetCarriedToken(action.tokenId);
                Token carriedToken = GetTokenById(carriedId);
                if (chara.tokenTranporte != null && chara.tokenTranporte.GetComponent <Token>() == carriedToken)
                {
                    charaIHM.deposerToken();
                }

                if (chara.tokenTranporte == null)
                {
                    charaIHM.ramasserToken(carriedToken.gameObject);
                }
            }
            else
            {
                if (chara.tokenTranporte != null)
                {
                    charaIHM.deposerToken();
                }
            }

            CaseBehavior target = gManager.getCase(action.y, action.x).GetComponent <CaseBehavior>();

            target.cibleAssociated.GetComponent <CibleDeplacementIHM>().moveSelectedTokenToTarget();

            // jump will automatically call end movement
            // for simple walk, end movement is called when leaving movingCharacterContinue state.
        }
コード例 #16
0
ファイル: CombatManager.cs プロジェクト: JpEncausse/DTApp
    private Transform instantiateSmallFighterSprite(Transform side, CharacterBehavior fighter, Vector3 position, bool rightSide)
    {
        GameObject instanceFighter = (GameObject)Instantiate(gManager.fighterPrefab, position, Quaternion.identity);
        Transform  fighterDisplay  = instanceFighter.transform;

        fighterDisplay.parent = side;
        if (rightSide)
        {
            fighterDisplay.localScale = new Vector3(1, 1, 1);
            Vector3 mirror = new Vector3(-1, 1, 1);
            fighterDisplay.Find("FighterToken").GetComponent <Image>().sprite = fighter.GetComponent <SpriteRenderer>().sprite;
            //fighterDisplay.Find("FighterToken/FighterName").localScale = mirror;
            //fighterDisplay.Find("CombatItem1Name").localScale = mirror;
            fighterDisplay.Find("CombatValue").localScale = mirror;
            fighterDisplay.Find("CombatBonus").localScale = mirror;
        }
        return(fighterDisplay);
    }
コード例 #17
0
        private void ExecuteActionCombatEnd(ActionCombatEnd action)
        {
            if (gManager.onlineGameInterface.WaitingForExpectedState())
            {
                gManager.onlineGameInterface.ForceEndReplayAction(); return;
            }

            if (gManager.onlineGameInterface.GetCurrentOnlineState() == "movingCharacter") // it must be a kill by fireballwand
            {
                if (!fireballTargetsDealtWith)                                             // direct kill notification -> execute the fireball
                {
                    CharacterBehavior wizard = GetTokenByNameAndPlayerId("Wizard", action.winnerId).GetComponent <CharacterBehavior>();

                    Debug.Assert(wizard.tokenTranporte != null);
                    Item_BatonDeBouleDeFeu_IHM fireballwand = wizard.tokenTranporte.GetComponent <Item_BatonDeBouleDeFeu_IHM>();
                    Debug.Assert(fireballwand != null);

                    Debug.Assert(action.killedIds.Count == 1 && action.woundedIds.Count == 0);
                    CharacterBehavior target = GetTokenById(action.killedIds[0]).GetComponent <CharacterBehavior>();

                    wizard.GetComponent <CharacterBehaviorIHM>().characterSelection();
                    fireballwand.readyFireballGUI();
                    fireballwand.fireball(target);
                    fireballTargetsDealtWith = true;
                }
                else // secondary kill notification
                {
                    Multi.Logger.Instance.Log("LOG", "Action Skipped: some wounded token dropped has died");
                    gManager.onlineGameInterface.ForceEndReplayAction();
                }
            }
            else // combat result
            {
                Multi.Logger.Instance.Log("LOG", "Action Skipped: combat result");
                gManager.onlineGameInterface.ForceEndReplayAction();
            }
        }
コード例 #18
0
 void Start()
 {
     characterBehavior = gameObject.transform.parent.GetComponent <CharacterBehavior>();
     rigidbody         = characterBehavior.GetComponent <Rigidbody>();
 }
コード例 #19
0
    private void loadTokens()
    {
        // set characters state
        foreach (var characterData in charactersData)
        {
            Token             token = GameManager.gManager.GetTokenByNameAndOwnerIndex(characterData.name, characterData.playerIndex);
            CharacterBehavior chara = token.GetComponent <CharacterBehavior>();
            Debug.Assert(chara != null);

            // Remplacement des valeurs
            chara.horsJeu        = characterData.tokenHorsJeu;
            chara.tokenPlace     = characterData.tokenPlace;
            chara.wounded        = characterData.wounded;
            chara.freshlyWounded = characterData.freshlyWounded;
            chara.freshlyHealed  = characterData.freshlyHealed;
            chara.killed         = characterData.killed;
            chara.actionPoints   = characterData.actionPoints;

            SetPreviousState(chara, characterData.previousRow, characterData.previousColumn, characterData.previousAssociatedCharacterName, characterData.previousAssociatedCharacterOwnerIndex);

            Debug.Assert(chara.transform.parent == GameObject.Find("Personnages").transform, "A character should be child of characterContainer by default");

            SetTokenPosition(chara, characterData.row, characterData.column, characterData.associatedCharacterName, characterData.associatedCharacterOwnerIndex, characterData.indexRoomAssociated);

            if (!chara.isRemovedFromGame() && chara.freshlyHealed)
            {
                chara.GetComponent <TokenIHM>().getTokenIcon().GetComponent <SpriteRenderer>().color = Color.green;
            }
        }

        // set items state
        foreach (var itemData in itemsData)
        {
            Token token = GameManager.gManager.GetTokenByNameAndOwnerIndex(itemData.name, itemData.playerIndex);
            Item  item  = token.GetComponent <Item>();
            Debug.Assert(item != null);

            // Remplacement des valeurs
            item.tokenPlace = itemData.tokenPlace;
            item.horsJeu    = itemData.tokenHorsJeu;

            SetPreviousState(item, itemData.previousRow, itemData.previousColumn, itemData.previousAssociatedCharacterName, itemData.previousAssociatedCharacterOwnerIndex);

            Debug.Assert(item.transform.parent == GameObject.Find("Items").transform, "An item should be child of itemContainer by default");

            SetTokenPosition(item, itemData.row, itemData.column, itemData.associatedCharacterName, itemData.associatedCharacterOwnerIndex, itemData.indexRoomAssociated);
        }

        // second pass to place token carried (cannot be done before the holders are placed).
        foreach (var characterData in charactersData)
        {
            if (characterData.tokenHeldName != null)
            {
                SetCarriedTokenPosition(characterData);
            }
        }

        // third pass to update previously held tokens' previous position
        foreach (GameObject g in GameObject.FindGameObjectsWithTag("Token"))
        {
            UpdatePreviousPosition(g.GetComponent <Token>());
        }

        removeTargetOfTokensToBePlacedOnDiscoveredRoom();
    }
コード例 #20
0
    void Update()
    {
        if (!_player.canMove)
        {
            return;
        }

        _player.SetHorizontalMove(CrossPlatformInputManager.GetAxis("Horizontal"));
        _player.SetVerticalMove(CrossPlatformInputManager.GetAxis("Vertical"));

        if ((CrossPlatformInputManager.GetButtonDown("Run") || CrossPlatformInputManager.GetButton("Run")))
        {
            _player.RunStart();
        }

        if (CrossPlatformInputManager.GetButtonUp("Run"))
        {
            _player.RunStop();
        }

        if (CrossPlatformInputManager.GetButtonDown("Jump"))
        {
            _player.JumpStart();
        }

        if (CrossPlatformInputManager.GetButtonUp("Jump"))
        {
            _player.JumpStop();
        }

        if (_player.GetComponent <CharacterMelee>() != null)
        {
            if (CrossPlatformInputManager.GetButtonDown("Melee"))
            {
                _player.GetComponent <CharacterMelee>().Melee();
            }
        }


        if (_player.GetComponent <CharacterShoot>() != null)
        {
            _player.GetComponent <CharacterShoot>().SetHorizontalMove(CrossPlatformInputManager.GetAxis("Horizontal"));
            _player.GetComponent <CharacterShoot>().SetVerticalMove(CrossPlatformInputManager.GetAxis("Vertical"));

            if (CrossPlatformInputManager.GetButtonDown("Fire"))
            {
                _player.GetComponent <CharacterShoot>().ShootOnce();
            }
            if (CrossPlatformInputManager.GetButton("Fire"))
            {
                _player.GetComponent <CharacterShoot>().ShootStart();
            }
            if (CrossPlatformInputManager.GetButtonUp("Fire"))
            {
                _player.GetComponent <CharacterShoot>().CmdShootStop();
            }
        }

        if (_player.GetComponent <CharacterJetpack>() != null)
        {
            if ((CrossPlatformInputManager.GetButtonDown("Jetpack") || CrossPlatformInputManager.GetButton("Jetpack")))
            {
                _player.GetComponent <CharacterJetpack>().CmdJetpackStart();
            }

            if (CrossPlatformInputManager.GetButtonUp("Jetpack"))
            {
                _player.GetComponent <CharacterJetpack>().CmdJetpackStop();
            }
        }
    }
コード例 #21
0
ファイル: CombatManager.cs プロジェクト: JpEncausse/DTApp
    private void displayFighter(CharacterBehavior fighter)
    {
        string    prefix;
        Transform fighterDisplay = GetFighterSpriteTransform(fighter, out prefix);

        fighterDisplay.Find(prefix + "FighterSprite").GetComponent <Image>().sprite       = fighter.GetComponent <CharacterBehaviorIHM>().fullCharacterSprite;
        fighterDisplay.Find(prefix + "FighterSprite").GetComponent <FadeSprite>().fighter = fighter;
        //fighterDisplay.Find(prefix+"FighterName").GetComponent<Image>().sprite = fighter.getTokenNameSprite();
        fighterDisplay.Find(prefix + "CombatValue/Text").GetComponent <Text>().text = GetCombatValue(fighter).ToString();

        int bonus = GetItemBonus(fighter);

        if (bonus > 0)
        {
            Debug.Assert(!fighter.wounded);
            fighterDisplay.Find(prefix + "CombatItemsBackground").gameObject.SetActive(true);
            fighterDisplay.Find(prefix + "CombatItem1Sprite").gameObject.SetActive(true);
            fighterDisplay.Find(prefix + "CombatItem1Sprite").GetComponent <Image>().sprite = fighter.tokenTranporte.GetComponent <ItemIHM>().getTokenIcon().GetComponent <SpriteRenderer>().sprite;
            //fighterDisplay.Find(prefix+"CombatItem1Name").gameObject.SetActive(true);
            //fighterDisplay.Find(prefix+"CombatItem1Name").GetComponent<Image>().sprite = fighter.tokenTranporte.GetComponent<ItemIHM>().getTokenNameSprite();
            fighterDisplay.Find(prefix + "CombatBonus").gameObject.SetActive(true);
            fighterDisplay.Find(prefix + "CombatBonus/Text").GetComponent <Text>().text = "+" + bonus.ToString();
        }
        else
        {
            fighterDisplay.Find(prefix + "CombatItemsBackground").gameObject.SetActive(false);
            fighterDisplay.Find(prefix + "CombatItem1Sprite").gameObject.SetActive(false);
            //fighterDisplay.Find(prefix+"CombatItem1Name").gameObject.SetActive(false);
            fighterDisplay.Find(prefix + "CombatBonus").gameObject.SetActive(false);
        }
    }
コード例 #22
0
ファイル: TokenExchangeUI.cs プロジェクト: JpEncausse/DTApp
    void checkAndExecuteExchange()
    {
        gManager.cameraMovementLocked = false;
        bool       spotFound = false;
        GameObject newPoint  = originalPoint;

        foreach (GameObject spot in gManager.exchangePoints)
        {
            if (isInteractableSpot(spot) && spot != originalPoint && Vector3.Distance(transform.position, spot.transform.position) < SNAP_DISTANCE)
            {
                newPoint  = spot;
                spotFound = true;
                break;
            }
        }
        // Si le token n'est pas dirigé vers un emplacement différent, on le remet à son emplacement de départ
        if (!spotFound)
        {
            Debug.LogWarning("Not found");
            transform.position = originalPoint.transform.position;
        }
        // Sinon, on le déplace vers son nouvel emplacement
        else
        {
            CharacterBehaviorIHM charaIHM = gManager.actionCharacter.GetComponent <CharacterBehaviorIHM>();
            //if (!gManager.tokensInteractedWith.Contains(token)) gManager.tokensInteractedWith.Add(token);

            // Si un autre token se trouve déjà à cet endroit, échanger sa place avec celui-ci
            if (newPoint.GetComponent <ExchangePointUI>().isHoldingToken())
            {
                Debug.Log("Echange");
                TokenExchangeUI otherToken = newPoint.GetComponent <ExchangePointUI>().occupyingToken.GetComponent <TokenExchangeUI>();
                otherToken.originalPoint      = originalPoint;
                otherToken.transform.position = originalPoint.transform.position;
                originalPoint.GetComponent <ExchangePointUI>().occupyingToken = otherToken.gameObject;
                //if (!gManager.tokensInteractedWith.Contains(otherToken.token)) gManager.tokensInteractedWith.Add(otherToken.token);

                // Le token est déplacé vers l'emplacement de token transporté
                if (newPoint.GetComponent <ExchangePointUI>().isCarriedTokenSpot())
                {
                    charaIHM.deposerToken();
                    if (token.GetComponent <Token>().tokenHolder != null)
                    {
                        CharacterBehavior characterHoldingThisToken = token.GetComponent <Token>().tokenHolder;
                        characterHoldingThisToken.GetComponent <CharacterBehaviorIHM>().deposerToken();
                        characterHoldingThisToken.GetComponent <CharacterBehaviorIHM>().ramasserToken(otherToken.token);
                    }
                    else
                    {
                        checkIfHoldingToken(token);
                        otherToken.token.GetComponent <Token>().caseActuelle = currentCase.gameObject;
                    }
                    // Jouer le son de l'objet qui est ramassé
                    GameManager.gManager.playSound(token.GetComponent <TokenIHM>().tokenGetSound);
                    charaIHM.ramasserToken(token);
                }
                // Le token est déplacé vers l'emplacement de sol
                else if (originalPoint.GetComponent <ExchangePointUI>().isCarriedTokenSpot())
                {
                    // Jouer le son de l'objet qui est déposé
                    GameManager.gManager.playSound(token.GetComponent <TokenIHM>().tokenDropSound);
                    charaIHM.deposerToken();
                    if (otherToken.token.GetComponent <Token>().tokenHolder != null)
                    {
                        CharacterBehavior characterHoldingOtherToken = otherToken.token.GetComponent <Token>().tokenHolder;
                        characterHoldingOtherToken.GetComponent <CharacterBehaviorIHM>().deposerToken();
                        characterHoldingOtherToken.GetComponent <CharacterBehaviorIHM>().ramasserToken(token);
                    }
                    else
                    {
                        checkIfHoldingToken(otherToken.token);
                        token.GetComponent <Token>().caseActuelle = currentCase.gameObject;
                    }
                    charaIHM.ramasserToken(otherToken.token);
                }
            }
            // Sinon
            else
            {
                Debug.Log("Transfert");
                // Déposer le token au sol et si un autre personnage est présent, lui associer
                if (originalPoint.GetComponent <ExchangePointUI>().isCarriedTokenSpot())
                {
                    // find if another character can hold the dropped item
                    CharacterBehavior receiverCharacter = currentCase.getOtherMainCharacter(token.GetComponent <Token>().tokenHolder);
                    // Jouer le son de l'objet qui est déposé
                    GameManager.gManager.playSound(token.GetComponent <TokenIHM>().tokenDropSound);
                    charaIHM.deposerToken();
                    //Debug.Log(receiverCharacter);
                    if (receiverCharacter != null)
                    {
                        receiverCharacter.GetComponent <CharacterBehaviorIHM>().ramasserToken(token);
                    }
                    token.GetComponent <Token>().caseActuelle = currentCase.gameObject;
                }
                // Récupérer le token
                else if (newPoint.GetComponent <ExchangePointUI>().isCarriedTokenSpot())
                {
                    // Si le token était déjà tenu par un autre personnage, les dissocier
                    if (token.GetComponent <Token>().tokenHolder != null)
                    {
                        token.GetComponent <Token>().tokenHolder.GetComponent <CharacterBehaviorIHM>().deposerToken();
                    }
                    // Sinon, si le token à ramasser est un personnage qui porte un objet, déposer son objet
                    else
                    {
                        checkIfHoldingToken(token);
                    }
                    // Jouer le son de l'objet qui est ramassé
                    GameManager.gManager.playSound(token.GetComponent <TokenIHM>().tokenGetSound);
                    charaIHM.ramasserToken(token);
                }
                else
                {
                    Debug.LogError("TokenExchangeUI, checkAndExecuteExchange: Token non affilié");
                }
                originalPoint.GetComponent <ExchangePointUI>().occupyingToken = null;
            }
            originalPoint      = newPoint;
            transform.position = newPoint.transform.position;
            newPoint.GetComponent <ExchangePointUI>().occupyingToken = gameObject;

            // Recalculer le déplacement du personnage
            gManager.actionCharacter.GetComponent <CharacterBehaviorIHM>().recomputePossibleActionsIHM(false, false);
        }
    }