Example #1
0
    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);
        }
    }
Example #2
0
    void instantiateExchangeableTokens(CaseBehavior overflownCase, GameObject token, GameObject point)
    {
        GameObject temp, tempIcon;
        Quaternion rotation          = gManager.tempTokenExchangePrefab.transform.rotation;
        bool       interactableToken = true;

        temp = (GameObject)Instantiate(gManager.tempTokenExchangePrefab, point.transform.position, rotation);
        temp.SetActive(true);
        temp.GetComponent <Image>().sprite = token.GetComponent <SpriteRenderer>().sprite;
        temp.transform.SetParent(gManager.exchangeUI.transform);
        temp.transform.localScale = new Vector3(1, 1, 1);
        TokenExchangeUI exchangeUI = temp.GetComponent <TokenExchangeUI>();

        exchangeUI.enabled       = true;
        exchangeUI.token         = token;
        exchangeUI.originalPoint = point;
        exchangeUI.currentCase   = overflownCase;

        tempIcon = (GameObject)Instantiate(gManager.tempTokenExchangePrefab, point.transform.position, rotation);
        tempIcon.SetActive(true);
        tempIcon.GetComponent <Button>().enabled          = false;
        tempIcon.GetComponent <TokenExchangeUI>().enabled = false;
        tempIcon.transform.SetParent(temp.transform);
        tempIcon.transform.localScale          = new Vector3(1, 1, 1);
        tempIcon.GetComponent <Image>().sprite = token.GetComponent <TokenIHM>().getTokenIcon().GetComponent <SpriteRenderer>().sprite;
        tempIcon.transform.Find("Token Highlight").gameObject.SetActive(false);

        if (overflownCase.type == CaseBehavior.typeCase.caseFosse && token.GetComponent <Item_Corde>() == null)
        {
            interactableToken = false;
        }
        else
        {
            CharacterBehavior chara = token.GetComponent <CharacterBehavior>();
            if (chara != null)
            {
                if (chara.affiliationJoueur != associatedToken.affiliationJoueur || !chara.wounded)
                {
                    interactableToken = false;
                }
            }
        }
        // Si le token est porté par un personnage
        if (token.GetComponent <Token>().tokenHolder != null)
        {
            Token t = token.GetComponent <Token>();
            bool  holdingWoundedAlly = false;
            if (associatedCharacter.tokenTranporte != null)
            {
                if (associatedCharacter.tokenTranporte.GetComponent <CharacterBehavior>() != null)
                {
                    holdingWoundedAlly = associatedCharacter.tokenTranporte.GetComponent <CharacterBehavior>().wounded;
                }
            }
            // Si on survole un adversaire non blessé, on ne peut pas lui prendre son token
            // OU
            // Si le token est une corde au sol au dessus d'une fosse, on ne peut pas le récupérer (cela tuerait le personnage qui la tient)
            // OU
            // Si le personnage allié qui tient le token est blessé et que le personnage actif porte déjà un blessé, il ne peut qu'échanger les blessés
            if ((!gManager.isActivePlayer(t.tokenHolder.affiliationJoueur) && !t.tokenHolder.wounded) ||
                (!point.name.Contains("Carried") && token.GetComponent <Item_Corde>() != null && overflownCase.type == CaseBehavior.typeCase.caseFosse) ||
                (gManager.isActivePlayer(t.tokenHolder.affiliationJoueur) && holdingWoundedAlly && t.tokenHolder.wounded))
            {
                interactableToken = false;
            }
        }

        if (!interactableToken)
        {
            temp.GetComponent <Button>().enabled          = false;
            temp.GetComponent <TokenExchangeUI>().enabled = false;
            temp.transform.Find("Token Highlight").gameObject.SetActive(false);
        }
        point.GetComponent <ExchangePointUI>().occupyingToken = temp;
        gManager.exchangePoints.Add(point);
    }