protected List <int> GetAbilityTarget(RuntimeCard card) { var config = GameManager.Instance.config; var boardZoneId = config.gameZones.Find(x => x.name == "Board").id; var libraryCard = config.GetCard(card.cardId); var triggeredAbilities = libraryCard.abilities.FindAll(x => x is TriggeredAbility); var needsToSelectTarget = false; foreach (var ability in triggeredAbilities) { var triggeredAbility = ability as TriggeredAbility; var trigger = triggeredAbility.trigger as OnCardEnteredZoneTrigger; if (trigger != null && trigger.zoneId == boardZoneId && triggeredAbility.target is IUserTarget) { needsToSelectTarget = true; break; } } if (needsToSelectTarget) { var targetInfo = new List <int>(); foreach (var ability in triggeredAbilities) { var triggeredAbility = ability as TriggeredAbility; } return(targetInfo); } else { return(null); } }
public static void MoveCard(RuntimeZone _fromZone, RuntimeZone _toZone, int _unique_CardId) { RuntimeCard _card = _fromZone.cards.Find(x => x.guid == _unique_CardId); _fromZone.RemoveCard(_unique_CardId); _toZone.AddCard(_card); }
protected bool TryToPlayCard(RuntimeCard card) { var availableMana = playerInfo.namedStats["Mana"].effectiveValue; var libraryCard = GameManager.Instance.config.GetCard(card.cardId); var cost = libraryCard.costs.Find(x => x is PayResourceCost); if (cost != null) { var payResourceCost = cost as PayResourceCost; var manaCost = payResourceCost.value; if (manaCost <= availableMana) { var target = GetAbilityTarget(card); if (card.cardType.name == "Creature") { playerInfo.namedZones["Hand"].RemoveCard(card); playerInfo.namedZones["Board"].AddCard(card); numTurnsOnBoard[card.instanceId] = 0; PlayCreatureCard(card, target); } else if (card.cardType.name == "Spell") { if (target != null) { PlaySpellCard(card, target); } } return(true); } } return(false); }
protected virtual IEnumerator CreateCardPreviewAsync(RuntimeCard card, Vector3 pos, bool highlight) { yield return(new WaitForSeconds(0.3f)); var gameConfig = GameManager.Instance.config; var libraryCard = gameConfig.GetCard(card.cardId); var cardType = gameConfig.cardTypes.Find(x => x.id == libraryCard.cardTypeId); if (cardType.name == "Creature") { currentCardPreview = Instantiate(creatureCardViewPrefab as GameObject); } else if (cardType.name == "Spell") { currentCardPreview = Instantiate(spellCardViewPrefab as GameObject); } var cardView = currentCardPreview.GetComponent <CardView>(); cardView.PopulateWithInfo(card); cardView.SetHighlightingEnabled(highlight); cardView.isPreview = true; var newPos = pos; newPos.y += 2.0f; currentCardPreview.transform.position = newPos; currentCardPreview.transform.localRotation = Quaternion.Euler(Vector3.zero); currentCardPreview.transform.localScale = new Vector2(1.5f, 1.5f); currentCardPreview.GetComponent <SortingGroup>().sortingOrder = 1000; currentCardPreview.layer = LayerMask.NameToLayer("Ignore Raycast"); currentCardPreview.transform.DOMoveY(newPos.y + 1.0f, 0.1f); }
public void LoadNetZone(RuntimeZone _localZone, NetZone _netZone, PlayerData _ownerPlayer) { //remove any illegal cards for (int i = 0; i < _localZone.cards.Count; i++) { RuntimeCard _card = _localZone.cards[i]; if (Array.Exists(_netZone.cards, x => x.unique_cardId == _card.guid) == false) { //remove the card StartCoroutine(GameScene.Active.ShowPlayerMessage("Developer Warning:: The Server Reverted A Move")); _localZone.RemoveCard(_card.guid); } } //add any new cards for (int i = 0; i < _netZone.cards.Length; i++) { NetCard _card = _netZone.cards[i]; RuntimeCard _localCard = _localZone.cards.Find(x => x.guid == _card.unique_cardId); if (_localCard == null) { //add the card _localZone.AddCard(NetworkUtilities.GetRuntimeCard(_card, _ownerPlayer)); } } }
protected virtual void AddCardToHand(RuntimeCard card) { var gameConfig = GameManager.Instance.config; var libraryCard = gameConfig.GetCard(card.cardId); var cardType = gameConfig.cardTypes.Find(x => x.id == libraryCard.cardTypeId); GameObject go = null; if (cardType.name == "Creature") { go = Instantiate(creatureCardViewPrefab as GameObject); } else if (cardType.name == "Spell") { go = Instantiate(spellCardViewPrefab as GameObject); } var cardView = go.GetComponent <CardView>(); cardView.PopulateWithInfo(card); var handCard = go.AddComponent <HandCard>(); handCard.ownerPlayer = this; handCard.boardZone = GameObject.Find("PlayerBoard"); playerHandCards.Add(cardView); go.GetComponent <SortingGroup>().sortingOrder = playerHandCards.Count; }
public virtual void PopulateWithInfo(RuntimeCard card) { this.card = card; var gameConfig = GameManager.Instance.config; /*var cardType = gameConfig.cardTypes.Find(x => x.id == card.cardId); * Assert.IsNotNull(cardType); * pictureSprite.sprite = Resources.Load<Sprite>(cardType.GetStringProperty("Picture"));*/ var libraryCard = gameConfig.GetCard(card.cardId); Assert.IsNotNull(libraryCard); nameText.text = libraryCard.name; bodyText.text = libraryCard.GetStringProperty("Text"); var cost = libraryCard.costs.Find(x => x is PayResourceCost); if (cost != null) { var payResourceCost = cost as PayResourceCost; manaCost = payResourceCost.value; costText.text = manaCost.ToString(); } pictureSprite.sprite = Resources.Load <Sprite>(string.Format("Images/{0}", libraryCard.GetStringProperty("Picture"))); var material = libraryCard.GetStringProperty("Material"); if (!string.IsNullOrEmpty(material)) { pictureSprite.material = Resources.Load <Material>(string.Format("Materials/{0}", material)); } }
public override void Resolve(GameState state, RuntimeCard card) { var stat = card.stats[statId]; stat.modifiers.Clear(); stat.baseValue = stat.originalValue; }
public void OnOpponentCardAdded_Hand(RuntimeCard _card, int _count) { GameObject _cardV = Instantiate(GameScene.Active.opponentHandCardPrefab); //Get the final position Vector3 _position = new Vector3(GameScene.Active.opponentHandCardsStart.position.x + (90 * (_count - 1)), GameScene.Active.opponentHandCardsStart.position.y, GameScene.Active.opponentHandCardsStart.position.z); _cardV.transform.position = _position; }
public static NetCard GetNetCard(RuntimeCard _card) { NetCard _madeCard = new NetCard() { cardName = _card.cardName, unique_cardId = _card.guid }; return(_madeCard); }
public void OnPlayerCardAdded_Hand(RuntimeCard _card, int _count) { CardVisual _cardV = Instantiate(GameScene.Active.playerHandCardPrefab).GetComponent <CardVisual>(); _cardV.Init(_card); //Get the final position Vector3 _position = new Vector3(GameScene.Active.playerHandCardsStart.position.x + (90 * (_count - 1)), GameScene.Active.playerHandCardsStart.position.y, GameScene.Active.playerHandCardsStart.position.z); _cardV.transform.position = _position; }
public static RuntimeCard GetRuntimeCard(NetCard _netCard, PlayerData _ownerPlayer) { RuntimeCard _liveCard = new RuntimeCard() { cardName = _netCard.cardName, guid = _netCard.unique_cardId, ownerPlayer = _ownerPlayer }; return(_liveCard); }
public override void PopulateWithInfo(RuntimeCard card) { base.PopulateWithInfo(card); attackStat = card.namedStats["Attack"]; defenseStat = card.namedStats["Life"]; attackText.text = attackStat.effectiveValue.ToString(); defenseText.text = defenseStat.effectiveValue.ToString(); attackStat.onValueChanged += (oldValue, newValue) => { attackText.text = attackStat.effectiveValue.ToString(); }; defenseStat.onValueChanged += (oldValue, newValue) => { defenseText.text = defenseStat.effectiveValue.ToString(); }; }
public virtual void Init(RuntimeCard _card) { card = _card; text.text = _card.cardName; if (spriteRend) { int rand = UnityEngine.Random.Range(0, allSprites.Count); spriteRend.sprite = allSprites[rand]; } }
private GameState CreateTestGameState() { var gameState = new GameState(); gameState.players.Add(new PlayerInfo()); gameState.players.Add(new PlayerInfo()); gameState.currentPlayer = gameState.players[0]; gameState.currentOpponent = gameState.players[1]; foreach (var player in gameState.players) { var life = new Stat(); life.statId = 0; life.name = "Life"; life.baseValue = 20; life.originalValue = 20; life.minValue = 0; life.maxValue = 99; player.stats[life.statId] = life; player.namedStats[life.name] = life; } foreach (var player in gameState.players) { var zone = new RuntimeZone(); zone.zoneId = 0; zone.instanceId = 0; zone.name = "Test zone"; zone.maxCards = 100; var life = new Stat(); life.statId = 0; life.name = "Life"; life.baseValue = 2; life.originalValue = 2; life.minValue = 0; life.maxValue = 99; var card = new RuntimeCard(); card.cardId = 0; card.instanceId = 0; card.stats[life.statId] = life; card.namedStats[life.name] = life; zone.AddCard(card); player.zones[zone.zoneId] = zone; player.namedZones[zone.name] = zone; } return(gameState); }
private void RefreshCardPanel() { CardStackPanel.Children.Clear(); int k = 0; StackPanel currentStackPanel = null; foreach (var c in GameEngine.Instance.Runtime.Cards) { if (c.Selected >= c.Number) { continue; //不显示挑选了的 } if (k % CommonSettings.HOST_CARD_IN_ONE_LINE == 0) { k = 0; currentStackPanel = new StackPanel() { Orientation = Orientation.Horizontal }; CardStackPanel.Children.Add(currentStackPanel); } RuntimeCard card = c; CardView cardView = CardView.CreateFromCard(card.Card, c.Number - c.Selected); currentStackPanel.Children.Add(cardView); cardView.MouseLeftButtonDown += (s, e) => { if (GameEngine.Instance.Runtime.SelectCardCount < 15) { if (card.Selected < card.Card.Max) { card.Selected++; this.Dispatcher.BeginInvoke(() => { this.RefreshCardPanel(); this.RefreshCurrentCardPanel(); }); } else { MessageBox.Show("此类卡牌你最多带" + card.Card.Max + "个"); } } else { MessageBox.Show("你最多只能挑选15张上场手牌"); } }; k++; } }
public void PlayerCard(RuntimeCard _card) { //RUN LOCAL SIMULATION GameFunctions.MoveCard(playerData.handZone, playerData.boardZone, _card.guid); //SEND MESSAGE TO SERVER MoveCardMessage moveCardMessgae = new MoveCardMessage() { playerGuid = playerData.guid, cardGuid = _card.guid, from_ZoneId = 0, to_ZoneId = 1 }; GameClient.Active.SendMessageToServer(moveCardMessgae); }
public void RemoveCard(int unique_instanceId) { RuntimeCard _card = cards.Find(x => x.guid == unique_instanceId); if (_card != null) { cards.Remove(_card); } else { Debug.LogError("No such card has been found in collection"); } OnCardRemoved?.Invoke(_card, cards.Count); }
public void OnPlayerCardAdded_Board(RuntimeCard _card, int _count) { //DESTROY THE CARD FROM THE HAND GameObject handCard = CardVisual.FindCardVisual(_card.guid).gameObject; Destroy(handCard); //MAKE NEW CARD CardVisual newCardVisual = Instantiate(GameScene.Active.boardCardPrefab).GetComponent <CardVisual>(); newCardVisual.Init(_card); newCardVisual.transform.position = new Vector3(); //ARRANGE THE CARD //get new position Vector3 newPosition = new Vector3(GameScene.Active.playerBoardCardsStart.transform.position.x + (_count - 1) * 90, GameScene.Active.playerBoardCardsStart.transform.position.y, GameScene.Active.playerBoardCardsStart.transform.position.z); newCardVisual.transform.DOMove(newPosition, .5f); }
public override void Resolve(GameState state, RuntimeCard card) { var stat = card.stats[statId]; var newValue = value.GetValue(state, card.ownerPlayer); var diff = 0; if (stat.effectiveValue >= newValue) { diff = -(stat.effectiveValue - newValue); } else { diff = newValue - stat.effectiveValue; } var modifier = new Modifier(diff, duration); stat.AddModifier(modifier); }
public void RefreshCurrentCardPanel() { int count = GameEngine.Instance.Runtime.SelectCardCount; this.SelectCardCountText.Text = count.ToString(); if (count < 15) { this.SelectCardCountText.Text += "(需要15个)"; } this.CurrentCardStackPanel.Children.Clear(); int k = 0; StackPanel currentStackPanel = null; foreach (var c in GameEngine.Instance.Runtime.Cards) { if (c.Selected == 0) { continue; } if (k % CommonSettings.HOST_CARD_IN_ONE_LINE == 0) { k = 0; currentStackPanel = new StackPanel() { Orientation = Orientation.Horizontal }; CurrentCardStackPanel.Children.Add(currentStackPanel); } RuntimeCard card = c; CardView cardView = CardView.CreateFromCard(card.Card, c.Selected); currentStackPanel.Children.Add(cardView); cardView.MouseLeftButtonDown += (s, e) => { card.Selected--; this.Dispatcher.BeginInvoke(() => { this.RefreshCardPanel(); this.RefreshCurrentCardPanel(); }); }; k++; } }
/// <summary> /// Returns true if this condition has been met on the specified card and false otherwise. /// </summary> /// <param name="card">The card.</param> /// <returns>True if this condition has been met on the specified card; false otherwise.</returns> public bool IsTrue(RuntimeCard card) { var stat = card.stats[statId]; switch (op) { case ConditionOperator.LessThan: return(stat.effectiveValue < value); case ConditionOperator.LessThanOrEqualTo: return(stat.effectiveValue <= value); case ConditionOperator.EqualTo: return(stat.effectiveValue == value); case ConditionOperator.GreaterThanOrEqualTo: return(stat.effectiveValue >= value); case ConditionOperator.GreaterThan: return(stat.effectiveValue > value); } return(false); }
public override void Resolve(GameState state, RuntimeCard card) { var modifier = new Modifier(-value.GetValue(state, card.ownerPlayer), duration); card.stats[statId].AddModifier(modifier); }
public void OnOpponentCardAdded_Board(RuntimeCard _card, int _count) { }
public virtual void PopulateWithInfo(RuntimeCard card) { this.card = card; var gameConfig = GameManager.Instance.config; var libraryCard = gameConfig.GetCard(card.cardId); Assert.IsNotNull(libraryCard); nameText.text = libraryCard.name; attackStat = card.namedStats["Attack"]; healthStat = card.namedStats["Life"]; attackText.text = attackStat.effectiveValue.ToString(); healthText.text = healthStat.effectiveValue.ToString(); pictureSprite.sprite = Resources.Load <Sprite>(string.Format("Images/{0}", libraryCard.GetStringProperty("Picture"))); var material = libraryCard.GetStringProperty("Material"); if (!string.IsNullOrEmpty(material)) { pictureSprite.material = Resources.Load <Material>(string.Format("Materials/{0}", material)); } onAttackStatChangedDelegate = (oldValue, newValue) => { UpdateStatText(attackText, attackStat); }; attackStat.onValueChanged += onAttackStatChangedDelegate; onHealthStatChangedDelegate = (oldValue, newValue) => { UpdateStatText(healthText, healthStat); }; healthStat.onValueChanged += onHealthStatChangedDelegate; var subtypes = gameConfig.keywords.Find(x => x.name == "Subtypes"); var impetus = subtypes.values.FindIndex(x => x.value == "Impetus"); var provoke = subtypes.values.FindIndex(x => x.value == "Provoke"); foreach (var keyword in libraryCard.keywords) { if (keyword.keywordId == subtypes.id) { if (keyword.valueId == impetus) { hasImpetus = true; } else if (keyword.valueId == provoke) { hasProvoke = true; } } } if (hasProvoke) { glowSprite.gameObject.SetActive(false); shadowSprite.gameObject.SetActive(false); shieldGlowSprite.gameObject.SetActive(true); shieldShadowSprite.gameObject.SetActive(true); shieldSprite.gameObject.SetActive(true); } SetHighlightingEnabled(false); if (hasImpetus) { StopSleepingParticles(); if (ownerPlayer != null) { SetHighlightingEnabled(true); isPlayable = true; } } }
protected List <int> GetAbilityTarget(RuntimeCard card) { var config = GameManager.Instance.config; var boardZoneId = config.gameZones.Find(x => x.name == "Board").id; var libraryCard = config.GetCard(card.cardId); var triggeredAbilities = libraryCard.abilities.FindAll(x => x is TriggeredAbility); var needsToSelectTarget = false; foreach (var ability in triggeredAbilities) { var triggeredAbility = ability as TriggeredAbility; var trigger = triggeredAbility.trigger as OnCardEnteredZoneTrigger; if (trigger != null && trigger.zoneId == boardZoneId && triggeredAbility.target is IUserTarget) { needsToSelectTarget = true; break; } } if (needsToSelectTarget) { var targetInfo = new List <int>(); foreach (var ability in triggeredAbilities) { var triggeredAbility = ability as TriggeredAbility; if (IsBuffEffect(triggeredAbility.effect)) { if (triggeredAbility.effect is PlayerEffect) { targetInfo.Add(0); } else if (triggeredAbility.effect is CardEffect) { var target = GetRandomCreature(); if (target != null) { targetInfo.Add(boardZoneId); targetInfo.Add(target.instanceId); } else { return(null); } } } else { if (triggeredAbility.effect is PlayerEffect) { targetInfo.Add(1); } else if (triggeredAbility.effect is CardEffect) { var target = GetRandomOpponentCreature(); if (target != null) { targetInfo.Add(boardZoneId); targetInfo.Add(target.instanceId); } else { return(null); } } } } return(targetInfo); } else { return(null); } }
/// <summary> /// Returns true if this condition has been met on the specified card and false otherwise. /// </summary> /// <param name="card">The card.</param> /// <returns>True if this condition has been met on the specified card; false otherwise.</returns> public override bool IsTrue(RuntimeCard card) { return(card.keywords.Find(x => x.keywordId == keywordId && x.valueId == valueId) == null); }
public override void Resolve(GameState state, RuntimeCard card) { card.RemoveKeyword(keywordTypeId, keywordValueId); }
private void OnPlayerCardRemoved_Board(RuntimeCard _card, int _count) { CardVisual _visual = CardVisual.FindCardVisual(_card.guid); Destroy(_visual.gameObject); }
public virtual void CreateCardPreview(RuntimeCard card, Vector3 pos, bool highlight = false) { isPreviewActive = true; currentPreviewedCardId = card.instanceId; createPreviewCoroutine = StartCoroutine(CreateCardPreviewAsync(card, pos, highlight)); }