Beispiel #1
0
 public bool placeTokenOnAvailableSpot(TokenIHM token)
 {
     for (int i = 0; i < transform.childCount; i++)
     {
         if (transform.GetChild(i).name != "Highlight")
         {
             if (transform.GetChild(i).GetComponent <PlacementTokens>().tokenAssociated == null)
             {
                 token.placeToken(transform.GetChild(i).gameObject);
                 return(true);
             }
         }
     }
     return(false);
 }
Beispiel #2
0
 private void UpdatePreviousPosition(Token token)
 {
     if (token.GetComponent <TokenIHM>().previousPersonnageAssocie != null)
     {
         TokenIHM holder = token.GetComponent <TokenIHM>().previousPersonnageAssocie.GetComponent <TokenIHM>();
         Debug.Assert(holder != null);
         if (holder.previousCase != null)
         {
             token.GetComponent <TokenIHM>().previousCase = holder.previousCase;
         }
         else
         {
             token.GetComponent <TokenIHM>().previousCase = holder.GetComponent <Token>().caseActuelle;
         }
     }
 }
Beispiel #3
0
    // Le personnage ramasse un token
    public void ramasserToken(GameObject token, bool record = true)
    {
        // Afficher l'icone du token sur le personnage et faire disparaitre le token
        TokenIHM t = token.GetComponent <TokenIHM>();

        if (record)
        {
            t.recordPreviousState();
        }
        t.hideToken();
        t.fadeInTokenIcon();

        associatedCharacter.ramasserToken(token);
        t.transform.localPosition = new Vector3(1.0f, 1.0f, -1.0f);

        token.GetComponent <Collider>().enabled = false;
    }
Beispiel #4
0
    // Le personnage dépose un token
    public void deposerToken(bool record = true)
    {
        // Retirer l'icone du token sur le personnage, puis faire réapparaitre le token
        TokenIHM t = associatedCharacter.tokenTranporte.GetComponent <TokenIHM>();

        if (record)
        {
            t.recordPreviousState();
        }
        t.getTokenIcon().GetComponent <SpriteRenderer>().enabled = false;
        t.transform.position = new Vector3(transform.position.x, transform.position.y, 0);

        associatedCharacter.tokenTranporte.GetComponent <Collider>().enabled = true;
        associatedCharacter.tokenTranporte.GetComponent <TokenIHM>().changeSortingLayer("TokensOnBoard");

        associatedCharacter.deposerToken();

        t.applyNewScale(t.NORMAL_SCALE_VALUE);
        t.displayToken();
    }
Beispiel #5
0
 public void updateCurrentCell()
 {
     if (moveTargets.Count > 0)
     {
         GameObject targetCell = moveTargets[moveTargets.Count - 1].GetComponent <CibleDeplacement>().caseAssociated;
         if (targetCell != associatedToken.caseActuelle)
         {
             Debug.LogWarning("update current cell");
             recordPreviousState();
             associatedToken.caseActuelle = targetCell;
             CharacterBehavior character = associatedToken.GetComponent <CharacterBehavior>();
             if (character != null && character.tokenTranporte != null)
             {
                 TokenIHM token = character.tokenTranporte.GetComponent <TokenIHM>();
                 token.recordPreviousState();
                 token.GetComponent <Token>().caseActuelle = targetCell;
             }
         }
     }
 }
