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); }
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; } } }
// 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; }
// 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(); }
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; } } } }
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(); }