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. }
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); } }