public void AttackPlayerByUnit(BoardUnit attackingUnit, Player attackedPlayer)
        {
            int damageAttacking = attackingUnit.CurrentDamage;

            if (attackingUnit != null && attackedPlayer != null)
            {
                attackedPlayer.Health -= damageAttacking;
            }

            attackingUnit.InvokeUnitAttacked(attackedPlayer, damageAttacking, true);

            _vfxController.SpawnGotDamageEffect(attackedPlayer, -damageAttacking);

            _tutorialManager.ReportAction(Enumerators.TutorialReportAction.ATTACK_CARD_HERO);

            _actionsQueueController.PostGameActionReport(_actionsQueueController.FormatGameActionReport(
                                                             Enumerators.ActionType.ATTACK_PLAYER_BY_CREATURE, new object[]
            {
                attackingUnit, attackedPlayer
            }));
        }
        private void ReturnBoardUnitToHand(BoardUnit unit)
        {
            CreateVfx(unit.Transform.position, true, 3f, true);

            CardsController.ReturnCardToHand(unit);

            ActionsQueueController.PostGameActionReport(ActionsQueueController.FormatGameActionReport(
                                                            Enumerators.ActionType.RETURN_TO_HAND_CARD_ABILITY, new object[]
            {
                PlayerCallerOfAbility, AbilityData, unit
            }));
        }
示例#3
0
        private void FreezeAction(Player owner, BoardSkill boardSkill, HeroSkill skill, object target)
        {
            switch (target)
            {
            case BoardUnit unit:
                unit.Stun(Enumerators.StunType.FREEZE, skill.Value);

                _vfxController.CreateVfx(
                    _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/Freeze_ImpactVFX"), unit);

                _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES,
                                        skill.OverlordSkill.ToString().ToLower() + "_Impact", Constants.OverlordAbilitySoundVolume,
                                        Enumerators.CardSoundType.NONE);

                _actionsQueueController.PostGameActionReport(_actionsQueueController.FormatGameActionReport(
                                                                 Enumerators.ActionType.STUN_UNIT_BY_SKILL, new object[]
                {
                    owner, unit
                }));
                break;

            case Player player:
                player.Stun(Enumerators.StunType.FREEZE, skill.Value);

                _vfxController.CreateVfx(
                    _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/VFX/Skills/Freeze_ImpactVFX"), player);
                _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES,
                                        skill.OverlordSkill.ToString().ToLower() + "_Impact", Constants.OverlordAbilitySoundVolume,
                                        Enumerators.CardSoundType.NONE);

                _actionsQueueController.PostGameActionReport(_actionsQueueController.FormatGameActionReport(
                                                                 Enumerators.ActionType.STUN_PLAYER_BY_SKILL, new object[]
                {
                    owner, player
                }));
                break;
            }
        }
        public override void Action(object info = null)
        {
            base.Action(info);

            Vector3 unitPosition = TargetUnit.Transform.position;

            CreateVfx(unitPosition, true, 3f, true);

            CardsController.ReturnCardToHand(TargetUnit);

            ActionsQueueController.PostGameActionReport(ActionsQueueController.FormatGameActionReport(
                                                            Enumerators.ActionType.RETURN_TO_HAND_CARD_ABILITY, new object[]
            {
                PlayerCallerOfAbility, AbilityData, TargetUnit
            }));
        }
示例#5
0
        protected override void UnitAttackedHandler(object info, int damage, bool isAttacker)
        {
            base.UnitAttackedHandler(info, damage, isAttacker);
            if (AbilityCallType != Enumerators.AbilityCallType.ATTACK || !isAttacker)
            {
                return;
            }

            if (info is BoardUnit)
            {
                BoardUnit creature = info as BoardUnit;
                creature.Stun(Enumerators.StunType.FREEZE, Value);
                CreateVfx(creature.Transform.position);

                ActionsQueueController.PostGameActionReport(ActionsQueueController.FormatGameActionReport(
                                                                Enumerators.ActionType.STUN_CREATURE_BY_ABILITY, new object[]
                {
                    AbilityUnitOwner, creature
                }));
            }
        }
        public override void Action(object info = null)
        {
            base.Action(info);

            if (AbilityUnitOwner.IsReanimated)
            {
                return;
            }

            Player      owner       = AbilityUnitOwner.OwnerPlayer;
            Card        libraryCard = AbilityUnitOwner.Card.LibraryCard.Clone();
            WorkingCard card        = new WorkingCard(libraryCard, owner);
            BoardUnit   unit        = CreateBoardUnit(card, owner);

            unit.IsReanimated             = true;
            AbilityUnitOwner.IsReanimated = true;

            owner.AddCardToBoard(card);
            owner.BoardCards.Add(unit);

            if (!owner.IsLocalPlayer)
            {
                BattlegroundController.OpponentBoardCards.Add(unit);
                BattlegroundController.UpdatePositionOfBoardUnitsOfOpponent();
            }
            else
            {
                BattlegroundController.PlayerBoardCards.Add(unit);
                BattlegroundController.UpdatePositionOfBoardUnitsOfPlayer(GameplayManager.CurrentPlayer.BoardCards);
            }

            ActionsQueueController.PostGameActionReport(ActionsQueueController.FormatGameActionReport(
                                                            Enumerators.ActionType.REANIMATE_UNIT_BY_ABILITY, new object[]
            {
                owner, unit
            }));
        }
