public override void OnEndTurn(EndTurnMessage msg) { base.OnEndTurn(msg); if (msg.isRecipientTheActivePlayer) { gameUI.SetEndTurnButtonEnabled(false); foreach (var card in playerBoardCards) { card.OnEndTurn(); } if (currentCreature != null) { playerBoardCards.Remove(currentCreature); RearrangeBottomBoard(); playerInfo.namedZones["Hand"].AddCard(currentCreature.card); playerInfo.namedZones["Board"].RemoveCard(currentCreature.card); Destroy(currentCreature.gameObject); currentCreature = null; } if (currentSpellCard != null) { Destroy(currentSpellCard.GetComponent <BoardSpell>()); currentSpellCard = null; RearrangeHand(); } } gameUI.StopCountdown(); }
public override void OnCardUnselected(BoardCreature creature) { if (selectedCard == creature) { Destroy(target); selectedCard = null; } }
public override void OnCardUnselected(BoardCreature creature) { if (selectedCard != null && selectedCard == creature) { Destroy(target); selectedCard = null; validTargetSelected = false; targetInfo.Clear(); } }
public void End(BoardCreature creature) { if (!startedDrag) { return; } startedDrag = false; creature.ResolveCombat(); Destroy(gameObject); }
public override void OnCardSelected(BoardCreature creature) { if (targetType == EffectTarget.AnyPlayerOrCreature || targetType == EffectTarget.TargetCard || (targetType == EffectTarget.PlayerOrPlayerCreature && creature.tag == "PlayerOwned") || (targetType == EffectTarget.OpponentOrOpponentCreature && creature.tag == "OpponentOwned") || (targetType == EffectTarget.PlayerCard && creature.tag == "PlayerOwned") || (targetType == EffectTarget.OpponentCard && creature.tag == "OpponentOwned")) { var opponentHasProvoke = OpponentBoardContainsProvokingCreatures(); if (!opponentHasProvoke || (opponentHasProvoke && creature.card.HasKeyword("Provoke"))) { selectedCard = creature; selectedPlayer = null; CreateTarget(creature.transform.position); } } }
public override void OnCardSelected(BoardCreature creature) { if (targetType == EffectTarget.AnyPlayerOrCreature || targetType == EffectTarget.TargetCard || (targetType == EffectTarget.PlayerOrPlayerCreature && creature.tag == "PlayerOwned") || (targetType == EffectTarget.OpponentOrOpponentCreature && creature.tag == "OpponentOwned") || (targetType == EffectTarget.PlayerCard && creature.tag == "PlayerOwned") || (targetType == EffectTarget.OpponentCard && creature.tag == "OpponentOwned")) { var conditionsFullfilled = true; var cardTarget = effectTarget as CardTargetBase; foreach (var condition in cardTarget.conditions) { if (!condition.IsTrue(creature.card)) { conditionsFullfilled = false; break; } } if (conditionsFullfilled) { validTargetSelected = true; selectedCard = creature; selectedPlayer = null; targetInfo.Clear(); targetInfo.Add(2); targetInfo.Add(creature.card.instanceId); CreateTarget(creature.transform.position); } else { validTargetSelected = false; } } else { validTargetSelected = false; } }
public void PlayCard(CardView card) { if (card.CanBePlayed(this)) { gameUI.endTurnButton.SetEnabled(false); var gameConfig = GameManager.Instance.config; var libraryCard = gameConfig.GetCard(card.card.cardId); var cardType = gameConfig.cardTypes.Find(x => x.id == libraryCard.cardTypeId); if (cardType.name == "Creature") { var boardCreature = Instantiate(boardCreaturePrefab); var board = GameObject.Find("PlayerBoard"); boardCreature.tag = "PlayerOwned"; boardCreature.transform.parent = board.transform; boardCreature.transform.position = new Vector2(1.9f * playerBoardCards.Count, 0); boardCreature.GetComponent <BoardCreature>().ownerPlayer = this; boardCreature.GetComponent <BoardCreature>().PopulateWithInfo(card.card); playerHandCards.Remove(card); RearrangeHand(); playerBoardCards.Add(boardCreature.GetComponent <BoardCreature>()); Destroy(card.gameObject); currentCreature = boardCreature.GetComponent <BoardCreature>(); RearrangeBottomBoard(() => { var triggeredAbilities = libraryCard.abilities.FindAll(x => x is TriggeredAbility); TriggeredAbility targetableAbility = null; foreach (var ability in triggeredAbilities) { var triggeredAbility = ability as TriggeredAbility; var trigger = triggeredAbility.trigger as OnCardEnteredZoneTrigger; if (trigger != null && trigger.zoneId == boardZone.zoneId && triggeredAbility.target is IUserTarget) { targetableAbility = triggeredAbility; break; } } // Preemptively move the card so that the effect solver can properly check the availability of targets // by also taking into account this card (that is trying to be played). playerInfo.namedZones["Hand"].RemoveCard(card.card); playerInfo.namedZones["Board"].AddCard(card.card); if (targetableAbility != null && effectSolver.AreTargetsAvailable(targetableAbility.effect, card.card, targetableAbility.target)) { var targetingArrow = Instantiate(spellTargetingArrowPrefab).GetComponent <SpellTargetingArrow>(); boardCreature.GetComponent <BoardCreature>().abilitiesTargetingArrow = targetingArrow; targetingArrow.effectTarget = targetableAbility.target; targetingArrow.targetType = targetableAbility.target.GetTarget(); targetingArrow.onTargetSelected += () => { PlayCreatureCard(card.card, targetingArrow.targetInfo); effectSolver.MoveCard(netId, card.card, "Hand", "Board", targetingArrow.targetInfo); currentCreature = null; gameUI.endTurnButton.SetEnabled(true); }; targetingArrow.Begin(boardCreature.transform.localPosition); } else { PlayCreatureCard(card.card); effectSolver.MoveCard(netId, card.card, "Hand", "Board"); currentCreature = null; gameUI.endTurnButton.SetEnabled(true); } boardCreature.GetComponent <BoardCreature>().fightTargetingArrowPrefab = fightTargetingArrowPrefab; }); } else if (cardType.name == "Spell") { var spellsPivot = GameObject.Find("PlayerSpellsPivot"); var sequence = DOTween.Sequence(); sequence.Append(card.transform.DOMove(spellsPivot.transform.position, 0.5f)); sequence.Insert(0, card.transform.DORotate(Vector3.zero, 0.2f)); sequence.Play().OnComplete(() => { card.GetComponent <SortingGroup>().sortingLayerName = "BoardCards"; card.GetComponent <SortingGroup>().sortingOrder = 1000; var boardSpell = card.gameObject.AddComponent <BoardSpell>(); var triggeredAbilities = libraryCard.abilities.FindAll(x => x is TriggeredAbility); TriggeredAbility targetableAbility = null; foreach (var ability in triggeredAbilities) { var triggeredAbility = ability as TriggeredAbility; var trigger = triggeredAbility.trigger as OnCardEnteredZoneTrigger; if (trigger != null && trigger.zoneId == boardZone.zoneId && triggeredAbility.target is IUserTarget) { targetableAbility = triggeredAbility; break; } } currentSpellCard = card; if (targetableAbility != null && effectSolver.AreTargetsAvailable(targetableAbility.effect, card.card, targetableAbility.target)) { var targetingArrow = Instantiate(spellTargetingArrowPrefab).GetComponent <SpellTargetingArrow>(); boardSpell.targetingArrow = targetingArrow; targetingArrow.effectTarget = targetableAbility.target; targetingArrow.targetType = targetableAbility.target.GetTarget(); targetingArrow.onTargetSelected += () => { PlaySpellCard(card.card, targetingArrow.targetInfo); effectSolver.MoveCard(netId, card.card, "Hand", "Board", targetingArrow.targetInfo); currentSpellCard = null; gameUI.endTurnButton.SetEnabled(true); }; targetingArrow.Begin(boardSpell.transform.localPosition); } else { PlaySpellCard(card.card); effectSolver.MoveCard(netId, card.card, "Hand", "Board"); currentSpellCard = null; gameUI.endTurnButton.SetEnabled(true); } }); } } else { card.GetComponent <HandCard>().ResetToInitialPosition(); } }
public virtual void OnCardUnselected(BoardCreature creature) { }