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
            }));
        }
Beispiel #2
0
        public void StartTurn()
        {
            if (_gameplayManager.IsGameEnded)
            {
                return;
            }

            CurrentTurn++;

            _gameplayManager.CurrentTurnPlayer.Turn++;

            if (_dataManager.CachedUserLocalData.Tutorial && !_tutorialManager.IsTutorial)
            {
                Debug.Log("_dataManager.CachedUserLocalData.Tutorial = " + _dataManager.CachedUserLocalData.Tutorial);
                Debug.Log("_tutorialManager.IsTutorial = " + _tutorialManager.IsTutorial);
                _tutorialManager.StartTutorial();
            }

            _uiManager.GetPage <GameplayPage>().SetEndTurnButtonStatus(_gameplayManager.IsLocalPlayerTurn());

            UpdatePositionOfCardsInOpponentHand();
            _playerController.IsActive = _gameplayManager.IsLocalPlayerTurn();

            if (_gameplayManager.IsLocalPlayerTurn())
            {
                List <BoardUnit> creatures = new List <BoardUnit>();

                foreach (BoardUnit card in PlayerBoardCards)
                {
                    if (_playerController == null || !card.GameObject)
                    {
                        creatures.Add(card);
                        continue;
                    }

                    card.OnStartTurn();
                }

                foreach (BoardUnit item in creatures)
                {
                    PlayerBoardCards.Remove(item);
                }

                creatures.Clear();

                foreach (BoardUnit card in PlayerBoardCards)
                {
                    card.SetHighlightingEnabled(true);
                }
            }
            else
            {
                foreach (BoardUnit card in OpponentBoardCards)
                {
                    card.OnStartTurn();
                }

                foreach (BoardCard card in PlayerHandCards)
                {
                    card.SetHighlightingEnabled(false);
                }

                foreach (BoardUnit card in PlayerBoardCards)
                {
                    card.SetHighlightingEnabled(false);
                }
            }

            _gameplayManager.CurrentPlayer.InvokeTurnStarted();
            _gameplayManager.OpponentPlayer.InvokeTurnStarted();

            _playerController.UpdateHandCardsHighlight();

            _tutorialManager.ReportAction(Enumerators.TutorialReportAction.START_TURN);

            TurnStarted?.Invoke();
        }
Beispiel #3
0
        public void DoSkillAction(BoardSkill skill, object target = null)
        {
            if (skill == null)
            {
                return;
            }

            if (!skill.IsUsing)
            {
                return;
            }

            if (skill.FightTargetingArrow != null)
            {
                if (skill.FightTargetingArrow.SelectedPlayer != null)
                {
                    Player targetPlayer = skill.FightTargetingArrow.SelectedPlayer;

                    string soundFile = GetSoundBySkills(skill);
                    if (!string.IsNullOrEmpty(soundFile))
                    {
                        _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, soundFile, Constants.OverlordAbilitySoundVolume, false);
                    }

                    _vfxController.CreateSkillVfx(
                        GetVfxPrefabBySkill(skill),
                        skill.SelfObject.transform.position,
                        targetPlayer,
                        x =>
                    {
                        skill.UseSkill(targetPlayer);
                        DoActionByType(skill, targetPlayer);
                        _tutorialManager.ReportAction(Enumerators.TutorialReportAction.USE_ABILITY);
                    });
                }
                else if (skill.FightTargetingArrow.SelectedCard != null)
                {
                    BoardUnit targetUnit = skill.FightTargetingArrow.SelectedCard;

                    string soundFile = GetSoundBySkills(skill);
                    if (!string.IsNullOrEmpty(soundFile))
                    {
                        _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, soundFile, Constants.OverlordAbilitySoundVolume, false);
                    }

                    _vfxController.CreateSkillVfx(
                        GetVfxPrefabBySkill(skill),
                        skill.SelfObject.transform.position,
                        targetUnit,
                        x =>
                    {
                        DoActionByType(skill, targetUnit);
                        skill.UseSkill(targetUnit);
                        _tutorialManager.ReportAction(Enumerators.TutorialReportAction.USE_ABILITY);
                    });
                }

                skill.CancelTargetingArrows();
                skill.FightTargetingArrow = null;
            }
            else if (target != null)
            {
                string soundFile = GetSoundBySkills(skill);
                if (!string.IsNullOrEmpty(soundFile))
                {
                    _soundManager.PlaySound(Enumerators.SoundType.OVERLORD_ABILITIES, soundFile, Constants.OverlordAbilitySoundVolume, false);
                }

                _vfxController.CreateSkillVfx(
                    GetVfxPrefabBySkill(skill),
                    skill.SelfObject.transform.position,
                    target,
                    x =>
                {
                    DoActionByType(skill, target);
                    skill.UseSkill(target);
                    _tutorialManager.ReportAction(Enumerators.TutorialReportAction.USE_ABILITY);
                });
            }
        }
        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();
            }
        }