コード例 #1
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.
        }
コード例 #2
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);
        }
    }