示例#7
0
        private void PlayCardCompleteHandler(WorkingCard card, object target)
        {
            WorkingCard workingCard =
                _gameplayManager.OpponentPlayer.CardsOnBoard[_gameplayManager.OpponentPlayer.CardsOnBoard.Count - 1];

            switch (card.LibraryCard.CardKind)
            {
            case Enumerators.CardKind.CREATURE:
            {
                BoardUnit  boardUnitElement = new BoardUnit(GameObject.Find("OpponentBoard").transform);
                GameObject boardCreature    = boardUnitElement.GameObject;
                boardCreature.tag = SRTags.OpponentOwned;
                boardCreature.transform.position = Vector3.zero;
                boardUnitElement.OwnerPlayer     = card.Owner;

                boardUnitElement.SetObjectInfo(workingCard);
                _battlegroundController.OpponentBoardCards.Add(boardUnitElement);

                boardCreature.transform.position +=
                    Vector3.up * 2f;     // Start pos before moving cards to the opponents board

                // PlayArrivalAnimation(boardCreature, libraryCard.cardType);
                _gameplayManager.OpponentPlayer.BoardCards.Add(boardUnitElement);

                _actionsQueueController.PostGameActionReport(_actionsQueueController.FormatGameActionReport(
                                                                 Enumerators.ActionType.PLAY_UNIT_CARD, new object[]
                    {
                        boardUnitElement.OwnerPlayer, boardUnitElement
                    }));

                boardUnitElement.PlayArrivalAnimation();

                _battlegroundController.UpdatePositionOfBoardUnitsOfOpponent(
                    () =>
                    {
                        bool createTargetArrow = false;

                        if (card.LibraryCard.Abilities != null && card.LibraryCard.Abilities.Count > 0)
                        {
                            createTargetArrow =
                                _abilitiesController.IsAbilityCanActivateTargetAtStart(
                                    card.LibraryCard.Abilities[0]);
                        }

                        if (target != null)
                        {
                            CreateOpponentTarget(
                                createTargetArrow,
                                false,
                                boardCreature.gameObject,
                                target,
                                () =>
                            {
                                _abilitiesController.CallAbility(card.LibraryCard, null, workingCard,
                                                                 Enumerators.CardKind.CREATURE, boardUnitElement, null, false, null, target);
                            });
                        }
                        else
                        {
                            _abilitiesController.CallAbility(card.LibraryCard, null, workingCard,
                                                             Enumerators.CardKind.CREATURE, boardUnitElement, null, false, null);
                        }
                    });
                break;
            }

            case Enumerators.CardKind.SPELL:
            {
                GameObject spellCard = Object.Instantiate(_cardsController.SpellCardViewPrefab);
                spellCard.transform.position = GameObject.Find("OpponentSpellsPivot").transform.position;

                CurrentSpellCard = new SpellBoardCard(spellCard);

                CurrentSpellCard.Init(workingCard);
                CurrentSpellCard.SetHighlightingEnabled(false);

                BoardSpell boardSpell = new BoardSpell(spellCard, workingCard);

                spellCard.gameObject.SetActive(false);

                bool createTargetArrow = false;

                if (card.LibraryCard.Abilities != null && card.LibraryCard.Abilities.Count > 0)
                {
                    createTargetArrow =
                        _abilitiesController.IsAbilityCanActivateTargetAtStart(card.LibraryCard.Abilities[0]);
                }

                if (target != null)
                {
                    CreateOpponentTarget(
                        createTargetArrow,
                        false,
                        _gameplayManager.OpponentPlayer.AvatarObject,
                        target,
                        () =>
                        {
                            _abilitiesController.CallAbility(card.LibraryCard, null, workingCard,
                                                             Enumerators.CardKind.SPELL, boardSpell, null, false, null, target);
                        });
                }
                else
                {
                    _abilitiesController.CallAbility(card.LibraryCard, null, workingCard,
                                                     Enumerators.CardKind.SPELL, boardSpell, null, false, null);
                }

                break;
            }
            }
        }
        public void PlayPlayerCard(Player player, BoardCard card, HandBoardCard handCard)
        {
            if (card.CanBePlayed(card.WorkingCard.Owner))
            {
                Card libraryCard = card.WorkingCard.LibraryCard;

                card.Transform.DORotate(Vector3.zero, .1f);
                card.HandBoardCard.Enabled = false;

                _soundManager.PlaySound(Enumerators.SoundType.CARD_FLY_HAND_TO_BATTLEGROUND,
                                        Constants.CardsMoveSoundVolume);

                player.ThrowPlayCardEvent(card.WorkingCard);

                switch (libraryCard.CardKind)
                {
                case Enumerators.CardKind.CREATURE:
                {
                    int   indexOfCard             = 0;
                    float newCreatureCardPosition = card.Transform.position.x;

                    // set correct position on board depends from card view position
                    for (int i = 0; i < player.BoardCards.Count; i++)
                    {
                        if (newCreatureCardPosition > player.BoardCards[i].Transform.position.x)
                        {
                            indexOfCard = i + 1;
                        }
                        else
                        {
                            break;
                        }
                    }

                    BoardUnit boardUnit = new BoardUnit(_playerBoard.transform);
                    boardUnit.Transform.tag      = SRTags.PlayerOwned;
                    boardUnit.Transform.parent   = _playerBoard.transform;
                    boardUnit.Transform.position = new Vector2(1.9f * player.BoardCards.Count, 0);
                    boardUnit.OwnerPlayer        = card.WorkingCard.Owner;
                    boardUnit.SetObjectInfo(card.WorkingCard);

                    _battlegroundController.PlayerHandCards.Remove(card);
                    _battlegroundController.PlayerBoardCards.Add(boardUnit);
                    player.AddCardToBoard(card.WorkingCard);
                    player.RemoveCardFromHand(card.WorkingCard);

                    player.BoardCards.Insert(indexOfCard, boardUnit);

                    _timerManager.AddTimer(
                        creat =>
                        {
                            card.WorkingCard.Owner.GraveyardCardsCount++;
                        });

                    card.RemoveCardParticle.Play();

                    _actionsQueueController.PostGameActionReport(_actionsQueueController.FormatGameActionReport(
                                                                     Enumerators.ActionType.PLAY_UNIT_CARD, new object[]
                        {
                            boardUnit.OwnerPlayer, boardUnit
                        }));

                    UpdateCardsStatusEvent?.Invoke(player);

                    Sequence animationSequence = DOTween.Sequence();
                    animationSequence.Append(card.Transform.DOScale(new Vector3(.27f, .27f, .27f), 1f));
                    animationSequence.OnComplete(
                        () =>
                        {
                            RemoveCard(new object[]
                            {
                                card
                            });

                            _timerManager.AddTimer(
                                param =>
                            {
                                boardUnit.PlayArrivalAnimation();
                                _battlegroundController.UpdatePositionOfBoardUnitsOfPlayer(
                                    _gameplayManager.CurrentPlayer.BoardCards,
                                    () =>
                                {
                                    _abilitiesController.CallAbility(libraryCard, card, card.WorkingCard,
                                                                     Enumerators.CardKind.CREATURE, boardUnit, CallCardPlay, true, null);
                                });
                            },
                                null,
                                0.1f);
                        });

                    player.Goo -= card.ManaCost;
                    _tutorialManager.ReportAction(Enumerators.TutorialReportAction.MOVE_CARD);
                    break;
                }

                case Enumerators.CardKind.SPELL:
                {
                    player.CardsInHand.Remove(card.WorkingCard);
                    _battlegroundController.PlayerHandCards.Remove(card);
                    _battlegroundController.UpdatePositionOfCardsInPlayerHand();

                    card.GameObject.GetComponent <SortingGroup>().sortingLayerID = SRSortingLayers.BoardCards;
                    card.GameObject.GetComponent <SortingGroup>().sortingOrder   = 1000;

                    BoardSpell boardSpell = new BoardSpell(card.GameObject, card.WorkingCard);
                    boardSpell.Transform.position = Vector3.zero;

                    _abilitiesController.CallAbility(libraryCard, card, card.WorkingCard,
                                                     Enumerators.CardKind.SPELL, boardSpell, CallSpellCardPlay, true, null, handCard: handCard);
                    break;
                }

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            else
            {
                card.HandBoardCard.ResetToInitialPosition();
            }
        }