예제 #1
0
        private void ExecuteActionHeal(ActionHeal action)
        {
            if (gManager.onlineGameInterface.WaitingForExpectedState())
            {
                gManager.onlineGameInterface.ForceEndReplayAction(); return;
            }

            CharacterBehaviorIHM character = GetTokenByNameAndPlayerId(action.tokenName, action.playerId).GetComponent <CharacterBehaviorIHM>();
            CharacterBehaviorIHM target    = GetTokenById(action.targetId).GetComponent <CharacterBehaviorIHM>();

            if (action.tokenName == "Troll")
            {
                Debug.Assert(character == target);
                Debug.Assert(character is CB_TrollIHM);
                character.characterSelection();
                character.GetComponent <CB_TrollIHM>().regenerate();
                gManager.onlineGameInterface.ForceEndReplayAction();
            }
            else if (action.tokenName == "Cleric")
            {
                Debug.Assert(character == target);
                Debug.Assert(character is CB_ClercIHM);
                character.characterSelection();
                character.GetComponent <CB_ClercIHM>().healCharacter();
                // TODO: the target seems not to be actually applied
                // EndReplay is done by the clerc
            }
            else
            {
                Debug.Assert(false, "Unexpected character type");
                gManager.onlineGameInterface.ForceEndReplayAction();
            }
        }
예제 #2
0
        private void ExecuteActionDoor(ActionDoor action)
        {
            if (gManager.onlineGameInterface.WaitingForExpectedState())
            {
                gManager.onlineGameInterface.ForceEndReplayAction(); return;
            }

            CaseBehavior actionCharacterCell = gManager.getCase(action.y1, action.x1).GetComponent <CaseBehavior>();

            CharacterBehavior c = actionCharacterCell.getNonWoundedCharacter();

            Debug.Assert(c != null);
            CharacterBehaviorIHM character = c.GetComponent <CharacterBehaviorIHM>();

            character.characterSelection();
            if (action.action == ActionType.DESTROYDOOR)
            {
                Debug.Assert(character is CB_GuerrierIHM);
                character.GetComponent <CB_GuerrierIHM>().briserHerse();
            }
            else
            {
                Debug.Assert(character is CB_VoleuseIHM);
                character.GetComponent <CB_VoleuseIHM>().changerEtatHerse();
            }
            gManager.onlineGameInterface.ForceEndReplayAction();
        }
예제 #3
0
        private void ExecuteActionRoomRotated(ActionRoomRotated action)
        {
            if (gManager.onlineGameInterface.WaitingForExpectedState())
            {
                gManager.onlineGameInterface.ForceEndReplayAction(); return;
            }

            TileBehaviorIHM      tile  = GetTileOfIndex(action.tileIndex).GetComponent <TileBehaviorIHM>();
            CharacterBehaviorIHM chara = GetTokenByNameAndPlayerId(action.tokenName, action.playerId).GetComponent <CharacterBehaviorIHM>();

            chara.characterSelection();
            tile.inverseRotationDirection = (tile.associatedTile.clockwiseRotation != action.clockwise);
            tile.enableTileRotation(); // enable rotation, apply the rotation and than disable rotation
            // EndReplayAction is called at the end of the rotation.
        }
예제 #4
0
        private void ExecuteActionCombatStart(ActionCombatStart action)
        {
            if (gManager.onlineGameInterface.WaitingForExpectedState())
            {
                gManager.onlineGameInterface.ForceEndReplayAction(); return;
            }

            Debug.Assert(action.attackers.Count > 0);
            Debug.Assert(action.defenders.Count > 0);
            CharacterBehaviorIHM character = GetTokenByNameAndPlayerId(action.attackers[0], action.playerId).GetComponent <CharacterBehaviorIHM>();
            string opponentId           = gManager.onlineGameInterface.playerId(1 - gManager.onlineGameInterface.playerIndex(action.playerId));
            CharacterBehaviorIHM target = GetTokenByNameAndPlayerId(action.defenders[0], opponentId).GetComponent <CharacterBehaviorIHM>();

            character.characterSelection();
            gManager.combatManager.combat(target.gameObject);
            gManager.onlineGameInterface.ForceEndReplayAction();
        }
예제 #5
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.
        }
예제 #6
0
        private void ExecuteActionRemove(ActionRemove action)
        {
            if (gManager.onlineGameInterface.WaitingForExpectedState())
            {
                gManager.onlineGameInterface.ForceEndReplayAction(); return;
            }

            if (action.score > 0) // get out
            {
                Debug.Assert(false, "Not implemented yet");
                //GameObject character = ...
                //moveCharacter(character.GetComponent<CharacterBehavior>());
                //endCharacterMovement(character.GetComponent<TokenIHM>());
                gManager.onlineGameInterface.ForceEndReplayAction();
            }
            else // use potion, fireballwand
            {
                Debug.Assert(action.removeTokenIds.Count == 1); // 1 item is consummed
                Token token = GetTokenById(action.removeTokenIds[0]);
                if (token is Item_PotionDeVitesse)
                {
                    CharacterBehaviorIHM character = GetTokenByNameAndPlayerId(action.tokenName, action.playerId).GetComponent <CharacterBehaviorIHM>();
                    character.characterSelection();
                    token.GetComponent <Item_PotionDeVitesse_IHM>().speedPotion();
                    gManager.onlineGameInterface.ForceEndReplayAction();
                }
                else if (token is Item_BatonDeBouleDeFeu)
                {
                    Multi.Logger.Instance.Log("LOG", "Skip removal of fireball");
                    gManager.onlineGameInterface.ForceEndReplayAction();
                }
                else
                {
                    Debug.Assert(false, "Unexpected token");
                }
            }
        }