Beispiel #6
0
        private void ExecuteActionTokensUpdate(ActionTokensUpdate action)
        {
            foreach (var token in action.tokens)
            {
                if (!token.isHidden)
                {
                    gManager.onlineGameInterface.RegisterToken(token.playerId, token.token, token.id); // all ids update must be done first !!!
                }
            }
            if (gManager.onlineGameInterface.WaitingForExpectedState())
            {
                if (gManager.onlineGameInterface.GetCurrentOnlineState() == "discoverRoomPlaceToken")
                {
                    // if this assert is trigged we will need to add a
                    // hack for very special case, depending of weither bga send grouped updates or not for placed tokens.
                    Debug.Assert(action.tokens.Count <= 1, "discoverRoomPlaceToken's TokensUpdate has been grouped by bga !");
                }
                gManager.onlineGameInterface.ForceEndReplayAction();
                return;
            }

            bool discoveredRoomPlacementComplete = true;
            bool cancelCurrentMove = false;
            int placementIndex     = 0;
            foreach (var token in action.tokens)
            {
                Multi.Logger.Instance.Log("DETAIL", token.ToString());
                switch (action.destinationType)
                {
                case ActionTokensUpdate.Destination.STARTING_LINE:     // PLACEMENT1
                {
                    Debug.Assert(!token.onRoom);
                    if (isOnlinePlayer(token.playerId))
                    {
                        TokenIHM tokenIHM = GetRandomFreeCharacter(token.playerId).GetComponent <TokenIHM>();
                        tokenIHM.displayToken();         // Fix display bug
                        tokenIHM.placeTokenOnCell(gManager.getCase(token.y, token.x).GetComponent <CaseBehavior>());
                    }
                    else
                    {
                        Multi.Logger.Instance.Log("DETAIL", "Placement of hideen token on cell " + token.y + "," + token.x + " confirmed by bga");
                    }
                    break;
                }

                case ActionTokensUpdate.Destination.ROOM:     // PLACEMENT2
                {
                    Debug.Assert(token.onRoom);
                    HiddenTileBehavior tileBack = GetTileBack(token.room);
                    TokenIHM           tokenIHM = GetRandomFreeToken(token.playerId).GetComponent <TokenIHM>();
                    if (!tileBack.placeTokenOnAvailableSpot(tokenIHM))
                    {
                        Multi.Logger.Instance.Log("ERROR", "ActionPlayer: No spot found on tile index " + tileBack.tileAssociated.GetComponent <TileBehavior>().index);
                    }
                    break;
                }

                case ActionTokensUpdate.Destination.REVEAL:     // REVEAL STARTING CHARACTERS
                {
                    Debug.Assert(!token.onRoom && !token.isHidden);
                    Token tokenToPlace = GetTokenByNameAndPlayerId(token.token, token.playerId);
                    Debug.Assert(tokenToPlace != null);
                    Token tokenFound = GetTokenAtPosition(token.x, token.y);
                    Debug.Assert(tokenFound != null);
                    SwitchTokenPositions(tokenToPlace, tokenFound);
                    break;
                }

                case ActionTokensUpdate.Destination.TO_PLACE:     // ROOM DISCOVERED
                {
                    Debug.Assert(tileToDiscover != null);
                    PlacementTokens targetPlacement = tileToDiscover.getPlacementSpot(placementIndex);
                    ++placementIndex;
                    Debug.Assert(targetPlacement != null);
                    Token tokenFound   = targetPlacement.tokenAssociated.GetComponent <Token>();
                    Token tokenToPlace = GetTokenByNameAndPlayerId(token.token, token.playerId);
                    SwitchTokenPositions(tokenToPlace, tokenFound);
                    break;
                }

                case ActionTokensUpdate.Destination.BOARD:     // MISC
                {
                    if (gManager.onlineGameInterface.GetCurrentOnlineState() == "discoverRoomPlaceToken")
                    {
                        Debug.Assert(!token.isCarried);
                        Debug.Assert(!token.isHidden);
                        if (token.onRoom)
                        {
                            discoveredRoomPlacementComplete = false;
                        }
                        else
                        {
                            PlacementTokens target = FindRevealedTileTarget(gManager.getCase(token.y, token.x).GetComponent <CaseBehavior>());
                            Debug.Assert(target != null && target.tokenAssociated == null && !target.locked);
                            TokenIHM tokenIHM = GetTokenByNameAndPlayerId(token.token, token.playerId).GetComponent <TokenIHM>();
                            tokenIHM.placeToken(target.gameObject);
                        }
                    }
                    else if (gManager.onlineGameInterface.GetCurrentOnlineState() == "movingCharacterContinue")
                    {
                        if (GetTokenByNameAndPlayerId(token.token, token.playerId).gameObject == gManager.actionCharacter)
                        {
                            // update on the selected character means a move cancel, therefore: cancel move :)
                            cancelCurrentMove = true;
                        }
                    }
                    else
                    {
                        Multi.Logger.Instance.Log("LOG", "TokensUpdate: simple update has no effect");
                    }
                    break;
                }
                }
            }

            if (!discoveredRoomPlacementComplete)
            {
                Multi.Logger.Instance.Log("LOG", "TokensUpdate: discoveredRoom placement incomplete");
            }

            foreach (var token in action.tokens)
            {
                if (token.isCarried)
                {
                    gManager.onlineGameInterface.SetCarriedToken(token.holdingCharacterId, token.id);
                }
                else
                {
                    gManager.onlineGameInterface.SetDropped(token.id);
                }
            }

            if (action.destinationType == ActionTokensUpdate.Destination.TO_PLACE) // ROOM DISCOVERED
            {
                if (gManager.actionCharacter == null)
                {
                    gManager.actionCharacter = SelectACharacterToOpenRoom(tileToDiscover).gameObject;
                }
                if (!gManager.actionCharacter.GetComponent <CharacterBehavior>().selected)
                {
                    gManager.actionCharacter.GetComponent <CharacterBehavior>().selectionPersonnage();
                }
                tileToDiscover.openRoom();
                // TODO: wait for end of animation ?
                gManager.progression.BlockInteractionsUntilBgaAnswer(false); // allow player to interact again once room discovered
            }

            if (cancelCurrentMove)
            {
                gManager.actionCharacter.GetComponent <CharacterBehaviorIHM>().cancelMovement();
            }

            gManager.onlineGameInterface.ForceEndReplayAction();
        }