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